ORA-00060: Deadlock detected while waiting for resource(リソース待機中にデッドロックを検出)
Oracle意味
2 つ以上のセッションが互いに相手の保持するリソースを待ち、デッドロック状態になっている。Oracle はこの循環を検出して犠牲者を選び、そのセッションの文をロールバックする。
原因
異なる順序で取得された行ロック、異なるトランザクションによる同じ行の交差更新、インデックスのない外部キーに起因する親テーブル更新時のテーブルロック、またはビットマップインデックスへの同時 DML。
対処方法
アラートログに記録されたデッドロックトレース (グラフ) ファイルを調べ、競合している SQL 文と行を特定する。アプリケーションでは常に同じ順序でテーブル/行にアクセスする。外部キー列にインデックスを作成する (インデックスのない FK は典型的なデッドロック原因)。トランザクションを短く保ち、コミット頻度を見直す。デッドロックになったトランザクションをアプリケーションで捕捉して再試行する。
同じデータベースの他の項目
- ORA-00001Unique constraint violated(一意制約違反)
- ORA-00054Resource busy and acquire with NOWAIT specified or timeout expired(リソースがビジー。NOWAIT 指定またはタイムアウト)
- ORA-01017Invalid username/password; logon denied(ユーザー名/パスワードが無効。ログオン拒否)
- ORA-01555Snapshot too old: rollback segment number too small(スナップショットが古すぎる)
- ORA-01652Unable to extend temp segment by N in tablespace(表領域で一時セグメントを拡張できない)
- ORA-04031Unable to allocate N bytes of shared memory(共有メモリを割り当てられない)