设为首页 收藏本站
查看: 822|回复: 0

[经验分享] ORACLE数据库TM(表级)锁小结

[复制链接]

尚未签到

发表于 2016-8-3 22:23:24 | 显示全部楼层 |阅读模式
  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索引引发的锁阻塞

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252455-1-1.html 上篇帖子: 详解Oracle用户解锁命令的两则实现方法 下篇帖子: 使用Oracle Hint提示来更改执行计划
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表