web-dev-qa-db-ja.com

Oracleによって強制終了されたセッションのクリーンアップ

セッションを終了しました

ALTER SYSTEM KILL SESSION '123,456' IMMEDIATE;

しかし、それはv$sessionを10日間使用しますが、アタッチされたプロセスは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プロセスを確認したところ、ゾンビは見つかりませんでした。現在のプロセスはすべて、生きているセッションと一貫しています。

これは、強制終了されたすべてのセッションで発生するわけではありません。強制終了されたセッションの大部分は妥当な時間内にリストから削除されるため(多くの場合、1秒かかる)、PMONはアクティブのようです。

リストから長時間プレイの強制終了セッションを削除するにはどうすればよいですか?

1
diziaq

強制終了された非アクティブなセッションのこの予想される動作は、.

「非アクティブ」状態のユーザー「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では表示されなくなりました。

2
JSapkota

セッションを終了した後、次を使用できます。

alter system disconnect session 'SID,SERIAL#' immediate;

このようなコマンドを生成するには、次のスクリプトを使用します。

select 'alter system disconnect session ''' || SID || ',' || SERIAL# || ''' immediate;' from v$session where STATUS not in ('ACTIVE','INACTIVE');
0
Dmitry Lukyanov