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


©著作权归作者所有:来自51CTO博客作者小麦苗best的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【MySql】sql_slave_skip_counter 参数的用法解析
  2. Docker容器时间跟主机时间保持同步的操作记录
  3. Oracle OCP 071【中文】考试题库-第18题
  4. confluence与jira账号对接、查看到期时间及问题总结
  5. python utc时间转北京时间
  6. 从手机定位谈谈科技
  7. 程序员业余时间写的代码也算公司的?Nginx之父被捕引发争议
  8. 图文带你理解 Apache Iceberg 时间旅行是如何实现的?
  9. 这38款超级炫酷的时间轴特效代码案例,总有一款是你需要的

随机推荐

  1. 移植soundtouch到android 通过JNI来调用
  2. Android AsyncTask 异步任务操作
  3. Android Bundle类
  4. Android视频播放: VideoView播放视频(三)
  5. Android权限大全
  6. Android studio maven pom.xml
  7. android 获取mac地址
  8. Android单元测试时如何使用log查看输出结
  9. Android(安卓)开发(六)C2DM 云端推送
  10. Android 字体颜色渐变效果 Span实现