Oracle 11g 锁特性增加(参数ddl_lock_time)

Oracle Database 11g Release 1 (11.1.0.6.0) 中锁的增强如下

1.Serializing Locks

Oracle 11g中允许DDL语句等待DML.就是说当进行DML操作时,如果DML操作还没有完成,DML所持有的锁还没有释放,这时要进行DDL操作,比如删除某列,oracle 11g以前的版本没有parameter ddl_lock_time,会直接返回一个错误信息,告诉我们资源正忙.而在oracle 11g中则可以由DDL_LOCK_TIMEOUT这个参数来设定是否要等待,等待多久.

DDL_LOCK_TIMEOUT的值默认是0,意味着NOWAIT.

DDL_LOCK_TIMEOUT最大值可以设置到1000000()意为着DDL语句为了DML锁可以等待11.5.

详细测试如下

[oracle@racl ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 9月 4 08:47:13 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table t as select * from all_objects;

表已创建。

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

T TABLE

SQL> update t set object_name='test' ;

.......

再新开一个session,还以test用户连接,

SQL> show parameter ddl_lock_time;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

ddl_lock_timeout     integer     0

SQL> alter table t drop column object_name;

alter table t drop column object_name

*

1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

SQL> alter session set ddl_lock_timeout=5;

会话已更改。

SQL> set time on

20:59:19 SQL> set timing on

20:59:24 SQL> alter table t drop column object_name;

alter table t drop column object_name

*

1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间: 00: 00: 05.09

21:00:02 SQL> alter session set ddl_lock_timeout=0;

会话已更改。

已用时间: 00: 00: 00.00

21:00:12 SQL> alter table t drop column object_name;

alter table t drop column object_name

*

1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间: 00: 00: 00.04

2.Locking Tables

我们知道在oracle 10g当执行LOCK TABLE命令时,如果正好有其他用户对这个表持有了锁,这时或是无限期的等待或是直接不等待(NOWAIT clause ).而在oracle 11g LOCK TABLE命令有了一个新子句,这个新子句允许我们指定一个等待DML锁的时间,详细语法如下:

LOCK TABLE … IN lockmode MODE [NOWAIT | WAIT integer]

可以看出比oracle 10g多了一个WAIT integer clause,并且这个integer是没有限制的,也就是说可以无穷大也可以无穷小了.

详细测试如下

[oracle@racl ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 9月 4 08:47:13 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

22:34:42 SQL> create table tt as select * from t where rownum<10;

表已创建。

已用时间: 00: 00: 00.67

22:35:00 SQL> delete tt;

已删除9行。

已用时间: 00: 00: 00.03

新开一个session 2

22:34:37 SQL> show user;

USER "YXYUP"

22:36:02 SQL> lock table tt in exclusive mode nowait;

lock table tt in exclusive mode nowait

*

1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间: 00: 00: 00.01

22:36:04 SQL> lock table tt in exclusive mode wait 10 ;

lock table tt in exclusive mode wait 10

*

1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间: 00: 00: 10.03

22:36:32 SQL>

当然oracle 11g的锁还有其他方面的增强。

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

转载于:http://blog.itpub.net/628922/viewspace-613958/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值