ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

TRUNCATE TABLE …等 の DDL で「ORA-54: リソース・ビジー…(ORA-00054: resource busy...)」が発生する際の小技(Oracle Database)

以下のように TRUNCATE TABLE …文 や ALTER TABLE …文 を実行すると、
ORA-54エラー(リソース・ビジー) が 発生することがあります。
#十中八九トランザクションが走ってるケースやね彡(゚)(゚)

SQL> TRUNCATE TABLE TBL_A;
TRUNCATE TABLE TBL_A
               *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired


SQL> ALTER TABLE TBL_A DROP (C2);
ALTER TABLE TBL_A DROP (C2)
            *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

そう云う場合は DDL_LOCK_TIMEOUTパラメータ を セッション単位で
変更して DDL を実行すると、パラメータの秒数分待機してくれるやで彡(゚)(゚)

ALTER SESSION SET DDL_LOCK_TIMEOUT = 1000000;

Session altered.

※待たされる。
TRUNCATE TABLE TBL_A;

トランザクションが完了すると、待機していたDDL文が実行されます。

※TRUNCATE文の続き
Table truncated.

マニュアルも見とくやで彡(^)(^)

Oracle Databaseリファレンス 12cリリース2 (12.2) E72905-02
DDL_LOCK_TIMEOUT
http://docs.oracle.com/cd/E82638_01/REFRN/DDL_LOCK_TIMEOUT.htm#GUID-72D43EF8-F7AF-4011-8D64-73ABC4FB2154