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 です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説