以下のように表示されます。
(日本語)
ORA-00054: リソース・ビジー。NOWAITが指定されているか、タイムアウトしました
(英語)
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
発生パターン
このエラーは以下のような場合に発生します。
- 別セッションでFOR UPDATEを指定して検索中(ロック中)のテーブルに対して、
FOR UPDATE or FOR UPDATE NOWAIT を指定して検索(ロックをかけて検索)をした
- エラー例
- SQL> select * from m_test for update nowait; select * from m_test for update nowait * 行1でエラーが発生しました。: ORA-00054: リソース・ビジー。NOWAITが指定されているか、タイムアウトしました
m_testテーブルがロックされている状態で、FOR UPDATE NOWAITで検索しようとした例です。
対処法
- 他セッションのロック解除を待つ。
- 他セッションのロックを強制的に解除する
ロックの強制解除方法
ロックを強制的に解除するには以下のようにします。
1.ロックしているセッションのSIDとSERIAL# を取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SELECT SID ,SERIAL# FROM V$SESSION WHERE SID IN( SELECT SID FROM V$LOCK WHERE TYPE IN('TM', 'TX') ) |
2.取得したSIDとSERIAL# を以下SQLで実行する
- ロックを強制解除するSQL
- ALTER SYSTEM KILL SESSION '<SID>, <SERIAL#>';
これで、ロックを強制解除できます。
[…] ▼ORACLE逆引きノート様https://oracle.programmer-reference.com/ora-00054/ ▼津島博士のパフォーマンス講座 第18回 ロックについて https://www.oracle.com/technetwork/jp/database/articles/tsushima/tsm18-1610822-ja.html […]