運用時に発生するエラー

ORA-00054: リソース・ビジー、NOWAITが指定されていました。

テーブルなどの操作においてロックが必要な処理を実行したが、ロックを取得できなかったことで ORA-00054: 〜エラーが発生する。

原因

DDL は(たぶん) NOWAIT 指定するもしないもなく、常に NOWAIT(※) である。 DML は基本的に WAIT で動作する。SELECT FOR UPDATE においてのみ NOWAIT を記述することができる。

(※) NOWAIT とはロックが競合した場合に即エラーで制御を戻し、WAIT とは競合した場合にはロックが解除されるのを待機する。Oracle 11g からは DDL_LOCK_TIMEOUT 初期化パラメータ (WAIT) によって DDL において待機時間を設定できる。Oracle 11g

対応

DDL を実行する場合には、そのスキーマが DML などによってフェッチや操作されていないときに実行するように注意する。 特に TRUNCATE TABLE と SELECT はロックの競合が発生しないので思わぬ結果になる場合も考えられる。
参考 ⇒ TRUNCATE と DELETE の違い

DDL を実行する場合には原則、メンテナンス時間に実行する。TRUNCATE は運用上 SELECT されない状態を確保する。



関連事項

一覧ページへ戻る

OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。

カスタム検索

ORA-00054の関連トピックス

ITエンジニア キャリアアップ・転職・求人情報

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター