ORACLE锁

ORACLE LOCK

 

锁(lock),用于管理对共享资源的并发访问。

Oracle主要有3种锁类型:

l         DML Lock:用于保护数据上的锁

l         DDL Lock:用于保护结构对象的定义

l         内部锁和闩:用于保护oracle内部数据结构

 

介绍Oracle锁机制前,先介绍共享锁和排他锁:

共享锁:如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

 

排他锁:如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

 

DML Lock(DML)

1.  TX锁(事务锁)

事务中开始第一个修改时会得到TX锁,而且一直会持续的拥有这个TX锁,直到事务发生COMMIT或者ROLLBACK

获得锁信息:

SELECT username,

v$lock.sid,

trunc(id1/power(2,16)) rbs,

bitand(id1,to_number('ffff','xxxx'))+0 slot,

id2 seq,

lmode,

request

FROM v$lock, v$session

WHERE v$lock.type = 'TX'

AND v$lock.sid = v$session.sid

AND v$session.username = 'SCOTT';

/

USERNAME     SID        RBS       SLOT        SEQ     lmode    REQUEST

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

SCOTT         52          9          1          433787         6          0

 

SELECT XIDUSN, XIDSLOT, XIDSQN

FROM v$transaction;

/

    XIDUSN    XIDSLOT     XIDSQN

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

         9          1     433787

其中,LMODE为锁类型,REQUEST值为0指无其他事务请求,用有此锁,RBSSLOTSEQ值与V$TRANSACTION信息匹配,组成事务ID

LMODE

0,'None(0)',

1,'Null(1)',

2,'Row Share(2)',

3,'Row Exclu(3)',

4,'Share(4)',

5,'Share Row Ex(5)',

6,'Exclusive(6)')

 

REQUEST

0,'None(0)',

1,'Null(1)',

2,'Row Share(2)',

3,'Row Exclu(3)',

4,'Share(4)',

5,'Share Row Ex(5)',

6,'Exclusive(6)')

 

 

2.  TM锁(DML enqueue

TM Lock为了保证对象在修改内容时,对象的结构不会发生改变。

例:

sys@ORCL> drop table scott.dept;

drop table scott.dept

                 *

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified

 

DDL Lock

DDL操作中会自动为对象加DDL锁(DDL Lock),从而保护这些对象不会被其他会话所修改。

 

内部锁(闩)

闩(latch)是轻量级的串行化设备,用于协调对共享数据结构、对象和文件的多用户访问。属于Oracle的内部锁。

 

你可能感兴趣的:(数据结构,oracle)