从问题入手帮你解决Oracle杀死死锁进程

上一篇 / 下一篇  2009-01-12 23:00:30 / 个人分类:Oracle

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP

j#T'j%pk0Oracle杀死死锁进程

)J|5h.zN$P0

$^9tTv [.IbOq*V0  先查看哪些表被锁住了:

]"Lub7w9V|6c o0
51Testing软件测试网U2b[i)j7Ci

select b.owner,b.object_name,a.session_id,a.locked_mode51Testing软件测试网gN yn1mi;T*D
from v$locked_object a,dba_objects b51Testing软件测试网4rwJtOChoI
where b.object_id = a.object_id;
}}0SK"z/w0OWNER OBJECT_NAME SESSION_ID LOCKED_MODE
:i5RTXN%kL4\$M0------------------------------ -----------------
.T9p4m3t'X6Z0WSSB SBDA_PSHPFTDT  22 351Testing软件测试网xXiZr
WSSB_RTREPOS WB_RT_SERVICE_QUEUE_TAB  24 2
d aL(V&f)`*qm6pT E0WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB  29 2
6y~(])Q-q6lf1^c J i0WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB  39 251Testing软件测试网?)w` Cs
WSSB SBDA_PSDBDT 47 351Testing软件测试网&E%?9\y9S
WSSB_RTREPOS WB_RT_AUDIT_DETAIL 47 3
EkP }b{,S:j-?0select b.username,b.sid,b.serial#,logon_time51Testing软件测试网/BU `8Y|*O.?;j
from v$locked_object a,v$session b51Testing软件测试网4KP,J1Gw3]*]
where a.session_id = b.sid order by b.logon_time;51Testing软件测试网R BOBG"q Yi:pq
USERNAME  SID  SERIAL# LOGON_TIME
\6VJTQdQc0------------------------------ ---------- -------
AY;`.am+tb0WSSB_RTACCESS 39 1178 2006-5-22 1
(E6CH3Fl pp0WSSB_RTACCESS 29 5497 2006-5-22 1
51Testing软件测试网"C} PQnt

51Testing软件测试网?n@R+P'jh

2j5~F$j1cyMe9o4u0

4Bz'{!P zl+D)}"O-Z0  杀进程中的会话:51Testing软件测试网G)e.L#Npx

alter system kill session 'sid,serial#';
0}} | pa0e.g
g |+d w^0alter system kill session '29,5497';
51Testing软件测试网hq1ZI E;UEUq

51Testing软件测试网Z"]kz-mQT6@1Nt

51Testing软件测试网F"K9Gb Va

  如果有ora-00031错误,则在后面加immediate;alter system kill session '29,5497' immediate;

}2B RO:V0

a*P]UB6Q7g0  如何杀死oracle死锁进程

u@p8O{ L0

,LtYg @]#_Gy0  1.查哪个过程被锁:

K6B&X^N;og0

$u2p(i&P9h|~0  查V$DB_OBJECT_CACHE视图:51Testing软件测试网 SFBeNn!K

51Testing软件测试网,uV#[6XIC:rSj p

  SELECT * FROM V$DB_OBJECT_CACHE WHERE ōWNER='过程的所属用户' AND CLOCKS!='0';

YAq8ko0T1R0

Fix6odsG_-p,v'x0  2. 查是哪一个SID,通过SID可知道是哪个SESSION:

3P kA#hrh%z$^051Testing软件测试网F gv!^T6s'X

  查V$ACCESS视图:

N'PbgF]n0

cNx.tSfe0  SELECT * FROM V$ACCESS WHERE ōWNER='过程的所属用户' AND NAME='刚才查到的过程名';

M-n)`0pp F"E'n051Testing软件测试网+BoP1X/}J:s

  3. 查出SID和SERIAL#:

%M"kz ^*yj-ka0

7aoF C!DNf9{0  查V$SESSION视图:51Testing软件测试网"]1h ~$H$[7Rt

FS)`d2~#Nz0  SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';

U6auu\*K:I051Testing软件测试网r AB6oi

  查V$PROCESS视图:

4j;H1J0U~-y9d0

3V4i[oA0  SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';

,`Q-|1u1{5_Em7N;F,z,{051Testing软件测试网A"O4g6{h%iT

  4. 杀进程:

?Z4]"Haa7_051Testing软件测试网(wea]ks

  (1)先杀ORACLE进程:

J_Y:aPxC(P051Testing软件测试网~ZDd*b

  ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';51Testing软件测试网qI@K'Y3Cmy;L"c

3a.IK1t"]\7w6b&W0  (2)再杀操作系统进程:

;^uc"t?(}3}@0

~w t1Y3Du0  KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。

`(eZg&_t"aI051Testing软件测试网[D}Z)A U.a

  Oracle的死锁51Testing软件测试网.|n)b.cqCn jx!j

6A^O{BsB q.KL0  查询数据库死锁:51Testing软件测试网wlOjA@(S+D[

select t2.username||'  '||t2.sid||' 51Testing软件测试网/Cl7xc|
'||t2.serial#||'  '||t2.logon_time||' 
+E)Z:J$@o{F0'||t3.sql_text
1enf!x2A |0from v$locked_object t1,v$session t2,v$sqltext t3
?Lt8e*_}1ny0where t1.session_id=t2.sid51Testing软件测试网PJ ~6n e1Y s
and t2.sql_address=t3.address51Testing软件测试网 ] Ly9w Cu&}G@
order by t2.logon_time;
51Testing软件测试网J5i"fg/Z)k$Q-q

51Testing软件测试网s MC8`AhO

51Testing软件测试网.N~b3?0uJHR/a)c

  查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中:51Testing软件测试网Mt*]r9~!kR4SL

"e*S&Rd G-k^0  alter system kill session 'sid,serial#';

m%^O@mr4~051Testing软件测试网 n:|r o;S6O1n

  一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操作系统进程,在Unix中杀掉操作系统的进程。

cW4`,\M(foh0SELECT a.username,c.spid AS os_process_id,c.pid51Testing软件测试网f*V BJ/{W?7{F+|"y
AS oracle_process_id FROM v$session a,v$process c51Testing软件测试网;]y6ciSsRU
WHERE c.addr=a.paddr and a.sid= and a.serial#= ;
51Testing软件测试网4]6r4Z1Y8g X'CN

51Testing软件测试网]*Vg&E;}7V']#V

51Testing软件测试网-MtA`$[xL

  然后采用kill (unix) 或 orakill(windows )。51Testing软件测试网}$rP~C

W#j-j_AVF@hr!d0  在Unix中:

psn F#q@\"~0ps -ef|grep os_process_id51Testing软件测试网;wF]\ ]6R9w Ps
kill -9 os_process_id
[W,eAYwC0ps -ef|grep os_process_id
51Testing软件测试网PRlD,M

51Testing软件测试网} GM(G.WH

Oo3CQuZ"W0  经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。

8?0kZv"sq0

OJ#H*Lcx0P%Y0  1)查找死锁的进程:51Testing软件测试网#_q^ N3s5? ?&MD2^

sqlplus "/as sysdba"  (sys/change_on_install)51Testing软件测试网0G R!k+Ffqwhh!r8L3}
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
x1I,c1O.a0l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
}%y r2A4i[gK8B/n'{J0FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
51Testing软件测试网/m,oat8F y8h)Ci

S$t4G v0A K%?E~ Q0

&C2e_'J7FZC&N*Flx0  2)kill掉这个死锁的进程:51Testing软件测试网o@*ni/tody

51Testing软件测试网m;j}3GzA-V

  alter system kill session ‘sid,serial#’; (其中sid=l.session_id)

]z;nNN"_:M0

,w0H\:SZ3F0  3)如果还不能解决:

]b.F(WI(z0select pro.spid from v$session ses,
W Wn8Oc0v$process pro where ses.sid=XX and
$}wp`iyX2x0ses.paddr=pro.addr;
51Testing软件测试网P5b*x d#S&D(mg

51Testing软件测试网1m!BC Y,BeBL|(q l5o0b

51Testing软件测试网^ f!n}2v y(@$A

  其中sid用死锁的sid替换:51Testing软件测试网B$X#P7P|Fan$R

exit51Testing软件测试网3Zd yT2[n]+}P_(i
ps -ef|grep spid

Tn"F|Sm2im3Cv051Testing软件测试网&~,W `d3i];mk%c

51Testing软件测试网$~N7t!nA-m9I H

  其中spid是这个进程的进程号,kill掉这个Oracle进程51Testing软件测试网-k@6g[QP"YFD7a

TAG: Oracle

 

评分:0

我来说两句

Open Toolbar