oracle dba_waiters中的lockid是什么,查杀oracle lock session and table
查殺oracle 死鎖的一些帖子摘錄[@more@]
查找死鎖進(jìn)程
column sid format 999;
column b format 9;
column object_name format a30;
select v$lock.sid,
decode(v$lock.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, all_objects
where sid > 6
and v$lock.id1 = all_objects.object_id;
這個(gè)SQL可用來(lái)生成殺死死鎖進(jìn)程的SQL
select 'alter system kill session '''||a.sid||','||b.serial#||''';'
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;
select 'alter system kill session '''||a.sid||','||b.serial#||''';'
from v$lock a,v$session b
where a.sid > 6 and a.sid = b.sid;
空閑之際,寫(xiě)了個(gè)sql語(yǔ)句,解決當(dāng)前工作中經(jīng)常遇到的鎖定和被鎖定表得信息,歡迎大家使用,指正。
如何快捷的顯示當(dāng)前鎖定和被鎖定表的用戶,sql等信息
如果是dba用戶那么可以使用
一、
阻塞和等待的用戶及sql語(yǔ)句
select 'blocker('||wb.holding_session||':'||sb.username||')-sql:'||qb.sql_text blockers,sb.machine,sb.terminal,
'waiter ('||wb.waiting_session||':'||sw.username||')-sql:'||qw.sql_text waiters ,sw.machine,sb.terminal
from dba_waiters wb,
v$session sb,
v$session sw,
v$sqlarea qb,
v$sqlarea qw
where wb.holding_session=sb.sid
and wb.waiting_session=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and wb.mode_held<>'None'
二、如果不是dba那么就不能使用dba_waiters表了,可以使用v$lock來(lái)替換
select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers,
'waiter ('||lw.sid||':'||sw.username||')-sql:'|| qw.sql_text waiters
from v$lock lb,
v$lock lw,
v$session sb,
v$session sw,
v$sql qb,
v$sql qw
where lb.sid=sb.sid
and lw.sid=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and lb.id1=lw.id1
and sw.lockwait is not null
and sb.lockwait is null
and lb.block=1
如果向更詳細(xì)的顯示username的信息可以加入
select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers,sb.machine,sb.terminal,sb.logon_time,
'waiter ('||lw.sid||':'||sw.username||')-sql:'|| qw.sql_text waiters ,sw.machine,sw.terminal,sw.logon_time
from v$lock lb,
v$lock lw,
v$session sb,
v$session sw,
v$sql qb,
v$sql qw
where lb.sid=sb.sid
and lw.sid=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and lb.id1=lw.id1
and sw.lockwait is not null
and sb.lockwait is null
and lb.block=1
三、--根據(jù)以上顯示的信息可以知道當(dāng)前產(chǎn)生鎖和等待的用戶信息
--那么就需要?dú)⒌舢?dāng)前產(chǎn)生阻塞的用戶,在執(zhí)行殺掉用戶進(jìn)程前請(qǐng)咨詢dba和該業(yè)務(wù)的同事,是否產(chǎn)生其他的不當(dāng)影響
select sid,serial# from v$session sid in (...) --查詢產(chǎn)生阻塞用戶的 sid,serial#,然后
alter system kill session(sid,serial#); --殺掉產(chǎn)生阻塞的用戶
總結(jié)
以上是生活随笔為你收集整理的oracle dba_waiters中的lockid是什么,查杀oracle lock session and table的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中int和eval的区别_p
- 下一篇: 《人人都是产品经理》读后感