ホームページ  >  記事  >  データベース  >  Oracleでデッドロックをクエリする方法

Oracleでデッドロックをクエリする方法

WBOY
WBOYオリジナル
2022-02-17 17:13:1832546ブラウズ

Oracle では、dba ユーザーを使用して「select username、lockwait、status、machine、program from v$session where sid in」ステートメントを実行してデッドロックをクエリできます。結果がある場合は、デッドロックが表示されます。

Oracleでデッドロックをクエリする方法

このチュートリアルの動作環境: Windows 10 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle でデッドロックをクエリする方法

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。