Oracle

清理 Oracle 終止會話

  • August 6, 2020

我殺死了一個會話

ALTER SYSTEM KILL SESSION '123,456' IMMEDIATE;

但它會保留v$session10 天,儘管v$processes.

SELECT
   s.username,
   s.osuser,
   s.sid,
   s.serial#,
   p.spid
 FROM v$session s, v$process p
WHERE s.sid = '123'
  AND p.addr (+)= s.paddr;

我還檢查了所有與 Oracle 相關的 Linux 程序,沒有發現殭屍程序:所有目前程序都與活動會話一致。

並非所有被殺死的會話都會發生這種情況。PMON 似乎處於活動狀態,因為大多數被殺死的會話都在合理的時間內從列表中清除(通常需要一秒鐘)。

可以做些什麼來從列表中消除長時間播放的終止會話?

我認為這是已被終止的非活動會話的預期行為。

我有一個會話連接為處於“非活動”狀態的使用者“JAY”。

[oracle@myserver datafile]$ sqlplus jay@hrpdb
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

讓我們使用 sys 使用者檢查會話詳細資訊。

SQL> col username format a20

SQL> select sid,serial#,username,status from v$session where username ='JAY';

      SID    SERIAL# USERNAME             STATUS
---------- ---------- -------------------- --------
       15      36102 JAY                  INACTIVE

讓我們殺了它。

SQL> alter system kill session '15,36102';

System altered.

再次檢查會話詳細資訊。

SQL> select sid,serial#,username,status from v$session where username ='JAY';

      SID    SERIAL# USERNAME             STATUS
---------- ---------- -------------------- --------
       15      36102 JAY                  KILLED

它仍然處於“KILLED”狀態。

現在讓我們嘗試在 Jay 的會話中進行一些操作,該會話處於非活動狀態並被終止。

SQL> select * from tabs;
select * from tabs
*
ERROR at line 1:
ORA-00028: your session has been killed

現在讓我們使用 SYS 使用者檢查會話詳細資訊。

SQL> select sid,serial#,username,status from v$session where username ='JAY';

no rows selected

會話在 中不再可見v$session

引用自:https://dba.stackexchange.com/questions/183962