oracle 关于锁和v$lock的分析
来源:互联网 发布:excel2010如何编程 编辑:程序博客网 时间:2024/06/01 10:31
转自:http://blog.itpub.net/26770925/viewspace-1293245/ mark
为了实现并发,oracle数据库使用了锁机制。要了解锁,首先要了解视图v$lock。
v$lock这个视图列出 Oracle 服务器当前拥有的锁以及未完成的锁请求。如果你觉着 session 处于等待事件队列当中,那你应该检查视图v$lock。
v$lock中的常用列有以下列:
sid:持有锁的会话SID,通常与v$session关联。
type:锁的类型,其中TM表示表锁或DML锁,TX表示行锁或事务锁,UL表示用户锁。
我们主要关注TX和TM两种型的锁,其它均为系统锁,会很快自动释放,不用关注。
当 Oracle执行 DML 语句时,系统自动在所要操作的表上申请 TM 类型的锁。当 TM锁获得后,系统再自动申请 TX 类型的锁,并 将实际锁定的数据行的锁标志位进行置位。
TM 锁包括了SS 、 SX、 S 、X 等多种模式,在数据库中用 0 -6 来表示。不同的 SQL 操作产生不同类型的 TM锁。
lmode:会话保持的锁的模式。
0=None;
1=Null ;
2=Row-S (SS,行级共享锁,其他对象只能查询这些数据行),sql操作有select for update、lock for update、lock row share;
3=Row-X (SX,行级排它锁,在提交前不允许做DML操作),sql操作有insert、update、delete、lock row share;
4=Share(共享锁),sql操作有create index、lock share;
5=S/Row-X (SSX,共享行级排它锁),sql操作有lock share row exclusive;
6=Exclusive(排它锁),alter table、drop table、drop index、truncate table、look exclusive等DDL
ID1,ID2: ID1,ID2的取值含义根据type的取值而有所不同,
对于TM 锁ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0;
对于TX 锁ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式: 0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER,ID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数。
实际上这两个字段构成了事务在回滚段中的位置。
当锁产生时,以下图为例说明v$lock:
1、图中存在两个session分别是133和135,session135的BLOCK=1意味着该session拥有一个锁,并阻塞了其他session的对该锁的请求。该锁的类型由TY定义,模式由LMODE字段定义;
2、session133的request=6说明该session正在等待一个lmode为6的锁,而该锁的拥有者正是session135。
3、对于TM锁,ID1Z值就是加锁的段对象,可以是表或者表分区,此时ID2一般为0;对于TX锁,这两个字段构成该事务在回滚段中的位置。
对于死锁的处理:
1.查找锁
select ls.osuser os_user_name,ls.username user_name,ls.type lock_type,o.object_name object,decode(ls.lmode,1,null,2,'Row Share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive',null) lock_mode,o.owner,ls.sid,ls.serial# serial_num,ls.id1,ls.id2,ls.paddr from sys.dba_objects o,(select s.osuser,s.username,l.type,s.paddr,l.lmode,s.sid,s.serial#,l.id1,l.id2 from v$session s,v$lock l where s.sid=l.sid) lswhere o.object_id=ls.id1 and o.owner<>'SYS' order by o.owner,o.object_name2.查找spid
select a.spid,a.username,b.program from v$process a,v$session b where a.addr=b.paddr and a.addr='000007FF2DC8E578';3.kill session
alter system kill session 'sid,serial#' immediate;
- ORACLE关于锁和V$LOCK的分析
- ORACLE关于锁和V$LOCK的分析
- oracle 关于锁和v$lock的分析
- 初探oracle高级队列锁V$LOCK
- oracle lock 08 - 关于锁的解决方案
- v$lock 和v$locked_object
- v$lock 和v$locked_object
- v$sqlarea和v$lock
- V$LOCK视图的介绍和使用
- 【转载】V$LOCK 和 V$LOCKED_OBJECT 的区别
- oracle--v$lock 字段详解
- 查看v$lock的时候tx锁的id1怎么转换为usn和slot
- V$LOCK (列出Oracle 服务器当前拥有的锁以及未完成的锁或栓锁请求)
- oracle--v$lock type字段详解
- Oracle 动态性能视图之V$LOCK
- 查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock
- [Oracle] 锁(Lock)的探讨
- 关于Lock和Lock Contention的2张图
- Kibana 5.x DevTool常用命令
- mysql中怎么更新某个字段的值为1-200的随机数
- 7. 稀疏矩阵的乘法运算
- CBK商学院:大师并非遥不可及,再走三天而已
- POJ
- oracle 关于锁和v$lock的分析
- c# WPF 代码添加右键菜单
- Visual Studio 2017开发环境的安装
- eclipse调用caffe后py-faster-rcnn出现的问题几解决方法(cuda8.0+cudnn.V5 )
- Redhat7.2安装docker
- struts2笔记之拦截器的定义声明引用和其生命周期到Struts主要执行流程
- 垃圾收集机制
- java 整合Geohash 算法计算最近店面位置
- html img标签的使用