セッションを手動で強制終了させる方法

残留セッション

データベースに接続中にあるセッションではSQL実行中にフリーズしたがセッションは生き残っている場合やデータベースをシャットダウンしたいが接続中のユーザが残っている場合などが想定される。後者の場合、 shutdown immediate なら、トランザクションが終了するのを待たずにロールバックしてセッションを切断するからよいが、normal や transactional では切断されるまで待ちが発生してしまう。このような時にセッションを手動で終了させる方法が有効である。

ユーザのセッションを強制終了させる例

SCOTTユーザでログイン

C:\work>sqlplus SCOTT/oracle

 

SQL*Plus: Release 11.2.0.1.0 Production on 金 2月 3 01:41:47 2017

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

 

 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

に接続されました。

 

管理ユーザでログイン(別窓)

C:\work>sqlplus SYSTEM/oracle

 

SQL*Plus: Release 11.2.0.1.0 Production on 金 2月 3 01:54:56 2017

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

 

 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

に接続されました。

v$sessionでSCOTTユーザの情報を取得

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

 

       SID    SERIAL# USERNAME                       PROGRAM

---------- ---------- ------------------------------ -------------------

        30        482 SCOTT                          sqlplus.exe

セッション強制終了

SQL> alter system kill session '30, 482';

 

システムが変更されました。

再度v$sessionでSCOTTユーザの情報を取得

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

 

レコードが選択されませんでした。

 

SCOTTユーザーで検索を実行

セッションが強制終了されたためエラーになる。

 

SQL> select * from emp;

select * from emp

*

行1でエラーが発生しました。:

ORA-00028: セッションは強制終了されました。

その他

SQL> alter user scott account unlock;

 

ユーザーが変更されました。

 

SQL> alter user scott identified by "oracle";

 

ユーザーが変更されました。