ITPub博客

首页 > 数据库 > Oracle > 【LOCK】11g中允许DDL锁等待DML锁

【LOCK】11g中允许DDL锁等待DML锁

原创 Oracle 作者:OCMU联盟 时间:2010-05-17 23:31:01 0 删除 编辑
11g中使用DDL_LOCK_TIMEOUT参数可以允许DDL锁等待DML锁,在这个技术没有被引入的时候,DDL操作将不等待DML操作,直接给出“ORA-00054”报错信息。

1.创建测试表T
sec@11gR2> create table t (x number);

Table created.

2.插入一条数据,不进行提交
sec@11gR2> insert into t values ('6');

1 row created.

3.如何让DDL等待DML完成?
11g中引入了ddl_lock_timeout参数,使用这个参数可以完成这个光荣的使命。
ddl_lock_timeout参数默认值是“0”,表示DDL语句不等待DML语句,就是说DDL语句的执行优先级较高。
sec@11gR2> show parameter ddl_lock_timeout

NAME                                     TYPE                 VALUE
---------------------------------------- -------------------- ------------------------------------------------------------
ddl_lock_timeout                         integer              0

4.修改ddl_lock_timeout参数实现DDL语句等待DML语句
在新开启一个session,执行DDL的DROP表操作。
sec@11gR2> alter session set ddl_lock_timeout=10;

Session altered.

sec@11gR2> set timing on
sec@11gR2> set time on
09:37:15 sec@11gR2> drop table t purge;
drop table t purge
           *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired


Elapsed: 00:00:10.02
09:37:25 sec@11gR2>

可见,在设置ddl_lock_timeout为10(秒)后,DDL执行后将等待10秒钟,然后再抛出报错信息。
在ddl_lock_timeout为默认值“0”的时候,DDL提交之后将马上获得这个报错信息。

5.关于参数DDL_LOCK_TIMEOUT的参考
官方文档连接:

DDL_LOCK_TIMEOUT

Property Description
Parameter type Integer
Default value 0
Modifiable ALTER SESSION
Range of values 0 to 1,000,000 (in seconds)
Basic No

DDL_LOCK_TIMEOUT specifies a time limit for how long DDL statements will wait in a DML lock queue. The default value of zero indicates a status of NOWAIT. The maximum value of 1,000,000 seconds will result in the DDL statement waiting forever to acquire a DML lock.

If a lock is not acquired before the timeout period expires, then an error is returned.


ddl_lock_timeout参数允许设置的最大值是1,000,000秒(相当于11天的时间,已经足够长)。

6.小结
11g在锁管理上更进一步,让我们有了更大的控制空间,善用之。

Good luck.

secooler
10.05.17

-- The End --

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

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8407045