株式会社コーソル

KNOWLEDGE

コーソルの技術情報

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

KNOWLEDGE検索人気のキーワード

Oracle DB Tips

WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!

01.アラートログに出力される "WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" はどのような意味があるか?

行キャッシュ・ロック(row cache lock) の獲得に 50 分間連続して失敗した場合にアラートログに出力されるメッセージです。行キャッシュ・ロックは、共有プールにキャッシュされたデータ・ディクショナリ情報にアクセスする際に獲得するロックです。何らかの処理が行キャッシュ・ロックを保持し続けているため、他の処理が 行キャッシュ・ロック の獲得に失敗した状況にあることが疑われます。

02.アラートログへの出力例

Mon Feb 10 17:10:37 2012
>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=9

pidが行キャッシュ・ロックを獲得しようとしているプロセスのpidを示します。

03."WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" の一般的な発生要因と対処

行キャッシュ・ロックは共有プールにキャッシュされたデータ・ディクショナリ情報に関するロック機構です。
このメッセージが出力された場合、該当の行キャッシュ・ロックが他のプロセスによって長時間獲得されている可能性が高いです。
相互のプロセス間でデッドロックに陥り獲得できなかった場合もこのエラーが出力されます。ただし、行キャッシュ・ロックについては、エンキュー(ORA-00060)、ライブラリキャッシュロック(ORA-04020)のようにOracle Databaseが自動的にデッドロックを検知してロックを解除する仕組みがありません。このため、行キャッシュ・ロックを獲得しているセッションがロックを解放しない場合、行キャッシュ・ロックを獲得しているセッションを ALTER SYSTEM KILL SESSION コマンドで強制終了する必要があります。
この現象は、一般にOracle Database のBugである可能性が高いため、現象発生時に出力されたアラートログとトレースファイルをOracle Databaseのサポート窓口に提供し、調査を依頼することをお勧めします。

04."WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" に関するFAQ

このメッセージが出力された後、ロック獲得待ちの状況は解消されるのでしょうか?

“WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!” が出力されても 行キャッシュ・ロックは解放されません。行キャッシュ・ロック が獲得できる状態になるまで該当のセッションは待機し続けます。

05.キーワード

行キャッシュ・ロック row cache lock WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! ORA-60 ORA-00060 ORA-4020 ORA-04020