ORA-00060: リソース待機の間にデッドロックが検出されました。
デッドロックが発生したときのエラー。
調査方法は以下の通り。
1.初期化パラメータに指定された場所にトレースファイルが出力されるのでその場所を確認する(以下、出力先を確認するSQL)
SELECT VALUE FROM V$PARAMETER WHERE NAME ='user_dump_dest';
2.1のフォルダにalert_XXXX.logが出力されているので、そのファイル内を「ORA-00060」で検索し、
デッドロック時に作成されたトレースファイル(.trc)を特定する。
3.特定したトレースファイル内を「Information for the OTHER waiting sessions 」と「Current SQL Statement」のキーワードで検索し、
SQLIDと対象のSQLを特定する
----- Information for the OTHER waiting sessions ----- Session 519: sid: 999 ser: 9999 audsid: 9999999 user: 99/XXXXX flags: (0x8000045) USR/- flags_idl: (0x1) BSY/-/-/-/-/- flags2: (0x40008) -/- pid: 999 O/S info: user: SYSTEM, term: XXXXX, ospid: 99999 image: ORACLE.EXE (SHAD) client details: O/S info: user: XXXXX\Administrator, term: XXXXX, ospid: 9999:9999 machine: XXXXX\XXXXX program: sqlplus.exe application name: SQL*Plus, hash value=9999999999 current SQL: SELECT * FROM hogetbl2 FOR UPDATE ←★ここに注目 ----- End of information for the OTHER waiting sessions -----
----- Current SQL Statement for this session (sql_id=awtd8kauxjnyt) ----- SELECT * FROM hogeTbl WHERE hogeNO = :B2 AND hogeLINNO = :B1 FOR UPDATE ←★ここに注目 ----- PL/SQL Stack ----- ----- PL/SQL Call Stack -----
上記の内容よりテーブル「hogetbl2」,「hogeTbl」が原因でデッドロックが発生している可能性があるのが分かる
なお、1つのデッドロックに対して、1つの原因となるセッションの内容しか出力されないので
前後に出力されたトレースファイルで他にデッドロックが発生していないか確認してみること
動作確認環境:Oracle 11g