ITPub博客

首页 > 数据库 > Oracle > DDL_LOCK_TIMEOUT的作用

DDL_LOCK_TIMEOUT的作用

原创 Oracle 作者:Rman2017 时间:2017-05-19 10:08:53 0 删除 编辑

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语句提交之后马上报错。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31448824/viewspace-2139334/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-03-30

  • 博文量
    352
  • 访问量
    132800