知识大全 oracle杀死死锁进程

Posted 视图

篇首语:仰天大笑出门去,我辈岂是蓬蒿人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle杀死死锁进程相关的知识,希望对你有一定的参考价值。

  先查看哪些表被锁住了

  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

cha138/Article/program/Oracle/201311/17405

相关参考