データベースのメンテナンス時に、DBセッションが残っているとメンテナンスが出来ない場合があります。
そんな時にDBセッションを強制的に切断する方法を紹介します。
切断テスト用のDBユーザ作成
切断テストをするために、適当なDBユーザ(dekiru)を作成します。
[oracle@oel77 ~]$ sqlplus / as sysdba
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
SQL> create user dekiru identified by "dekideki";
User created.
CREATE SESSION権限を与えます。
SQL> grant create session to dekiru;
Grant succeeded.
作成したDBユーザで接続します。
SQL> conn dekiru/dekideki;
Connected.
SQL> show user;
USER is "DEKIRU"
kill session 実行方法
まずは切断対象のDBセッションを突き止めて、SIDとSERIAL#を確認します。
[oracle@oel77 ~]$ sqlplus / as sysdba
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
SQL> col schemaname for a10
SQL> col program for a30
SQL> select sid, serial#, schemaname, program from v$session where schemaname = 'DEKIRU';
SID SERIAL# SCHEMANAME PROGRAM
---------- ---------- ---------- ------------------------------
395 49247 DEKIRU sqlplus@oel77 (TNS V1-V3)
以下のSQLでセッションを切断します。
alter system kill session ‘SID,SERIAL#‘ immediate;
SQL> alter system kill session '395,49247' immediate;
System altered.
最初に接続したユーザ(切断されたユーザ)でSQLを発行すると、コネクションを失ったエラー ORA-03135 となります。
SQL> select sysdate from dual;
select sysdate from dual
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 16545
Session ID: 395 Serial number: 49247