DBAtlas · データベース運用アトラス

ORA-04021: timeout occurred while waiting to lock object(オブジェクトのロック待機中にタイムアウト発生)

Oracle

意味

オブジェクト (パッケージ、プロシージャ、型など) のライブラリキャッシュロック/ピンの取得待機中にタイムアウトが発生した。通常、別のセッションが実行中またはロック中の PL/SQL オブジェクトをコンパイルまたは変更しようとした場合に発生する。

原因

変更/コンパイル対象のオブジェクトが別のセッションで実行中、または別の DDL によってロックされているため、排他的なライブラリキャッシュロックを取得できない。長時間実行のプロシージャ呼出しやハングしたセッションがロックを保持している可能性がある。

対処方法

オブジェクトをロックしているセッションを特定する: SELECT * FROM dba_kgllock WHERE kgllkhdl IN (SELECT p1raw FROM v$session WHERE event LIKE 'library cache%'); または v$access と v$session でオブジェクトを使用しているセッションを特定する。ワークロードの少ないメンテナンス時間帯に DDL/コンパイルを再試行する。必要に応じてセッションを安全に終了する。アプリケーションを短時間停止すると、ロックを取得しやすくなる。

DBAtlas で開く →

同じデータベースの他の項目