熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

oracle中查找session中的死鎖

2013-11-13 22:20:58  來源: Oracle 

  1查哪個過程被鎖

  查V$DB_OBJECT_CACHE視圖:

  SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER=過程的所屬用戶 AND LOCKS!=;

   查是哪一個SID通過SID可知道是哪個SESSION

  查V$ACCESS視圖:

  SELECT * FROM V$ACCESS WHERE OWNER=過程的所屬用戶 AND NAME=剛才查到的過程名;

   查出SID和SERIAL#

  查V$SESSION視圖:

  SELECT SIDSERIAL#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的使用過程中碰到這個問題所以也總結了一點解決方法

  )查找死鎖的進程

  sqlplus /as sysdba

  SELECT susernamelOBJECT_IDlSESSION_IDsSERIAL#lORACLE_USERNAMElOS_USER_NAMElPROCESS FROM V$LOCKED_OBJECT lV$SESSION S WHERE lSESSION_ID=SSID;

  )kill掉這個死鎖的進程

  alter system kill session sidserial#;  (其中sid=lsession_id)

  )如果還不能解決

  select prospid from v$session sesv$process pro where sessid=XX and sespaddr=proaddr;

  其中sid用死鎖的sid替換

  exit

  ps ef|grep spid

  其中spid是這個進程的進程號kill掉這個Oracle進程


From:http://tw.wingwit.com/Article/program/Oracle/201311/18839.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.