ORA-02049: Timeout: distributed transaction waiting for lock(分散トランザクションのロック待機タイムアウト)
Oracle意味
分散トランザクションがリモートデータベース上のロックを待つ間に DISTRIBUTED_LOCK_TIMEOUT を超過した。トランザクションはタイムアウトした。
原因
データベースリンク経由で実行中のトランザクションがリモート側のロック中の行を待っている。リモートセッションの長いトランザクション、ネットワーク遅延、または両端で保持される競合ロック。
対処方法
リモートデータベース上のブロッキングロックとセッションを特定して解消する (v$lock、v$session)。分散トランザクションは短く保ち、必要なロックはできるだけ遅く取得する。必要ならワークロードに応じて DISTRIBUTED_LOCK_TIMEOUT を増やす (SPFILE、再起動が必要)。インダウト分散トランザクションは DBA_2PC_PENDING ビューを調べ、必要なら手動で解決する。
同じデータベースの他の項目
- ORA-28000The account is locked(アカウントがロックされている)
- ORA-01578Oracle data block corrupted (file #, block #)(Oracle データブロックの破損)
- ORA-01722Invalid number(数値が無効)
- enq: TX - row lock contention待機: 別トランザクションが保持する行レベルロックでセッションがブロックされている
- log file sync待機: コミット時に LGWR が redo をディスクにフラッシュするのをセッションが待っている
- db file sequential read待機: 単一ブロックの物理読み取り。通常はインデックスまたはテーブルの参照
- db file scattered read待機: マルチブロックの物理読み取り。通常は全表スキャンまたはインデックス高速全スキャン