📘

Oracleの起動と停止を学ぶ

2023/06/27に公開

Oracleの起動と停止を学ぶ

こんにちは!わいわわです。
Oracleの学習を進めています。
今回は、起動と停止について学んでいきます!

起動と停止を学ぶことはOracleの内部構造を理解するうえで必要です。
起動する際にどのファイルをどのように使うのか、
依存関係がどうなっているのか、そのようなことを学習します!

起動と4つの状態

Oracleの起動には4つの状態があります。
状態別の役割などを見ていきます。

状態名 状態
OPEN データ処理ができる状態・SQL文を受け付けられる状態
MOUNT データファイルなどにアクセスできる状態
NOMOUNT バックグラウンドプロセスと共有メモリが存在する状態
SHUTDOWN 停止状態

このようなイメージです。

下から上に、起動が行われていくイメージです。

SHUTDOWN→NOMOUNT
パラメータを読み込み、バックグラウンドプロセスの起動や
共有メモリを確保します。

NOMOUNT→MOUNT
制御ファイルを読み込みます。

MOUNT→OPEN
データファイルのチェックなどをします。

制御ファイルとはデータベースの構成情報が書かれているファイルで、
データベースのファイルのパスなどが分かります。

OPENの状態ではお店に例えると「業務開始」のようなイメージで、
データファイルやREDOログファイルを開いたり、
Oracleが内部的に使用している情報と比較し、問題がないかどうか確認したりします。

REDOファイルとは、データの変更履歴が格納されているファイルのことです。

インスタンスについて

Oracleでは管理の単位としてインスタンスという用語を使います。
インスタンスとは「バックグラウンドプロセス+共有メモリ」のことです。
MOMOUNT状態がインスタンスが起動した状態であり、
インスタンスのイメージは「データベースを管理しているもの」で、データベース自体ではありません。

ただ、インスタンスとデータベースは1対1で対応しますので
実際の現場ではインスタンスが起動した=データベースが起動した、とも言うようです。

例外としてRACというものがあります。
1つのデータベースに対して2つのインスタンスが対応している構成です。
この場合は1つのインスタンスが止まったからといってデータベース自体が止まっているわけはないです。

それぞれのコマンド

ファイル構成は学習できましたので
次は具体的な起動処理の流れを見ていきたいと思います。

停止状態からMOMOUNTへの移行

使用するツールはSQL*Plusというツールになります。
起動後、このツールからOracleのコマンドを入力します。

・コマンド
「startup」が起動コマンドとなります。

例)
SQL> sqlplus /nolog → SQL*Plusを起動する
SQL> connect / as sysdba → 起動停止できるユーザーにスイッチするコマンド
SQL> startup nomount → 停止状態からNOMOUT状態へ

NOMOUTからMOUNTへの移行

次はMOUNT状態への移行です。
「alter database mount;」と入力することによりMOUNT状態になります。
初期化パラメータに記述されている制御ファイルのパスを使用して制御ファイルを開いて中身を読みます。
REDOログファイルやデータファイルの位置をOracleは把握するイメージです。

例)
SQL> alter database mount;

MOUNTからOPENへの移行

MOUNT状態からOPEN乗田へ移行するためには「alter database open;」と入力します。
コマンドの内部ではデータファイルを依頼開いて簡単にチェックをしたり、
一部のバッググラウンドプロセスを起動したりしています。

データベースのオープンが終了すれば業務が開始できるOPEN状態になります。

例)
SQL> alter database open;

今回は詳しく、3つのコマンドを使ってデータベースを起動しました。
通常は停止状態でstartupコマンドを入力してOPEN状態にします。
startupコマンド1つ使えば、解説した3つのコマンドの作業を内部で行います。

起動処理の要点をまとめる

・まず初期化パラメータファイルを読んで、バックグラウンドプロセスの生成と共有メモリ(バッファキャッシュや共有プール)の確保をする。
 これをNOMOUNTと呼ぶ
・初期化パラメータファイルの記述にある制御ファイルの位置を確認し、
 制御ファイルを開いてデータベースを構成する各種ファイルの位置を知る。
 これをMOUNTと呼ぶ。
 なお、場所を知るだけのため、ファイルがなくてもこの時点ではエラーにはならない
・データファイルやREDOログファイルに問題がなければ
 (Oracleが内部的に使用するデータのつじつまが合わないなどがなければ)、
 データファイルの読み書きが可能な状態にする。
 つまり、SQL文を実行できる状態にする。これをOPENと呼ぶ

Oracleの停止

停止は接続されているすべてのOracleクライアントの接続が終了してから停止作業をします。
この停止作業は起動作業の逆で、データベースをクローズしてからインスタンスを停止します。
インスタンスの停止とは…
共有メモリの解放とバックグラウンドプロセスの停止のことです。

ただし、起動時の作業にはない作業として、
バッファキャッシュに散らかったデータの片づけです。
書き込まれていない変更済みデータをデータベースのクローズ作業の一環として
データファイルに書き込むのがこの作業です。

入力コマンドとしては「shatdown」を入力するだけになります。

例)
SQL> shutdown

しかしSQL文が終わらなかったり、Oracleクライアントが接続を切ってくれなかったり
緊急事態ですぐさまで終了させなければならない場合、
通常のコマンドが利かない場合などさまざまなケースがあります。

そこでshutdownにはオプションが用意されています。

オプション 接続の終了を待つか
なし 接続の終了を待つ
transactional トランザクションが終わるまで待ち、終われば接続を切る
immediate 待たず、コミットされていないデータは失われてしまう
abort 待たず、コミットされていないデータは失われてしまう

immediateとabortオプションの違いは
変更済みデータをデータファイルに書き込むか否かです。
immediateは書き込みますが、abortは書き込みません。

このように強制的なshutdownに見えますがDBMSとしてデータを失うわけにはいかないため
次の業務開始の際にデータを復旧させます。

この作業を「インスタンスリカバリ」といいます。
データファイルに書き込まれていないデータをどのように復旧させるかというと、
REDOログファイルのデータを使用します。
REDOログファイルには変更履歴が記載されているため、古いデータファイルの内容を最新のものにできるのです。

このインスタンスリカバリはユーザーが意識する必要はなく、Oracleが勝手に行います。
同様にOSの障害やマシンの障害などでOracleが異常停止した場合もインスタンスディカバリが行われます。
ただし、キャッシュ上の変更済みデータが失われただけでなく、
データファイルが存在しないなどの障害が発生していた場合には本格的な復旧作業を要します。

所感

今回はOracleの起動と停止について学習を進めました。
イメージができましたし、インスタンスという言葉も聞き覚えがあり、
スムーズに入ってきました!
引き続き学習を進め、Oracleについて知識やイメージを深めます!

Discussion