shutdown・・・なんなんだ〜

今どきはOracleのShutdownは、Windowsのサービス一覧から「停止」ってやるのが普通なのかもしれない(うちの職場ではそうやっている)が、経験豊かな先輩が、

「ターミナルからやるのはあまり行儀の良いやり方ではない」

ともの申されていたことがあったので、コマンドからやってみた。

  sqlplus /nolog
  conn sys/pw@orcl as sysdba

sysでログオンしておき、shutdownを実行。既存セッションの受動的切断を待ってくれるnormalモードで。ほかにもセッション切ってロールバックするimmediateや有無を言わさず即時停止するabortなどがありますが、私が携わっている10g運用中のシステムで、immediateの不具合が元でうまくいかない時がありました。夜間バッチでは、昼業務ユーザーからの接続が残っている(つまりまだ使っている)ケースが多いので、immediateを普通使うのでしょうね。ただ、Webシステムの場合には、DBよりも先にWebを落としますから、shutdown実行時にセッションが残っているケースはほとんどないのでは、という気もします。


  shutdown normal


しばらく待つが、画面はそのまま。数分がたち、さすがに「変だ」と思い始める。DBサーバ側にログインし、アラートログを見てみた。



  cd E:\oracle\product\10.1.0\admin\orcl\bdump\alert_orcl.log


ログの最後にシャットダウンシーケンスのログがあるはず。内容は・・・



  Fri Sep 02 20:56:21 2011
  Starting background process EMN0
  EMN0 started with pid=26, OS id=2008
  Fri Sep 02 20:56:21 2011
  Shutting down instance: further logons disabled
  Fri Sep 02 20:56:22 2011
  Stopping background process QMNC
  Fri Sep 02 20:56:22 2011
  Stopping background process CJQ0
  Fri Sep 02 20:56:24 2011
  Stopping background process MMNL
  Fri Sep 02 20:56:25 2011
  Stopping background process MMON
  Fri Sep 02 20:56:26 2011
  Shutting down instance (normal)
  License high water mark = 13
  Fri Sep 02 20:56:26 2011
  Stopping Job queue slave processes
  Fri Sep 02 20:56:26 2011
  Job queue slave processes stopped
  Fri Sep 02 21:01:35 2011
  Active process 2012 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2048 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2312 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2040 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 548 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2132 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2500 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2324 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2052 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  Active process 2488 user 'SYSTEM' program 'ORACLE.EXE (SHAD)'
  SHUTDOWN: waiting for logins to complete.


ちゃんと終わっているっぽいです。なのに、クライアントのコマンドプロンプトは固まっている。なんでかなと思い、もうひとつコマンドプロンプトを起動し、sqlplus接続してみました。



  sqlplus /nolog
  conn sys/pw@orcl as sysdba
  ERROR:
  ORA-12528: TNSリスナー:
  該当するインスタンスはすべて、新規接続をブロックしています


ええ〜、そうなの??
じゃあ、shutdown コマンドを実行したウィンドウはみんな、そのシャットダウンシーケンスの中で自分自身が持っている接続セッションを自分自身が起動したshutdownシーケンスのために消されてしまうってこと??

じゃあ、このウィンドウはどうすればいいのでしょう・・・
あと、これを夜間バッチで自動起動などする場合には、コマンドが途中でだんまりになってしまったりしないのかな・・・

というわけで、どうもよく分かりません。もう少し調べてみます。わかる人なら瞬察なんでしょうけどね・・・