1. ホーム
  2. sql

[解決済み] ORA-02049およびOracleのロック問題全般のトラブルシューティング方法

2022-02-18 12:28:22

質問内容

いくつかの長時間稼働するトランザクションや集中的なトランザクションで、時々 ORA-02049 を受け取ります。これには一見パターンがないように見えますが、それは単純なINSERTで起こります。

私はOracleから何らかの情報を得る方法を全く知らないのですが、何か方法があるのでしょうか?ロックに関するログや、少なくとも現在のロックを確認する方法はないでしょうか?

解決方法は?

1つの方法として考えられるのは INIT.ORA のパラメータは distributed_lock_timeout を大きな値に設定します。そうすると、より長い時間、観測することができるようになります。 v$lock テーブルのロックがより長く続くためです。

この自動化を実現するためには、次のいずれかの方法があります。

  • の値をログに記録するSQLジョブを5~10秒ごとに実行する。 v$lock またはsandosが上で示したクエリをテーブルに入れ、それを分析して、どのセッションがロックを引き起こしているかを確認します。

  • を実行します。 STATSPACK または AWR 報告します。ロックされたセッションは、経過時間が長く表示されるため、特定することができます。

v$session はさらに3カラム blocking_instance, blocking_session, blocking_session_status を上記のクエリに追加することで、ロックされているものを把握することができます。