Oracle 找锁住的表并解锁

Sql代码 复制代码 收藏代码
  1. select a.sid,b.serial#,b.PROGRAM,b.USERNAME,b.MACHINE,b.OSUSER,b.LOGON_TIME,b.LAST_CALL_ET,b.process,decode(a.type, 
  2.         'MR', 'Media Recovery'
  3.         'RT','Redo Thread'
  4.         'UN','User Name'
  5.         'TX', 'Transaction'
  6.         'TM', 'DML'
  7.         'UL', 'PL/SQL User Lock'
  8.         'DX', 'Distributed Xaction'
  9.         'CF', 'Control File'
  10.         'IS', 'Instance State'
  11.         'FS', 'File Set'
  12.         'IR', 'Instance Recovery'
  13.         'ST', 'Disk Space Transaction'
  14.         'TS', 'Temp Segment'
  15.         'IV', 'Library Cache Invalida-tion'
  16.         'LS', 'Log Start or Switch'
  17.         'RW', 'Row Wait'
  18.         'SQ', 'Sequence Number'
  19.         'TE', 'Extend Table'
  20.         'TT', 'Temp Table'
  21.         'Unknown') LockType, 
  22.         rtrim(object_type) || ':' || rtrim(owner) || '.' || object_name object_name, 
  23.         decode(lmode,   0, 'None'
  24.                 1, 'Null'
  25.                 2, 'Row-S'
  26.                 3, 'Row-X'
  27.                 4, 'Share'
  28.                 5, 'S/Row-X'
  29.                 6, 'Exclusive',        'Unknown') LockMode, 
  30. decode(request, 0, 'None'
  31.                 1, 'Null'
  32.                 2, 'Row-S'
  33.                 3, 'Row-X'
  34.                 4, 'Share'
  35.                 5, 'S/Row-X'
  36.                 6, 'Exclusive', 'Unknown') RequestMode, 
  37.                 ctime, block b 
  38. from v$lock a,all_objects c,v$session b 
  39. where a.sid > 6 and a.id1 = c.object_id and a.sid = b.sid; 
select a.sid,b.serial#,b.PROGRAM,b.USERNAME,b.MACHINE,b.OSUSER,b.LOGON_TIME,b.LAST_CALL_ET,b.process,decode(a.type,
        'MR', 'Media Recovery',
        'RT','Redo Thread',
        'UN','User Name',
        'TX', 'Transaction',
        'TM', 'DML',
        'UL', 'PL/SQL User Lock',
        'DX', 'Distributed Xaction',
        'CF', 'Control File',
        'IS', 'Instance State',
        'FS', 'File Set',
        'IR', 'Instance Recovery',
        'ST', 'Disk Space Transaction',
        'TS', 'Temp Segment',
        'IV', 'Library Cache Invalida-tion',
        'LS', 'Log Start or Switch',
        'RW', 'Row Wait',
        'SQ', 'Sequence Number',
        'TE', 'Extend Table',
        'TT', 'Temp Table',
        'Unknown') LockType,
        rtrim(object_type) || ':' || rtrim(owner) || '.' || object_name object_name,
        decode(lmode,   0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive',        'Unknown') LockMode,
decode(request, 0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive', 'Unknown') RequestMode,
                ctime, block b
from v$lock a,all_objects c,v$session b
where a.sid > 6 and a.id1 = c.object_id and a.sid = b.sid;

生成Kill语句

Sql代码 复制代码 收藏代码
  1. select 'alter system kill session '''||a.sid||','||b.serial#||''';' 
  2. from v$lock a,all_objects c,v$session b 
  3. where a.sid > 6 and a.id1 = c.object_id and a.sid = b.sid; 
Oracle数据库中,查询锁情况和进行解锁操作可按以下方法进行: ### 查询锁情况 - 查看哪些对象被锁住以及相关的会话信息: ```sql SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid; ``` - 查询锁的用户、会话ID、序列号和登录时间: ```sql select t2.username, t2.sid, serial#, t2.logon_time from v$locked_object t1, v$session t2 where t1.SESSION_ID = t2.SID; ``` - 另一种查询锁信息按登录时间排序的语句: ```sql 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; ``` - 更详细的查询锁信息: ```sql select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode , machine, program from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid; ``` - 还可以通过以下语句查询锁: ```sql SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,b.os_user_name FROM v$process p,v$session a, v$locked_object b, dba_objects c WHERE b.object_id = c.object_id AND b.session_id = a.sid AND a.paddr = p.addr; ``` ### 解锁操作 从查询结果中获取需要解锁的会话的SID和SERIAL#值,然后使用以下命令来解锁: ```sql ALTER SYSTEM KILL SESSION 'sid,serial#'; ``` 例如: ```sql ALTER SYSTEM KILL SESSION '23, 1893'; ``` ### 注意事项 在执行解锁操作时,确保没有其他事务依赖于被解锁的对象,以避免数据一致的问题。解锁操作可能会导致正在进行的事务丢失,因此在执行前请确保事务已完成[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值