|
今回から合計6回の連載が始まります。SQL Server初学者向けに役立つ特集の連載をと頼まれました。どのようなテーマにしようか悩みましたが、データベースを運用する上で一番大事なこと、それは、データベースのバックアップとリカバリに他なりません。
データベース運用管理技術者の方が最初に覚えることは、今運用しているデータベースのバックアップ技術と、万が一事故が発生した後のデータベースの復元手順だと思います。バックアップとリカバリの技術は必ず身に付けておかなければいけない重要な技術です。
今までも機会あるごとにSQL Serverで運用しているデータベースのバックアップとリカバリについてお話したことがあります。しかし再度、これから初めてSQL Serverの管理を任される新人管理者の方を想定して
『データベースのバックアップとリカバリの克服』
というテーマでその技術を集中解説していきたいと思います。対象となるデータベースサーバーはSQL Server 2000です。
SQL Server 2000には、小さなデータベースの全体バックアップから、ミッションクリティカルな大規模なデータベースのバックアップまで、多くのバックアップ技術があります。
しかしこれらすべての技術を覚える必要はありません。今運用しているデータベースに最適なバックアップ技術をまず最初に覚えましょう。
そこで本連載では、中小規模のデータベースの管理者になる方々を想定し、以下の内容に沿って解説をしていきます。
第1回 :バックアップ前の基本知識
第2回 :バックアップの基本は全体バックアップ
第3回 :その他のバックアップ技術(差分、ログバックアップ)
第4回 :データベースの復元
第5回 :バックアップ計画とジョブ管理
第6回 :システムデータベースのバックアップとデータベースサーバーの再構築
以上の技術を身に付けることによって、中小規模のSQL Server 2000データベース管理者として自信を持って、仕事に着い頂きたいと思います。
第1回は、バックアップ技術を覚える前に必要となるSQL Server 2000の基礎知識をいくつか解説を致します。

データベースの中にあるテーブルのレコードを読み書きするためには、まず最初に、そのデータベースをオープンしなければいけません。通常のファイルのオープンとクローズと同じように、データベースもオープンとクローズ処理が必要です。しかしながら通常のファイルと異なり、データベースのオープンとクローズ処理は、データベースサーバーが管理しており、データベースユーザには意識させないようになっています。けれどもその管理上の仕組みをある程度理解しないと、思わぬエラーに遭遇して戸惑うことがあります。
まず最初に、データベースのオープンとクローズの仕組みをしっかりと理解しましょう。
2.1 『自動終了』オプション
データベースオプションに、『自動終了(AUTO_CLOSE)』というオプションがあります。このオプションが付いているデータベースと付いていないデータベースでは、そのオープンとクローズの様子が違いますので注意してください。
今運用しているデータベースのオプションを確認するためには、図1のように、Enterprise Managerを使ってデータベースのプロパティのオプションを表示してください。
 |
| 図1:エクスプローラーが表示したエラーメッセージ |
SQL文では、
SELECT DATABASEPROPERTY('データベース名' , 'IsAutoClose' )
を実行します。自動終了オプションが付いているときは1、付いていない時は0を返します。
またSQL文から自動終了オプションを操作するときは、
ALTER DATABASE データベース名
SET AUTO_CLOSE ONまたはOFF
の構文を使います。
2.2 オプションが付いていないときの動作
SQL Server 2000 Standard 版などのデータベースサーバーでは、このオプションはオフになっているのが通常の状態です。一方MSDE 2000などでは、このオプションが付いていることがあります。
自動終了のオプションが付いていない通常のデータベースでは、データベースサーバーのデータベースサービス開始時に、該当するデータベースのファイルをオープンして、いつでもデータベースが使用できるように待機します。
またデータベースサービスを停止するときに、データベースのダーティクローズを行います(ダーティクローズの意味は後述します)。
このように、自動終了が付いていない通常のデータベースでは、データベースサービスの開始時から終了時まで、ずーっと、データベースファイルがオープンされ放しであることを認識してください。
2.3 データベースがオープンされて困ること
自動終了のオプションが付いていない通常のデータベースは、データベースサービス運用時には常にオープンされています。このためファイルのエクスプローラーなどを使って、データベースの物理ファイルをコピーしようとしても、エクスプローラーが図2のようにエラーメッセージを表示します。
 |
| 図2:エクスプローラーが表示したエラーメッセージ |
誰もデータベースを使用していないから、エクスプローラーで物理ファイルをコピーして、データベースのバックアップとして代用しようかな?と初心者の方は考えると思います。しかし図2のエラーが表示されて悩む方を見受けることがありますが、これは自動終了のオプションが付いていないために発生します。
データベースを使用しているユーザが誰もいなくても、データベースサーバーのシステムは、該当するデータベースをいつでも使えるように開いており待機中であることを覚えてください。
またこのデータベースを待機中にするために、メモリをある程度消費します。データベースサーバー上に、数多くのデータベースがあり、そのほとんどが同時にはあまり使用されないような環境であれば、この待機中にするために消費されるメモリ容量が無駄になります。メモリ容量が少ない環境下でデータベースサービスを運用するときは、自動終了オプションを付けることによって、メモリを有効利用することができます。
2.4 オプションが付いているときの動作
自動終了のオプションを付けると、データベースサービス開始時には、まだ該当するデータベースは開きません。
そのデータベースを最初に使用するユーザが接続しに来た時に、初めて、データベースを開きます。
また最後の1人がそのデータベースの使用を終えて誰もデータベースを使わなくなったときに、そのデータベースをクリーンシャットダウンします(ダーティクローズではありません)。
自動終了オプションが付いたデータベースの利点は、誰もそのデータベースを使わない状態の時に、エクスプローラーでそのデータベースの物理ファイルをコピーして、データベースのバックアップとして代用することができます。
ファイルをコピーするときは、データファイルだけではなく、トランザクションログファイルも念のためコピーしておきましょう。但し、トランザクションログファイルが1個だけから構成されるデータベースであれば、クリーンシャットダウンされたことを条件として、データファイルからデータベースを復元することができます。このことを利用し、トランザクションログファイルのコピーを省略して、データファイルだけをコピーすることもあります。
自動終了オプションが付いているデータベースの欠点としては、一番最初にそのデータベースに接続して来たユーザは、データベースが開かれるまで多少待たされるという欠点があります。
またそのデータベースを使用している最後のユーザが接続を切ると、データベースはクローズされますので、データベース運用中にオープンとクローズが何度も繰り返され、サーバーの運用に問題が発生することもあります。
このような欠点はありますが、データベースが使用されないときを見計らってデータベースの物理ファイルのコピーができる利点は、データベース運用にプラスに働くこともありますので、場合によっては、自動終了オプションも検討する価値があります。

データベースサーバーのデータベースサービスを停止すると、データベースが閉じられます。このときの閉じられ方は、クーリンな閉じ方ではありません。このクリーンな閉じ方ではないということを覚えておく必要があります。
データベースのテーブルのレコードに関するデータは、ある程度はメモリにキャッシュされます。そのレコードに対する変更操作は、キャッシュ上のデータを変更し、ディスクにあるデータファイル上の該当箇所の更新は即座には行われません。データファイル上の更新がすぐには実施されないということが重要な事実です。
それに対して、トランザクションログファイルに対しては、この更新事実をすぐに記録します。
データファイルとトランザクションログファイルの更新のタイミングが異なっていることに注意します。
さてデータベースのサービスを停止するときに、キャッシュメモリ上に存在する更新されたレコードのデータは、データファイルに書き出したらよいでしょうか?
SQL Server 2000の動作は、データファイルには反映せずに、そのままサービスを止めてしまいます。つまりデータファイルの内容が正しくない状態で閉じられます。このような閉じ方を、ここでは便宜上、ダーティクローズと呼ぶことにします。
ダーティクローズを行う代償として、データベースサービス開始時のオープン処理で、データファイルとトランザクションログファイルの内容が調査され、万が一、ダーティクローズによってデータファイルに書き込まれていないデータがあるときは、その部分はトランザクションログファイルの内容から復元されます。オープン処理が終わると、データファイルは正しい状態に復旧されます。
このように、SQL Server 2000は、データベースサービス開始時に、トランザクションログファイルからのデータベース復旧処理を必ず実行していますので、トランザクションログファイルの読み取りができないと、データベースを使用することはできません。ですから、トランザクションログファイルは絶対に破損してはいけない重要なファイルと言えます。
またデータベースサービスが停止している間に、データベースのファイルをコピーするときは、ダーティクローズの可能性があるため、必ずトランザクションログファイルも一緒に含めてコピーしなければいけません。
これに対して、自動終了によるクローズは、クリーンシャットダウンとも呼ばれ、キャッシュメモリ上にある更新されたデータを、データファイルに正しく書き込んでからクローズします。
またデタッチ操作によりデータベースサービスからデータベースを切り離した時も、クリーンシャットダウンされます。

クリーンシャットダウンされたデータファイルの中には、未書き込み状態のデータは存在せず、完全な正しい状態のデータベースのデータを表しています。このためこのデータファイルからデータベースの復元が可能です。
但し1つだけ条件があります。それはデータベースを構成するトランザクションログファイルの個数です。
トランザクションログファイルの構成個数が1個に限ってだけ、データファイルからデータベースの復元ができます。複数個のトランザクションログファイルから構成されるデータベースをクリーンシャットダウンしても、そのデータファイルから元のデータベースを復元することはできません。
データファイルからデータベースを復元するときは、データベースのアタッチ操作を行ないます。
データファイルが1個の場合は、sp_attach_single_file_dbストアドプロシージャを使います。データファイルが複数個の場合は、sp_attach_dbストアドプロシージャを使います。Enterprise Manager上からは「アタッチメニュ−」でデータベースの復元ができます。
第1回の学習のまとめ
| (1) |
データベースの物理ファイルをコピーするときは、サービス停止時に行う。その際データファイルだけではなく、トランザクションログファイルを含めて、すべての構成ファイルをコピーしなければいけない。
さらに、デタッチ操作後にコピーすることをすすめる。 |
| (2) |
データベースを作成するときは、特別な理由が無い限りは、トランザクションログファイルは1個だけにする |
| (3) |
データベースの物理ファイルをコピーするときは、明示的に、デタッチ操作によって切り離しをした後に、コピーする。デタッチ操作は、クリーンシャットダウン扱いとなる。 |
| (4) |
自動終了オプションは、クリーンシャットダウン扱いになる。 |
| (5) |
データベースサービスの停止は、原則的には、クリーンシャットダウン扱いではない。次回のサービス開始時に、トランザクションログファイルを読み取って、データベースの復旧処理が行われる。 |
| (6) |
データベースファイルからデータベースを復元するときは、アタッチ操作で復元を行う。 |
| (7) |
小さなデータベースであれば、自動終了オプションを付けて運用し、誰も使っていないときを見計らって、データベースの構成物理ファイルを全部コピーすれば、データベースのバックアップとなる。 |
| (8) |
トランザクションログファイルが一番大事なファイル。絶対に壊れないようにしなければいけない。 |
|

|