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/コンパイルを再試行する。必要に応じてセッションを安全に終了する。アプリケーションを短時間停止すると、ロックを取得しやすくなる。
同じデータベースの他の項目
- ORA-29913error in executing ODCIEXTTABLEOPEN callout(ODCIEXTTABLEOPEN コールアウトの実行エラー)
- ORA-19804cannot reclaim N bytes disk space from M bytes limit(M バイトの上限から N バイトのディスク領域を再利用できない)
- ORA-00494enqueue held for too long by 'inst N, osid M'('inst N, osid M' がエンキューを長時間保持)
- ORA-04061existing state of package/procedure has been invalidated(パッケージ/プロシージャの既存の状態が無効化された)
- ORA-01466unable to read data - table definition has changed(データを読み取れない - 表定義が変更された)
- ORA-08176consistent read failure; rollback data not available(読み取り一貫性の失敗。ロールバックデータが利用できない)
- ORA-00020maximum number of processes (N) exceeded(最大プロセス数 (N) を超えた)