2015年11月6日金曜日

[Oracle]DDL_LOCK_TIMEOUTでDDLのロックタイムアウトの待機時間を設定する

Oracle11gからは、DMLでロックされているレコードがあるテーブルに対するDDL文のロックタイムアウトの待機時間が設定できる。

設定がない場合(デフォルトの動作は)、nowaitなのでロックされているレコードがあるテーブルに対するDDLは即タイムアウトする。
発生するエラーは、こんな感じ。
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

設定値の変更は、DDL_LOCK_TIMEOUTパラメータで行う。例えば、10秒を設定したい場合には、以下の様なalter sessionを実行する。
alter session set DDL_LOCK_TIMEOUT=10;