OS级别kill 进程

1.     在修改之前查看对象持有锁的情况 

 http://blog.csdn.net/tianlesoftware/article/details/6822321

2. 查一个session的状态 

  1. SELECT distinct S.SID SESSION_ID,  
  2.        S.STATUS,  
  3.        S.USERNAME,  
  4.        DECODE (LMODE,  
  5.                0, ' None ',  
  6.                1, ' Null ',  
  7.                2, ' Row-S(SS) ',  
  8.                3, ' Row-X(SX) ',  
  9.                4, ' Share',  
  10.                5, 'S/Row-X (SSX) ',  
  11.                6, 'Exclusive ',  
  12.                TO_CHAR (LMODE))  
  13.           MODE_HELD,  
  14.        DECODE (REQUEST,  
  15.                0, ' None ',  
  16.                1, ' Null ',  
  17.                2, ' Row-S(SS) ',  
  18.                3, ' Row-X(SX) ',  
  19.                4, ' Share',  
  20.                5, 'S/Row-X (SSX) ',  
  21.                6, 'Exclusive ',  
  22.                TO_CHAR (REQUEST))  
  23.           MODE_REQUESTED,  
  24.        O.OWNER || ' . ' || O.OBJECT_NAME || ' ( ' || O.OBJECT_TYPE || ' ) '  
  25.           AS OBJECT_NAME,  
  26.        S.TYPE LOCK_TYPE,  
  27.        L.ID1 LOCK_ID1,  
  28.        L.ID2 LOCK_ID2,  
  29.        S2.SQL_TEXT  
  30.   FROM V$LOCK L,  
  31.        SYS.DBA_OBJECTS O,  
  32.        V$SESSION S,  
  33.        V$ACCESS A,  
  34.        V$SQL S2  
  35.  WHERE     L.SID = S.SID  
  36.        AND L.ID1 = O.OBJECT_ID  
  37.        AND S.SID = A.SID  
  38.        AND S2.HASH_VALUE = S.SQL_HASH_VALUE  
  39.        AND A.OBJECT = 'PROC_VALIDATE_RULE_V3';  

 3. 确认killed 状态的session是否使用回滚段

  1.   SELECT s.username,  
  2.          s.sid,  
  3.          s.serial#,  
  4.          t.used_ublk,  
  5.          t.used_urec,  
  6.          rs.segment_name,  
  7.          r.rssize,  
  8.          r.status  
  9.     FROM v$transaction t,  
  10.          v$session s,  
  11.          v$rollstat r,  
  12.          dba_rollback_segs rs  
  13.    WHERE     s.saddr = t.ses_addr  
  14.          AND t.xidusn = r.usn  
  15.          AND rs.segment_id = t.xidusn  
  16.          AND s.sid IN  
  17.                 (850, 968, 991, 1039, 968, 991, 1039, 1009, 732, 850, 732)  
  18. ORDER BY t.used_ublk DESC;

 4. OS 级别kill 进程

前面已经获取了对象上持有的session ID,这里根据Session ID 查出相关的系统SPID. Sql 语句如下:

  1. SELECT spid, osuser, s.program  
  2.   FROM v$session s, v$process p  
  3.  WHERE     s.paddr = p.addr  
  4.        AND s.sid IN  
  5.               (850, 968, 991, 1039, 968, 991, 1039, 1009, 732, 850, 732);  

 [oracle@qs-xezf-db1 ~]$ ps -ef|grep 6101

oracle   6101     1  0 May13 ?        00:01:06 oraclexezf (LOCAL=NO)

oracle  16790 16606  0 05:14 pts/2    00:00:00 grep 6101

[oracle@qs-xezf-db1 ~]$ kill -9 6101   

[oracle@qs-xezf-db1 ~]$ ps -ef|grep 6279

oracle   6279     1  0 May13 ?        00:00:57 oraclexezf (LOCAL=NO)

oracle  16824 16606  0 05:14 pts/2    00:00:00 grep 6279

[oracle@qs-xezf-db1 ~]$ kill -9 6279

 5.     检查

在OS级别kill 掉这些状态为killed 的session 之后,对象的Row-X(SX)全部释放,过程对象上的操作也顺利进行,没有出现等待。

这里注意的是,修改之后会导致一些对象的无效,需要查看并重新编译这些无效对象。

 

posted @ 2012-07-12 19:27  *新*新*  阅读(1353)  评论(0编辑  收藏  举报