标签:locked name object 死锁 session sid ORACLE id
1、查看数据库锁,诊断锁的来源及类型:
select object_id,session_id,locked_mode from v$locked_object
v$locked_object包含的是当前DB中被锁住的OBJECT,session_id 可以关联V$SESSION,object_id 可以关联 dba_objects。
locked_mode:
0:none
1:null 空
2:row-s 行共享(rs):共享表锁,sub share
3:row-x 行独占(rx):用于行的修改,sub exclusive
4:share 共享锁(s):阻止其他dml操作,share
5:s/row-x 共享行独占(srx):阻止其他事务操作,share/sub exclusive
6:exclusive 独占(x):独立访问使用,exclusive
select b.owner,b.object_name,b.object_type,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id=l.object_id
都字面意思,owner 拥有者、object_name 项目名称、 object_type 项目类型。
select lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,o.owner,o.object_name,o.object_type,s.sid,s.serial# from v$locked_object l,
dba_objects o,
v$session s where l.object_id=o.object_id and l.session_id=s.sid order by o.object_id,xidusn desc;
查询谁锁的表及等待列表,第一行锁、其余为等待列表。
2、找出数据库的sid 和 serial#
据说v$locked_object 行级锁以上才有记录,v$lock记录的是所有的锁,包括系统锁,利用v$lock一定要加上object_name,不然查出来一堆。
(1)利用 v$locked_object 查询锁
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,
v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
(2)利用 v$lock 查询锁(注意把object_name修改一下,如果是行、表锁,就是表名)
select o.object_name,s.sid, s.serial# from v$lock l,
dba_objects o,
v$session s where l.id1 = o.object_id and l.sid = s.sid and o.object_name='object_name';
3、杀死该session
alter system kill session 'sid,serial#'
用步骤2中查出来的记录,对应进该语句删除。如果删除的时候提示 "ORA-00027:cannot kill current session",可能是自己窗口有数据没有提交,检查一下窗口列表,或者断开数据库连接,重新尝试。
来自 https://www.cnblogs.com/huchaoheng/p/hengc.html 修改
标签:locked,name,object,死锁,session,sid,ORACLE,id 来源: https://www.cnblogs.com/tianzhizy/p/16267251.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。