用户锁,数据库的锁有的时候是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。 可以通过alter system kill session ‘sid,serial’来杀掉会话 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) LOCK_LEVEL, o.owner,o.object_name,o.object_type, s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser FROM v$session s,v$lock l,dba_objects o WHERE l.sid = s.sid AND l.id1 = o.object_id(+) AND s.username is NOT NULL ERP----------------------------------ERP SELECT lower(SUBSTR(all_objects.owner||'.'||object_name,1,16)) , SUBSTR(os_user_name,1,10) , v$locked_object.process , SUBSTR(terminal,1,7) , v$session.sid,v$session.serial# , v$session.machine FROM v$locked_object,all_objects,v$session WHERE v$locked_object.object_id=all_objects.object_id AND v$locked_object.SESSION_ID=v$session.SID ERP----------------------------------ERP 锁与等待,如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待 以下的语句可以查询到谁锁了表,而谁在等待。 SELECT /*+ rule */ 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 以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN |
|
最新喜欢:HPSXAQ |
沙发#
发布于:2018-07-18 21:53
支持分享
|
|
板凳#
发布于:2019-01-26 08:19
支持分享
|
|
地板#
发布于:2019-09-09 18:54
学习了,感谢楼主分享!!!!!
|
|
4楼#
发布于:2020-04-15 10:06
谢分享,攒金币
|
|
5楼#
发布于:2022-04-22 15:02
谢分享,攒金币
|
|
6楼#
发布于:2022-05-28 08:33
感谢分享
|
|