2004年3月11日
『PASSJ Conference 2004 ビギナートラックから』
トランザクションログファイルが 1 個のデータベースが受ける特別な恩恵について
1 つの SQL Server 2000 データベースが抱えているトランザクションログファイルについては、そのデータベースエンジンの仕様上、複数個のトランザクションログファイルを割り当てることができるようになっています。
例えば、データベース Sample のトランザクションログファイルを
C:\Log\Sample_1.ldf
D:\Log\Sample_2.ldf
のように、ファイル 2 個にすることができます。
しかし、ある特別な目的に従ってトランザクションログファイルの物理的な個数を決定しない限り、中小規模のデータベースであれば、トランザクションログファイルの個数は、1
個にするのが無難です。
もちろん、中小規模のすべてのデータベースのトランザクションログファイルを 1 個にした方が良いとは主張はできませんが、トランザクションログファイルが
1 個の場合は、ある特別な恩恵が受けられます。その恩恵を受けるためにトランザクションログファイルを 1 個にすることがあります。
その特別な恩恵とは、データベースをデタッチして得られたデータベースのデータファイルだけを使って、データベースを復元できることです。その時に、新しいトランザクションログファイルが作成されます。
簡単に言えば、デタッチして得られたデータベースのデータファイルをコピーしておくと、そのデータファイルがデータベースのバックアップの役割りを担っているといえるわけです。このように、データファイルだけからデータベースをアタッチによって復元できる機能は、トランザクションログファイルがもともと
1 個からなるデータベースに限定されます。
ここで、注意があります。それは、データベースサーバーのデータベースサービスを止めて、データベースの物理ファイルをコピーしてはいけないということです。
データファイルに書き込まれるデータは、Windows の OS 内部でキャッシュされることがあります。データベースサービスを止めると、OS
内部でキャッシュされたデータは、物理ファイルに書き込まれません。つまりデータファイルが部分的におかしな状態になることがあります。
しかしこのようなデータベースは、データベースサービス起動時に、トランザクションログファイルの内容に従って正しく修復されます。このような修復機能が働くため、データファイルは
OS 内部でキャッシュされても構わないわけです。
ところが、データファイルだけからアタッチ機能によってデータベースを構築する場合は、トランザクションログファイルが存在しないため、このような不完全なデータファイルでは復元ができません。そこで、データベースを必ずデタッチ命令によって切り離す必要があります。
このデタッチ機能は、データファイルを正しい状態であることを保証します。そのためトランザクションログファイルが無くても、データベースが復元できるようになります。
データベースのバックアップ機能の 1 つとして、ぜひデタッチ機能を理解しましょう。デタッチは、sp_detach_db ストアドプロシージャ、アタッチは、sp_attach_db
ストアドプロシージャを使います。
|