shutdownコマンドには標準(normal)、トランザクション(transaction)、即時(immediate)、異常終了(abort)の4つのモードがありますが、shutdown normalで停止しようとした場合、接続中のセッションが存在するとそのセッションが終了するまでOracleインスタンスは停止しません。
ということは常識なのですが、ではセッションを切断してやれば停止できるのかとALTER SYSTEM KILL SESSIONコマンドを実行して、サーバー側から強制的に切断してみてもやはりOracleインスタンスは停止しません。
この時、v$sessionを確認すると
select sid, serial#, username, status, server from v$session; SID SERIAL# USERNAME STATUS SERVER ---------- ---------- --------------- ---------------- ------------------ 1 1 ACTIVE DEDICATED 2 1 ACTIVE DEDICATED 3 1 ACTIVE DEDICATED 4 1 ACTIVE DEDICATED 5 1 ACTIVE DEDICATED 6 1 ACTIVE DEDICATED 7 1 ACTIVE DEDICATED 8 1 ACTIVE DEDICATED 9 1 ACTIVE DEDICATED 10 1 SYS INACTIVE DEDICATED 11 94 SCOTT KILLED PSEUDO
と、強制終了したセッションがSTATUS=KILLED、SERVER=PSEUDOで残ったままになっていることがあります。
shutdown normalで停止しようとした場合、このような状態のセッションが残っていてもOracleインスタンスは停止しないのです。(他のモードでは停止できる)
このような状態になった場合、強制終了したセッションをクライアント側でも終了してやると上記のレコードは消え、shutdown normalでもOracleインスタンスを停止することができるのですが、クライアント側からセッションを終了することが難しいような場合は、shutdown normalは使わないほうがいいかもしれません。
ちなみに、接続中、もしくは強制終了したセッションが残っている状態でshutdown normalを実行すると、セッションを終了するまで待たされるわけですが、待機状態のまま放置しておくと、1時間後にモゾモゾと動き出し、セッションが残っているにもかかわらず、ALTER DATABASE CLOSE NORMAL...、ALTER DATABASE DISMOUNT...と立て続けに実行し、エラーを吐いてしまいます。
アラートログファイルを見るとこんな感じになります(↓)
Fri Jun 24 11:55:55 2005 Shutting down instance: further logons disabled Shutting down instance (normal) License high water mark = 3 Fri Jun 24 12:00:54 2005 Active process 0 user '' program 'PSEUDO' SHUTDOWN: waiting for logins to complete. Fri Jun 24 12:52:36 2005 SHUTDOWN: Active sessions prevent database close operation Fri Jun 24 12:52:36 2005 ALTER DATABASE CLOSE NORMAL Fri Jun 24 12:52:36 2005 SMON: disabling tx recovery Fri Jun 24 12:52:36 2005 Active process 0 user '' program 'PSEUDO' CLOSE: Active sessions prevent database close operation CLOSE: Error 1093 during database close ORA-1093 signalled during: ALTER DATABASE CLOSE NORMAL... Fri Jun 24 12:52:36 2005 Restarting dead background process CJQ0 Fri Jun 24 12:52:36 2005 SMON: enabling tx recovery Fri Jun 24 12:52:36 2005 ALTER DATABASE DISMOUNT Fri Jun 24 12:52:36 2005 ORA-1106 signalled during: ALTER DATABASE DISMOUNT... CJQ0 started with pid=8 Fri Jun 24 12:52:37 2005 ARCH: Archiving is disabled Shutting down archive processes Archiving is disabled Fri Jun 24 12:52:37 2005 ARCH shutting down Fri Jun 24 12:52:37 2005 ARCH shutting down Fri Jun 24 12:52:37 2005 ARC0: Archival stopped Fri Jun 24 12:52:37 2005 ARC1: Archival stopped Fri Jun 24 12:52:40 2005 ARCH: Archiving is disabled Shutting down archive processes Archiving is disabled Archive process shutdown avoided: 0 active Fri Jun 24 12:57:40 2005 SHUTDOWN: waiting for detached processes to terminate.
このままさらに放置していると内部エラーなど発生し、にっちもさっちもいかなくなってしまいます。
このような状態になったときには、横からsysユーザーで割り込んで、shutdown abortでOracleインスタンスを強制的に終了せざるをえなくなります。
ということで、shutdown normalを使う場合には注意が必要です。