您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

解决DML事务锁定的冲突(一)

 

如果多个用户同时更新相同表的相同记录,或者多个用户需要在表上添加不兼容的锁定(比如某个用户在更新一个表,而另一个用户要修改该表的结构), 则这时就发生了锁定冲突的现象。

 

1、锁定相关视图

我们要管理并解决锁定冲突的话,需要借助以下这几个数据字典:

 

(1)v$transaction

记录了当前每个活动事务(也就是还没有提交或者回滚的事务)的信息。其中比较重要的字段包括XIDUSN表示当前事务使用的回滚段的编号、XIDSLOT说明该 事务在回滚段头部的事务表中对应的记录编号(也可以叫做槽号)、XIDSQN说明序列号、STATUS说明该事务是否为活动的。

 

(2)v$lock

记录了当前session已经获得的锁定以及正在请求的锁定的信息。其中比较重要的字段包括SID说明session的ID号、TYPE说明锁定锁定级别,主要关注TX和TM 、LMODE说明已经获得的锁定的模式,以数字编码表示、REQUEST说明正在请求的锁定的模式,以数字编码表示。BLOCK说明是否阻止了其他用户获得锁定,大 于0说明是,等于0说明否。

锁定模式与编码数值对照关系如下表所示:

 

(3)v$enqueue_lock

该视图中包含的字段以及字段含义与v$lock中的字段一模一样。只不过该视图中只显示那些申请锁定,但是无法获得锁定的session信息。其中的记录按照申 请锁定的时间先后顺序排列,先申请锁定的session排在前面,排在前面的session将会先获得锁定。

 

(4)v$locked_object

记录了当前已经被锁定的对象的信息。其中比较重要的字段包括XIDUSN表示当前事务使用的回滚段的编号、XIDSLOT说明该事务在回滚段头部的事务表中对应 的记录编号、XIDSQN说明序列号、OBJECT_ID说明当前被锁定的对象的ID号,可以根据该ID号到dba_objects里查找被锁定的对象名称、LOCKED_MODE说明锁定 模式的数字编码。

 

(5)v$session

记录了当前session的相关信息。其中比较重要的字段包括SID表示session的编号、SERIAL#表示序列号。SID和SERIAL#可以认为是v$session的主键,它们共 同唯一标识一个session。

 

(文章来自网络,如有侵权请来信告知,本站将在第一时间删除。)

相关文章 [上一篇] DML事务锁定的机制
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号