LOCK(3)-DDL LOCK

    技术2022-05-11  1

     

     

    DDL

    ddl操作一个对象期间自动获得,防止ddl期间其他会话操作该对象.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        067TMTX,而且都是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        0Drop 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)