sqlplusで列の値を更新しようとすると問題が発生します。Oracleでのロックの解除10
基本的には完了しておらず、ハングアップしています。強制的にオラクルのロックを解除する方法があるのだろうか?
v $ locked_objectというテーブルに気付きました。このテーブルには、私が持っている問題に関連するオブジェクトIDが含まれています。
私はこれを十分に説明しました。
ありがとうございました!
sqlplusで列の値を更新しようとすると問題が発生します。Oracleでのロックの解除10
基本的には完了しておらず、ハングアップしています。強制的にオラクルのロックを解除する方法があるのだろうか?
v $ locked_objectというテーブルに気付きました。このテーブルには、私が持っている問題に関連するオブジェクトIDが含まれています。
私はこれを十分に説明しました。
ありがとうございました!
これはまさにあなたの目的を果たすだろう。
SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME>;
は、この文を使用して、対応するSERIAL#
を見つけることSESSION_ID
を使用します。
SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN (
SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME>
);
は、問題のタプルSID, SERIAL#
を見つけて、このようにそれを解放:
ALTER SYSTEM KILL SESSION 'SID, SERIAL#';
私はdba_blockersをチェックした後、アプリケーション内で開催セッションを見つけることでこの問題を解決しました。しかし、将来のためのALTERコマンドを覚えています。低い担当者のために答えを投票することはできません。おかげで –
私はあなたが今投票することができると思います:)ありがとう – Mari
他の誰かが同じテーブルを更新しており、まだコミットしていない可能性があります。それは、(別のツールや別のセッションで)あなたかもしれません。
ロックを解除する最も簡単な方法は、他のセッションで作業をコミットすることです。
こんにちは私はこの問題の原因をDBA_BLOCKERSで調べることができました。セッションIDを取得し、それを殺しました。 –
この問題を解決するために管理されました。
私はDBA_BLOCKERSテーブルを調べ、セッションIDを取得しました。その後、セッションを終了し、ロックが解除されました。
_what_ processオブジェクトをロックしていて、そのプロセスが何をしていたのですか?確かにそれを回避するよりも問題を解決する方が良いでしょうか? (私はあなたの質問に対する答えがノーだと確信しています)。 – Ben