SQL Server 2005 Express Editionのデータベースを自動バックアップする

Introduction

SQL Server 2005 Express EditionではSQL Server Agentが付属しないため、定期的に自動バックアップを行うにはWindowsタスクを使用する必要がある。以下ではその手順について簡単にまとめる。ただし、以下ではSQL Server 2005 Express EditionではなくSQL Server 2005 Express Edition with Advanced Servicesをインストールしている場合について述べる。このエディションにはSQL Server 2005 Management Studio Express (SSMSE) というグラフィック管理ツールが付属している。

SQL Server側での準備

SQL Server 2005 Express Editionではデータベースのデフォルトの復旧モデルが「単純」になっている。単純復旧モデルの場合、定期的にログを切り捨てる手間が要らない代わりに、もし障害が発生した場合に前回の完全バックアップ以降の変更が失われる可能性があるという欠点がある。トランザクションログのバックアップを定期的に行うために、まずこの復旧モデルを「完全」に変更しておく。SSMSEを起動し(Windows Server 2008以降の場合、アイコンを右クリックして「管理者として実行」を選択して起動する必要がある)、データベースのプロパティダイアログボックスを開いて復旧モデルを「完全」に変更する。

Changing the recovery model to Full.
Fig.1 Use the full recovery model

続いてバックアップデバイスを定義する。SSMSEの「サーバーオブジェクト」->「バックアップデバイス」を右クリックし、「新しいバックアップデバイス...」を選択する。表示されるダイアログボックスでバックアップデバイスを定義する。ここではMyBackupという名前にする。保存先のフォルダにアクセスできることを確認するため、一度バックアップを手動で実行してみるとよい。それには、「サーバーオブジェクト」->「バックアップデバイス」を右クリックし、「データベースのバックアップ...」を選択する。すると「データベースのバックアップ」ダイアログボックスが表示される。ダイアログボックス下部のバックアップ先の一覧にデフォルトで入っているファイル名があれば削除し、「追加」ボタンをクリックする。「バックアップ先の選択」ダイアログボックスが表示されるので、先ほど作成したバックアップデバイス(ここでMyBackup)を選択する。アクセスエラーが起きた場合、保存先のフォルダのアクセス権を確認する。(SQLServer2005MSSQLUser$Machine$SQLEXPRESSといった名前のグループに対し書き込みアクセス権があるか確認する。)

Defining a backup device
Fig.2 Defining a new backup device

タスクの作成

次はコマンドファイルとそれを実行するタスクの作成である。まず、次のような完全バックアップを行うコマンドを記述したテキストファイルを、たとえば「FullBackup.sql」といった名前で保存する。
BACKUP DATABASE Northwind TO MyBackup WITH INIT
ここで「Northwind」はバックアップをとるデータベースの名前、WITH INITはバックアップデバイスを初期化(上書き)することを意味する。コマンドパラメータは用途に応じて追加・変更する。テキストファイルに保存する前に、SSMSEのクエリウインドウでコマンドが正常に動作するか確認するとよいだろう。

「 コントロールパネル\タスク(Windows Server 2003の場合)」または「コントロールパネル\管理ツール\タスクスケジューラ(Windows Server 2008の場合)」からタスクを新規に作成する。その際、「実行するファイル名」には次のように入力する。(Windows Server 2008の場合はコマンド名(SQLCMD)と引数を別に入力する。)
SQLCMD -S Server\SQLEXPRESS -E -i "C:\FullBackup.sql"
Server\SQLEXPRESSのところは接続するSQL Serverのインスタンス名である。インスタンス名と"C:\FullBackup.sql"のところはもちろん実際の環境に合わせて修正すること。-Eは接続にWindows認証を使うことを示す。タスクを実行するユーザーアカウントは、SQL Serverへの接続権限を持つのはもちろん、データベースのバックアップ権限も合わせ持つアカウントである必要がある。バックアップのスケジュールはデータベースのサイズに応じて適当に決める(週1回など)。 また、とりわけWindows Server 2008の場合、「ユーザーがログオンしているかどうかにかかわらず実行する」ように設定するのを忘れないように。

トランザクションログのバックアップも同様に、
BACKUP LOG Northwind TO MyBackup
といったコマンドを「LogBackup.sql」といった名前のテキストファイルに保存し、タスクで定期的に実行させるようにする。通常、ログのバックアップの頻度は完全バックアップの頻度より高くする。

以上は最低限の設定だが、状況によっては差分バックアップなども取り入れる場合もあるであろう。言うまでもないが念のために付け加えると、バックアップは元のデータベースファイルが保存されているボリュームとは物理的に異なるボリューム上に保存しなければならない。また、復旧モデルを「完全」にしている場合、必ずログバックアップも行う必要がある。完全バックアップのみではトランザクションログの切り捨てが行われないからである。