在对数据库对象执行任何操作之前,DDL命令需要排他锁。 如果锁不可用,则该命令将返回“ ORA-00054:资源繁忙”错误。
为了控制DDL命令的超时等待在执行DDL命令的对象上获取LOCK,请使用参数DDL_LOCK_TIMEOUT,该参数可以使用ALTER SESSION和ALTER SYSTEM命令进行设置。
例如:
-- Session 1
SQL> CREATE TABLE test1(id NUMBER);
SQL> INSERT INTO test1 VALUES(1);
--Dont Commit in Session 1
-- Open Session 2
--Set the DDL_LOCK_TIMEOUT to 45 Secs
SQL> ALTER SESSION SET DDL_LOCK_TIMEOUT = 45;
SQL> ALTER TABLE test1 ADD(desc VARCHAR2(100));
-- The Session 2 waits for 45 Seconds and then trhows the below error:
ALTER TABLE test1 ADD (
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
如果COMMIT是在会话1中执行的,且时间为45秒,则ALTER TABLE COMMAND成功完成
From: https://bytes.com/topic/oracle/insights/879075-ddl_lock_timeout-oracle-11g