セッションを切断
意図的にセッションを切断したい場合 alter system kill session コマンド で
Oracle への接続を強制的に終了させることができる。
残留セッション
例えば、あるセッションで SQL 実行中にフリーズしたが、セッションは
生き残っている場合や、データベースをシャットダウンしたいが接続中の
ユーザが残っている場合などが想定される。
後者の場合、 shutdown immediate なら、トランザクションが終了するのを待たずに
ロールバックしてセッションを切断するからよいが、normal や transactional では
切断されるまで待ちが発生してしまう。このような時に有効。
hoge ユーザのセッションを強制終了させる例
hoge ユーザでログイン
$ sqlplus hoge/hoge@ORCL
管理ユーザでログイン(別窓)
$ sqlplus system/hoge@ORCL
v$session で hoge ユーザの情報を取得
SQL> select sid, serial#, username, program from v$session where username = 'HOGE'; SID SERIAL# USERNAME PROGRAM ---------- ---------- ---------- ------------------------- 304 116 HOGE sqlplus@DBSEV (TNS V1-V3)
hoge ユーザが sqlplus で接続していることが分かる。
(分かりやすくするために1セッションにしているが、複数セッションが貼られている場合は
ログイン時刻や実行 SQL など、絞込み情報を増やすことで識別が容易になる。)
セッション強制終了
セッションを強制終了する場合、SID(セッションID) と SERIAL#(シリアル番号) が
必要になるので確認しておく。今回は SID が 304 、SERIAL# が 116 であることが分かる。
SQL> alter system kill session '304, 116'; システムが変更されました。
再度 v$session を確認してみると、セッションが終了されたことが分かる。
SQL> select sid, serial#, username, program from v$session where username = 'HOGE'; レコードが選択されませんでした。
hoge ユーザのウィンドウに戻り、任意の SQL を実行してみると、エラーが返される。
SQL> select * from dual; select * from dual * 行1でエラーが発生しました。: ORA-00028: セッションは強制終了されました。