Oracle 11g (Windows版) - 起動と停止
仕事で Oracle 11g が乗っかったある Windows サーバーを仮想化することになった。が、Oracle サーバーの管理方法は全く知らない。基本的なところから勉強してみることにした。
Windows サービスによる Oracle インスタンスの起動と停止
Windows の場合、Oracle インスタンスと1対1に対応した Windows サービスが OS 起動時に自動起動するようになっている。さらに、デフォルト(レジストリ ORAsidAUTOSTART が TRUE)の場合はサービスの起動によってインスタンスの起動、すなわち SQL*Plus での
startup
が自動的に行われる。なお、ORAsidAUTOSTART の sid は Oracle System Identifier であり、インスタンスの識別子である。つまり、1つのマシン上で複数のインスタンスが起動している場合(実は、今回メンテしようとしているサーバーには複数インスタンスが乗っかっている!)、それらを区別するためのものである。
また、サービスを停止させると、デフォルトの設定では SQL*Plus で
shutdown immediate
を実行したのと同様の形でインスタンスも終了する。これらの動作にはレジストリ ORAsidSHUTDOWN および ORAsidSHUTDOWNTYPE が関係している。 結局、デフォルトの設定では OS(Windows) 起動時に Oracle インスタンスの起動が行われ、OS シャットダウン時には(進行中のトランザクションはロールバックされてから)Oracle インスタンスは停止するということである。
SQL*Plus の起動
参考: Windows環境におけるデータベース・ユーザーの認証
コマンドプロンプトを起動して、
sqlplus /nolog
で(データベースに接続しない状態で) SQL*Plus を起動する。Windows 版の Oracle の場合、(Windows の)ログインユーザーが ora_dba グループに所属している場合、以下のコマンドによりパスワード無しで SYSDBA 権限でローカルマシンで動いている Oracle データベースに接続できる。
connect / as sysdba
SQL*Plus による Oracle インスタンスの停止
上記の通り、Windows では何もしなくても Oracle インスタンスが起動された状態になっているので、よく本に載っている SQL*Plus での起動を試してみるためには、一度接続していったん停止させてから起動を試みる必要がある。なので、まず停止方法から。
shutdown [normal | transactional | immediate | abort]
normal は新たな接続を禁止し、既にある接続が終了するまで待ってからシャットダウンする。接続を張りっぱなしにするアプリケーションもあったりするのでこのモードでのシャットダウンは実際には使用することは無さそう。abort は強制的なシャットダウンであり、整合性が取れていない状態になってしまう(次回の起動時にリカバリ処理が走る)ので推奨されていない。よって通常は transactional か immediate を使用することになると思う。transactional は、進行中のトランザクションの完了を待ってからシャットダウンする。immediate は進行中のトランザクションをロールバックさせてからシャットダウンする。いずれもシャットダウン後は整合性が取れた状態になる。
SQL*Plus による Oracle インスタンスの起動
起動は停止と異なり、段階がある。状態は
- 停止 (S)
- NOMOUNT 状態 (N)
- MOUNT 状態 (M)
- OPEN 状態 (O)
の4つある。状態を移動させるコマンドは
移動方向 | コマンド |
---|---|
S→O | startup |
S→M | startup mount |
S→N | startup nomount |
N→M | alter database mount; |
M→O | alter database open; |
である。OPEN 状態になって初めて一般のクライアントアプリケーションがデータベースにアクセスできるようになる。NOMOUNT や MOUNT 状態はメンテナンスの時に使用する(どんな時に使うのかはまだよくわかっていないが)。
Oracle 関係の Windows サービス
Windows 版の Oracle にはいくつかの Windows サービスが登録されている。
サービス名 | スタートアップの種類 | 説明 |
---|---|---|
Oracle sid VSS Writer Service | 手動 | (まだわかっていない)Volume Shadow Copy を使ったバックアップに必要? |
OracleDBConsolesid | 自動 | Enterprise Manager を使用するために必要なサービス |
OracleJobSchedulersid | 無効 | (まだわかっていない) |
OracleMTSRecoveryService | 自動 | (まだわかっていない) |
OracleorahomeTNSListener | 自動 | リスナー |
OracleServicesid | 自動 | (最初に説明した)Oracleインスタンスと1対1に対応したサービス |
ここで、sid の部分には SID が入り、orahome の部分には Oracle ホーム名が入る。Oracle ホーム名は Oracle インストール時に設定した名前である。スタートメニューに "Oracle - OraDb11g_home1" のように表示されていたら Oracle ホーム名は "OraDb11g_home1" である。