LOCK(3)-DDL LOCK

 

 

DDL

  1. ddl操作一个对象期间自动获得,防止ddl期间其他会话操作该对象.
  2. ddl分类

 

a)Exclusive ddl lock:排他ddl,上面介绍过的. 防止其他ddl 锁以及TM锁的获得.--其他session只能查询了
最常见的了
.
alter session enable resumable;
alter table u1.t1  allocate extent(size 60m)
           USERNAME        SID        TYPE        RBS        SLOT        SEQ        LMODE        REQUEST

1        SYS                  159        TT        0        4        0        4        0

2        SYS                  159        TT        0        4        16        4        0

3        SYS                  159        TT        0        4        16        4        0

4        SYS                  159        TT        0        4        16        4        0

5        SYS                  159        TT        0        4        16        4        0

6        SYS                  159        TM        0        53133        0        6        0

7        SYS                  159        TX        2        16        504        6        0
67TMTX,而且都是6(exclusive).

大量insert操作的时候
           USERNAME        SID        TYPE        ID1        ID2        RBS        SLOT        SEQ        LMODE        REQUEST

1        SYS                       158        HW        7        29360161        0        7        29360161        6        0

2        SYS        158        TM        53221        0        0        53221        0        3        0

3        SYS        158        TX        524322        499        8        34        499        6        0

Drop column的时候 --->TMTX锁(TMID1中自然是object_Id =53222).
           USERNAME        SID        TYPE        ID1        
         ID2        RBS                SLOT        SEQ        LMODE         REQUEST

1        SYS                  158        TM        53222         0        0                53222        0        5               0

2        SYS                  158        TX        131082        505        2                  10        505        6               0

并不是所有的
DDL锁都是排他的,比如上面看到的例子中5

还有下面的例子:
Create index xxx on xxx(xxx) online;
这句只取得低级别的TM(mode 2),这样可以保证在创建的过程中对象不被破坏,而且还可以修改对象的内容(在线创建索引).
 

b,Share ddl :保护引用对象的结构不被修改,但允许引用对象修改内容(,对于这类操作过程中引用了的对象,对象内记录可以修改,但不能修改结构)
当创建程序包或者试图时,比如create view v1 as select * from emp,dept where emp.deptno=dept.deptno
在试图创建的过程中,empdept表结构上不能被修改,但其内容可以改.

 

c,Breakable parse lock:当会话parse一个sql语句的时候,一个parse lock会被获得,其会跟踪每个其引用的对象.因为解析过的语句会被cache,而如果该语句中的引用对象被修改过,谁来通知cache中的sql语句invalid(flush)?就是这个机制.
有一个试图来看这类锁. Dba_ddl_locks,默认无该试图,需要运行@$ORACLE_HOME/rdbms/admin/catblock.sql
从中可以查到所有的当前会话正在锁定的对象.
这个很容易试验,建立一个空procedure,然后到试图中查询出来.compile该对象.然后再查-已经没了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值