Oracle死锁的检测查询及处理-- 死锁查询语句
SELECT bs.urname "Blocking Ur", bs.urname "DB Ur",
ws.urname "Waiting Ur", bs.SID "SID", ws.SID "WSID",
bs.rial# "Serial#", bs.sql_address "address",
小米盒子怎么投屏bs.sql_hash_value "Sql hash", bs.program "Blocking App",
ws.program "Waiting App", bs.machine "Blocking Machine",
ws.machine "Waiting Machine", bs.osur "Blocking OS Ur",
ws.osur "Waiting OS Ur", bs.rial# "Serial#",
ws.rial# "WSerial#",
DECODE (wk.TYPE,
'MR', 'Media Recovery',朋友圈发1分钟以上视频
'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 Invalidation',
'LS', 'LOG START OR Switch',
'RW', 'ROW Wait',
'SQ', 'Sequence Number',
风景如画
'TE', 'Extend TABLE',
'TT', 'Temp TABLE',
wk.TYPE
) lock_type,
DECODE (hk.lmode,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
海藻的功效6, 'EXCLUSIVE',
古诗绘画作品
TO_CHAR (hk.lmode)
) mode_held,
DECODE (wk.request,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
如何加强党性修养6, 'EXCLUSIVE',
TO_CHAR (wk.request)
) mode_requested,
TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
DECODE
(hk.BLOCK,
0, 'NOT Blocking', /**//* Not blocking any other process */
1, 'Blocking', /**//* This lock blocks other process */
2, 'Global', /**//* This lock is global, so we can't tell */
TO_CHAR (hk.BLOCK)
) blocking_others
FROM v$lock hk, v$ssion bs, v$lock wk, v$ssion ws
WHERE hk.BLOCK = 1
AND hk.lmode != 0
AND hk.lmode != 1
quest != 0
AND wk.TYPE(+) = hk.TYPE
AND wk.id1(+) = hk.id1
AND wk.id2(+) = hk.id2
AND hk.SID = bs.SID(+)
AND wk.SID = ws.SID(+)
AND (bs.urname IS NOT NULL)
AND (bs.urname <> 'SYSTEM')
AND (bs.urname <> 'SYS')
ORDER BY 1;
查询发⽣死锁的lect语句
lect sql_text from v$sql where hash_value in (
lect sql_hash_value from v$ssion where sid in (lect ssion_id from v$locked_object)
)
关于数据库死锁的检查⽅法
⼀、数据库死锁的现象
程序在执⾏的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
⼆、死锁的原理
当对于数据库某个表的某⼀列做更新或删除等操作,执⾏完毕后该条语句不提
交,另⼀条对于这⼀列数据做更新操作的语句在执⾏的时候就会处于等待状态,
此时的现象是这条语句⼀直在执⾏,但⼀直没有执⾏成功,也没有报错。
三、死锁的定位⽅法
通过检查数据库表,能够检查出是哪⼀条语句被死锁,产⽣死锁的机器是哪⼀台。
1)⽤dba⽤户执⾏以下语句
lect urname,lockwait,status,machine,program from v$ssion where sid
in (lect ssion_id from v$locked_object)
如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪⼀台。字段说明:
Urname:死锁语句所⽤的数据库⽤户;
Lockwait:死锁的状态,如果有内容表⽰被死锁。
Status:状态,active表⽰被死锁
Machine:死锁语句所在的机器。
Program:产⽣死锁的语句主要来⾃哪个应⽤程序。
2)⽤dba⽤户执⾏以下语句,可以查看到被死锁的语句
lect sql_text from v$sql where hash_value in
(lect sql_hash_value from v$ssion where sid in
(lect ssion_id from v$locked_object))
四、死锁的解决⽅法
⼀般情况下,只要将产⽣死锁的语句提交就可以了,但是在实际的执⾏过程中。⽤户可能不知道产⽣死锁的语句是哪⼀句。可以将程序关闭并重新启动就可以了。
经常在Oracle的使⽤过程中碰到这个问题,所以也总结了⼀点解决⽅法。
1)查找死锁的进程:
sqlplus "/as sysdba" (sys/change_on_install)
SELECT s.urname,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S
WHERE l.SESSION_ID=S.SID;
校园安全问题
2)kill掉这个死锁的进程:
alter system kill ssion ‘sid,rial#’; (其中sid=l.ssion_id)
3)如果还不能解决:
lect pro.spid from v$ssion s, v$process pro where s.sid=XX and s.paddr=pro.addr;
其中sid⽤死锁的sid替换:
exit
ps -ef|grep spid
其中spid是这个进程的进程号,kill掉这个Oracle进程。