SQL Server バックアップ コマンド (差分バックアップ)
この資料ではマイクロソフト SQL サーバーの差分バックアップについて説明します。 フルバックアップについては、SQL Server バックアップコマンド (フルバックアップ) を参照してください。
差分バックアップ (Differential Backup)
差分バックアップでは、最新のフルバックアップを作成した時点からの変更点のみの バックアップを作成することが可能です。
差分バックアップをとるコマンドは次の通り。キーワード、DIFFERENTIAL を指定します。
USE master;
GO
BACKUP DATABASE testdb
TO DISK = 'C:\work\mydb_042808_diff1.bak'
WITH INIT, DIFFERENTIAL;
データベースのリストアは、フルバックアップと差分バックアップの二つを使って行います。
順序は、はじめにフルバックアップをリストアし、続けて差分バックアップを適用します。 なぜなら、差分バックアップはある特定の時点からの 「差分」だからです。このためはじめに 「その時点」 のフルバックアップを最初にリストアする必要があります。
この際注意すべき点は、RESTORE DATABASE コマンドは、 バックアップファイルからデータベースをリストアした後、データベースをオンラインにすることです。
この状態ではさらなる差分リストアを受け付けませんから、オンライン中のデータベースに対して、差分バックアップの リストアを試みると次のようなエラーが発生する。
Msg 3117, Level 16, State 1, Line 1 The log or differential backup cannot be restored because no files are ready to rollforward. Msg 3013, Level 16, State 1, Line 1 RESTORE DATABASE is terminating abnormally.
したがって、このようなエラーを避けるために、差分バックアップをリストアする場合は、 フルバックアップのリストアを行った後に、そのデータベースがオンラインにならないように、NORECOVERY オプションを指定します。
USE master;
GO
RESTORE DATABASE mydb
FROM DISK='C:\work\mydb_042808_full.bak'
WITH NORECOVERY;
この後、最新の差分バックアップをリストアすれば OK です。
USE master; GO RESTORE DATABASE testdb FROM DISK='C:\work\mydb_042808_diff1.bak';
差分バックアップには、最新のフルバックアップ以降の全ての変更が含まれるので、 差分バックアップは複数あっても、最新のもののみをリストアすれば OK です。