前置き
Oracleの起動シーケンスは基本中の基本。
これをもう少し掘り下げて、ただの知識ではなく使える知識になるように後輩に話してみました。
オラクルデータベースの起動状態の遷移
Oracleを使っている人なら以下の4つの状態は誰でも知ってますね。
- SHUTDOWN
- 何も起動していない停止状態
- NOMOUNT
- インスタンスが起動している状態
- MOUNT
- データベースをマウントしている状態
- OPEN
- データベースを利用できる状態
どうしてこんなシーケンス?
では、どうしてこんな風に状態遷移して起動するのでしょうか?
1つずつ順を追って説明します。
SHUTDOWN
インスタンスが存在しない状態。
インスタンスはオラクルのバックグラウンドプロセスとそれが確保しているメモリを指します。
要はOS上のオラクルのプロセス群です。
NOMOUNT
処理をするためにはインスタンスを起動する必要があります。
このインスタンスのみを起動した状態がNOMOUNTになります。
インスタンスは前述の通りバックグラウンドプロセスとメモリのセットです。
・どれくらいメモリを確保するのか
・どこにログを出す場所
・DBのファイル(正確には制御ファイル)の場所
など、プロセスについて色々指定したいことがあります。それらをまとめたものが初期化パラメータファイルです。
プログラムで固定値にすることなく、柔軟にニーズに合った資源割り当てをしたプロセスの起動のために、
初期化パラメータファイルを読み込んでオラクルはインスタンス起動をしています。
MOUNT
プロセス(インスタンス)が起動すると、そのプロセスで自在にファイルを扱えます。
オラクルだけでなく、コンピュータ全般そいういうものですね。
データベースはインスタンスで扱うデータファイルを指します。
初期化パラメータファイルに制御ファイルの場所が記載されています。
制御ファイルにはデータベースのファイルの場所や停止時のDBの状態などが記されています。
起動したプロセスが指定されたデータファイルをすべてつかむところまで完了するとMOUNT状態になります。
OPEN
ファイルをつかんだら制御ファイルの情報とデータファイルの状態を比較します。
ここで制御ファイルとデータファイルの間に不整合がないことが確認できるとOPEN状態になります。
不整合を解消(リカバリ)をしないとOPENはできません。
#状態遷移に着目してまとめ
状態にフォーカスして説明するのが一般的ですが、
私は状態遷移をベースにして理解をしています。
こうすることで、トラブルが起きた時にどこを調べるかがとらえやすくなるからです。
SHUDTOWN ⇒ NOMOUNT
- 初期化パラメータファイルを読み込んでインスタンスを起動を完了させる。
- ここで失敗するケースは以下が考えられる
- 初期化パラメータファイルが見つからない
- 初期化パラメータファイルの設定が誤っている
- プロセス起動やメモリ割り当てのためのOSリソースの不足
NOMOUNT ⇒ MOUNT
- 初期化パラメータファイルから制御ファイルを探し、制御ファイルからデータベースファイルをつかむところまで完了させる。
- ここで失敗するケースは以下が考えられる
- 初期化パラメータで指定した場所に制御ファイルがない
- 制御ファイルが破損している
- 制御ファイルに指定されているデータファイルがない
MOUNT ⇒ OPEN
- データファイルをチェックして問題なければ全てのユーザにDBを開放する。
- 前回のDB停止がクラッシュの場合クラッシュリカバリ(主にコミットしていない更新のロールバック)を行う。
- 問題がある場合には自動ないしはDBA作業でリカバリをして起動させる必要がある
- ここで失敗するケースは以下が考えられる
- データファイルの不整合
- 不整合の解消に必要なREDOログ/アーカイブログがない
- DBリストアをしたため、リカバリ(障害直前までのアーカイブログの適用)が必要
それぞれのシーケンスで何をするかを覚えておくことは障害調査に必須です。
是非整理して覚えておきたいですね。