【11g新特性】DDL_LOCK_TIMEOUT的作用

lhrbest發表於2016-11-14
11g以前,DDL 語句是不會等待DML語句的,當DDL語句訪問的物件正在執行的DML語句,會立即報錯ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效。而在11g以後,DDL_LOCK_TIMEOUT引數可以修改這一狀態,當DDL_LOCK_TIMEOUT=0時,DDL 不等待DML,當DDL_LOCK_TIMEOUT 為N(秒)時,DDL等待DML N 秒!
版本:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
  
session 1
建立測試表
yang@rac1>create table yangtab as select * from all_objects where rownum <200;
表已建立。
對錶執行DML 
yang@rac1>update yangtab set object_name='yangql';
已更新199行。
yang@rac1>show parameter ddl_lock
NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------
ddl_lock_timeout                     integer     0
yang@rac1>update yangtab set wner='yangql';
已更新199行。
session 2 對錶執行ddl操作
yang@rac1>alter table yangtab drop column owner;
alter table yangtab drop column owner
            *
第 1 行出現錯誤:
ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效
已用時間:  00: 00: 00.01 --注意時間
設定 ddl_lock_timeout =10 秒,實現DDL語句等待DML語句
yang@rac1>alter session set ddl_lock_timeout=10;
會話已更改。
已用時間:  00: 00: 00.10
yang@rac1>alter table yangtab drop column owner;
alter table yangtab drop column owner
            *
第 1 行出現錯誤:
ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效
已用時間:  00: 00: 10.03 --等待時間接近10秒
yang@rac1>alter session set ddl_lock_timeout=8;改為8秒
會話已更改。
已用時間:  00: 00: 00.02
yang@rac1>alter table yangtab drop column owner;
alter table yangtab drop column owner
            *
第 1 行出現錯誤:
ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效
已用時間:  00: 00: 08.01 --等待8秒
yang@rac1>alter session set ddl_lock_timeout=0;
會話已更改。
已用時間:  00: 00: 00.00
yang@rac1>alter table yangtab drop column owner;
alter table yangtab drop column owner
            *
第 1 行出現錯誤:
ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效
已用時間:  00: 00: 00.00

綜上,設定ddl_lock_timeout為N(秒)後,DDL執行後將等待N秒鐘後才丟擲報錯資訊。在ddl_lock_timeout為預設值 0 時,DDL語句提交之後馬上報錯。
官方解釋如下:

DDL_LOCK_TIMEOUT

PropertyDescription
Parameter typeInteger
Default value0
ModifiableALTER SESSION
Range of values0 to 1,000,000 (in seconds)
BasicNo

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2128459/,如需轉載,請註明出處,否則將追究法律責任。

相關文章