Oracle では、dba ユーザーを使用して「select username、lockwait、status、machine、program from v$session where sid in」ステートメントを実行してデッドロックをクエリできます。結果がある場合は、デッドロックが表示されます。
このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。
1. デッドロックを確認します
1) dba ユーザーを使用して次のステートメントを実行します
select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object)
結果を出力すると、デッドロックが発生していることを説明し、どのマシンがデッドロックであるかを確認できます。フィールドの説明:
Username: デッドロック ステートメントで使用されるデータベース ユーザー;
Lockwait: デッドロックのステータスコンテンツがある場合は、デッドロックであることを意味します。
ステータス: ステータス、アクティブはデッドロックを意味します。
マシン: デッドロック ステートメントが存在するマシン。
プログラム: デッドロック ステートメントは主にどのアプリケーションからのものですか?
2) dba ユーザーを使用して次のステートメントを実行し、デッドロック ステートメントを表示します。
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object))
2. デッドロックの解決策
1) デッドロックされたプロセスを見つけます:
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#, l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
2) デッドロックされたプロセスを強制終了します: alter system kill session ' sid,serial#'; (sid=l.session_id)
3) それでも解決できない場合:
select pro.spid from v$session ses, v$process pro where ses.sid=XX and ses.paddr=pro.addr;
sid をデッドロックされた sid に置き換えます:
推奨チュートリアル: " Oracleビデオチュートリアル"
以上がOracleでデッドロックをクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。