如何杀死oracle死锁进程?

如何杀死oracle死锁进程?,第1张

1.查哪个过程被锁\x0d\x0a查V$DB_OBJECT_CACHE视图:SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER='过程的所属用户'ANDLOCKS!='0'\x0d\x0a2. 查是哪一个SID,通过SID可知道是哪个SESSION.\x0d\x0a查V$ACCESS视图:SELECT*FROMV$ACCESSWHEREOWNER='过程的所属用户'ANDNAME='刚才查到的过程名'\x0d\x0a3. 查出SID和SERIAL#\x0d\x0a查V$SESSION视图:SELECTSID,SERIAL#,PADDRFROMV$SESSIONWHERESID='刚才查到的SID'查V$PROCESS视图:SELECTSPIDFROMV$PROCESSWHEREADDR='刚才查到的PADDR'\x0d\x0a4. 杀明慧进程(1).先杀ORACLE进程:ALTERSYSTEMKILLSESSION'查出的SID,查出的SERIAL#'(2).再杀 *** 作系统进程:KILL-9刚才查出的SPID或ORAKILL刚才查出的SID刚才查出的SPID方法二:经常在oracle的使用过程中碰到这个问题,所以也总结了一点解决方法激码答:)1)查找死锁的模肢进程:sqlplus"/assysdba"SELECT\x0d\x0as.username,l.\x0d\x0aOBJECT_ID\x0d\x0a,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESSFROMV$LOCKED_OBJECTl,V$SESSIONSWHERE\x0d\x0al.SESSION_ID=\x0d\x0aS.SID2)kill掉这个死锁的进程:altersystemkillsession‘sid,serial#’(其中sid=\x0d\x0al.session_id)3)如果还不能解决,\x0d\x0aselectpro.spidfromv$sessionses,v$processprowhereses.sid=XXandses.paddr=pro.addr其中sid用死锁的sid替换。

先查看哪些表被锁住了

select b owner b object_name a session_id a locked_mode

from v$locked_object a dba_objects b

where b object_id = a object_id

OWNER                          OBJECT_NAME                                 SESSION_ID LOCKED_MODE

     

WSSB                           SBDA_PSHPFTDT                                         

WSSB_RTREPOS                   WB_RT_SERVICE_QUEUE_TAB                               

WSSB_RTREPOS                   WB_RT_NOTIFY_QUEUE_TAB                                

WSSB_RTREPOS      滑铅             WB_RT_NOTIFY_QUEUE_TAB                                

WSSB                       改喊    SBDA_PSDBDT                            核让野               

WSSB_RTREPOS                   WB_RT_AUDIT_DETAIL                                    

select b username b sid b serial# logon_time

from v$locked_object a v$session b

where a session_id = b sid order by b logon_time

USERNAME                              SID    SERIAL# LOGON_TIME

WSSB_RTACCESS                                

WSSB_RTACCESS                                

杀会话

alter system kill session sid serial#

e g

alter system kill session

如果有ora 错误 则在后面加immediate

alter system kill session immediate

1 查哪个过程被锁

查V$DB_OBJECT_CACHE视图:

SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER= 过程的所属用户 AND CLOCKS!=

查是哪一个SID 通过SID可知道是哪个SESSION

查V$ACCESS视图:

SELECT * FROM V$ACCESS WHERE OWNER= 过程的所属用户 AND NAME= 刚才查到的过程名

查出SID和SERIAL#

查V$SESSION视图:

SELECT SID SERIAL# PADDR FROM V$SESSION WHERE SID= 刚才查到的SID

查V$PROCESS视图:

SELECT SPID FROM V$PROCESS WHERE ADDR= 刚才查到的PADDR

杀进程

( ) 先杀ORACLE进程:

ALTER SYSTEM KILL SESSION 查出的SID 查出的SERIAL#

( ) 再杀 *** 作系统进程:

KILL 刚才查出的SPID

ORAKILL 刚才查出的SID 刚才查出的SPID

oracle的死锁

查询数据库死锁

select t username||    ||t sid||    ||t serial#||    ||t logon_time||    ||t sql_text

from v$locked_object t v$session t v$sqltext t

where t session_id=t sid

and t sql_address=t address

order by t logon_time

查询出来的结果就是有死锁的session了

下面就是杀掉

拿到上面查询出来的SID和SERIAL# 填入到下面的语句中

alter system kill session sid serial#

一般情况可以解决数据库存在的死锁了

或通过session id 查到对应的 *** 作系统进程 在unix中杀掉 *** 作系统的进程

SELECT a username c spid AS os_process_id c pid AS oracle_process_id FROM v$session a v$process c

WHERE  c addr=a paddr and a sid=  and a serial#= 

然后采用kill (unix) 或 orakill(windows )

在unix中

ps ef|grep os_process_id

kill os_process_id

ps ef|grep os_process_id

经常在oracle的使用过程中碰到这个问题 所以也总结了一点解决方法 )

)查找死锁的进程

sqlplus /as sysdba    (sys/change_on_install)

SELECT s username 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

)kill掉这个死锁的进程

alter system kill session sid serial#   (其中sid=l session_id)

)如果还不能解决

select pro spid from v$session ses v$process pro where ses sid=XX and ses paddr=pro addr

其中sid用死锁的sid替换

exit

ps ef|grep spid

lishixinzhi/Article/program/Oracle/201311/17405

方法/步骤\x0d\x0a1.查询哪些对象被锁:\x0d\x0aselect object_name,machine,s.sid,s.serial# \x0d\x0afrom v$locked_object l,dba_objects o ,v$session s\x0d\x0awhere l.object_id = o.object_id and l.session_id=s.sid\x0d\x0a\x0d\x0a2.杀死进程:\x0d\x0aalter system kill session '137,233'(其中137,223分别是上面查询出的sid,serial#)\x0d\x0a\x0d\x0aPS.以上两步,可通过Oracle的管理控制台来执行。\x0d\x0a\x0d\x0a如果利用上面的方法杀死进程后穗陪,进程状态虽被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在OS一级再杀死相应的进程(线程)\x0d\x0a\x0d\x0a1.首先获得进程(线程)号:\x0d\x0aselect spid, osuser, s.program \x0d\x0afrom v$session s,v$process p\x0d\x0awhere s.paddr=p.addr and s.sid=137 (137是上面的sid)孝培\x0d\x0a\x0d\x0a2.在OS上杀死这个进程(线程):\x0d\x0a\x0d\x0a1)在unix上,用root身份执行命令: \x0d\x0a#kill -9 12345(猜慎蠢即上面查询出的spid)\x0d\x0a\x0d\x0a2)在windows(unix也适用)用orakill杀死线程,例:c:>orakill orcl 12345\x0d\x0aorakill是oracle提供的一个可执行命令,语法为:orakill sid thread\x0d\x0a其中:\x0d\x0asid:表示要杀死的进程属于的实例名\x0d\x0athread:是要杀掉的线程号,即上面查询出的spid。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12235257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存