ORACLE数据库TM(表级)锁小结

SQL语句                       表锁模式

select * from A                     无

insert into A                       RX

update A                            RX

delete from A                       RX

select * from A for update          RS

lock table A in row share mode      RS

lock table A in row share exclusive mode RX

lock table A in share mode           S

lock table A in share row exclusive mode SRX

lock table A in exclusive mode        X

从以上可以看到,通常的DML操作(select ..for update,insert,update,delete),表级获得的只是意向锁(RS或RX).其真正封锁粒度还是在行级.另外,oracle数据库中单纯读数据不加锁,通过回滚段来保证用户不读"脏"数据.由于oracle在行级只提供X锁,所以与RS锁(通过select..for update语句获得)对应的行级锁也是X锁.当oracle执行select..for update,insert,update,delete等DML语句时,系统自动在所要操作的表上申请表级RS锁(select..for update)或RX锁(insert,update和delete),当表级锁获得后,系统再自动申请TX锁,并将实际锁定的数据行的锁标志位置位(指向该TX锁,更确切地说是指向该事务在该块中占用的ITL SLOT)

TX锁即事务锁,对应多个该事务锁定的数据行,若事务T对数据D加X锁,则其他任何事务都不能再对D加任何类型的锁,若加S锁,则其他事务只能对D加S锁,不能加X锁.

Oracle锁相关的视图

1)v$lock视图:此视图列出当前系统持有的或正在申请的所有锁的情况,字段说明如下:

sid:会话(session)标识

type:区分该锁保护对象的类型(只关心TX和TM)

id1:锁标识1

id2:锁标识2

lmode:锁模式:0(none),1(null),2(row share),3(row exclusive),4(share),5(share row exclusive)和6(exclusive)

request:申请的锁模式:具体值同上

ctime:已持有或等待锁的时间

block:是否阻塞其他锁申请

2)$locked_object视图:此视图列出当前系统中哪些对象正被锁定,字段说明如下:

xidusn:回滚段号

xidslot:槽号

xidsqn:序列号

object_id:被封锁对象标识

session_Id:持有锁的会话标识

oracle_username:持有该锁的用户的oracle用户名

os_user_name:持有该锁的用户的操作系统用户名

process:操作系统进程号

locked_mode:锁模式

ORACLE锁监控脚本:

1)显示哪些对象被哪些会话锁住

select rpad(oracle_username,10) o_name,session_id sid,decode(locked_mode,0,'None',1,'Null',2,'Rowshare',3,'Row Exclusive',4,'Share',5,'share row exclusive',6,'Exclusive') LOCK_TYPE,object_name,xidusn,xidslot,xidsqn from v$locked_object a,all_objects b where a.object_id=b.object_id;

2)观察获得与申请锁的顺序关系

select type||'_'||id1||'_'||id2 "resource",sid,lmode,request,ctime,block from v$lock where type in('TX','TM') order by "resource",ctime desc;

外键未加索引引发的锁阻塞

部分回滚对锁的影响

  如果一个事务进行部分回滚(rollback to savapoint),由于会撤销部分修改,oracle会根据情况释放或降低某些TM表级锁,而TX锁一般不会释放,而被TX锁阻塞的事务也不会继续执行(即使那些引发阻塞的行的修改已经被回滚) 

锁的排队机制

    一旦某一事务阻塞于某一资源,其后向资源新申请锁的事务都将被阻塞,而不论新申请的封锁类型是否相容于已获得的封锁类型

ITL slot不足引发的锁阻塞:

Bitmap索引引发的锁阻塞

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值