ORA-00060

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