T-SQL を使用して、バックアップとリストアを実行するサンプルを掲載します。バックアップファイルはSSIS (SQL Server Integration Service) を使用してパッケージを作成する方法があります。その場合は Visual Studio の SSIS プロジェクトから作成します。
動作確認は SQL Server 2005 Developer Edition で行い、T-SQL は SQL Server Management Studio 上で実施しています。 sql ファイルを作成してsqlcmd コマンドを使用しても動作すると思います。
1. バックアップ
1.1 データベースのバックアップ
ファイルにバックアップを作成する方法を掲載します。 BACKUP DATABASE ステートメントを使用してバックアップを作成します。オプションを指定しない限り、既存のバックアップファイルが存在する場合は、バックアップセットがファイルに追記されます。バックアップセットの有効期間を日付や期間で設定することもできます。
-- 完全バックアップを取得します
BACKUP DATABASE Component
TO DISK = 'C:\work\Backup20090506.bak'
-- バックアップファイルがすでに存在する場合は
-- バックアップセットが追記されます
BACKUP DATABASE Component
TO DISK = 'C:\work\Backup20090507.bak'
WITH MEDIANAME = 'バックアップメディア名'
,MEDIADESCRIPTION = 'バックアップメディアの説明'
,NAME = 'バックアップセット名'
,DESCRIPTION = 'バックアップセットの説明'
-- 有効期限を2009/5/14までとしてでバックアップセットを作成する。
BACKUP DATABASE Component
TO DISK = N'C:\work\Backup20090508.bak'
WITH MEDIANAME = N'バックアップメディア名'
,MEDIADESCRIPTION = N'バックアップメディアの説明'
,NAME = N'バックアップセット名'
,DESCRIPTION = 'バックアップセットの説明'
,EXPIREDATE = N'05/14/2009 00:00:00'
-- 有効期間を30日としてバックアップセット作成
BACKUP DATABASE Component
TO DISK = N'C:\work\Backup20090508.bak'
WITH MEDIANAME = N'バックアップメディア名'
,MEDIADESCRIPTION = N'バックアップメディアの説明'
,NAME = N'バックアップセット名'
,DESCRIPTION = 'バックアップセットの説明'
,RETAINDAYS = 30
複数ファイルに分割してバックアップセットを作成することもできます。また、MIRROR TO を使用することで、ミラー化されたバックアップセットを作成できます。ミラー化することで、冗長性を持たせることができます。ミラー化した場合、分割したバックアップセットと異なり、一つのバックアップセットで復元できます。分割バックアップとミラー化は同時にしてできます。同時に使用することでメディアの冗長化とバックアップパフォーマンスの向上を行うことができます。
-- 複数ファイルに分割してバックアップセットを作成する
BACKUP DATABASE Component
TO DISK = N'C:\work\Backup20090508_1.bak'
,DISK = N'C:\work\Backup20090508_2.bak'
,DISK = N'C:\work\Backup20090508_3.bak'
-- ミラー化されたメディア セットの作成
BACKUP DATABASE Component
TO DISK = N'C:\work\CompBackup1.bak'
MIRROR TO DISK = N'C:\work\CompBackupMirror1.bak'
MIRROR TO DISK = N'C:\work\CompBackupMirror2.bak'
WITH FORMAT
通常のバックアップの順序に影響を与えないように、その時点のバックアップを作成するには COPY_ONLY オプションを指定してバックアップします。
BACKUP DATABASE Component
TO DISK = N'C:\work\CompBackup.bak'
WITH COPY_ONLY
完全バックアップをとった後は、データベースの差分バックアップをとることができます。差分バックアップはDIFFERENTIAL オプションを指定します。
BACKUP DATABASE Component
TO DISK = N'C:\work\CompBackup.bak'
WITH DIFFERENTIAL
バックアップデバイスをSQL Server に登録することで、バックアップ時にファイルやテープを指定するのではなく、バックアップデバイスを指定できるようになります。バックアップの登録には sp_addumpdevice を使用します。登録されたバックアップデバイスは sys.backup_devices カタログビューから参照できます。バックアップデバイス情報の表示には、 sp_helpdevice, 削除には sp_dropdevice を使用します。
-- バックアップデバイスをSQL Server 2005 に登録する
sp_addumpdevice @devtype = 'disk'
,@logicalname = N'ComponentBackup'
,@physicalname = N'C:\work\CompBack.bak'
-- 追加されたバックアップデバイスを確認
select *
from sys.backup_devices
-- バックアップデバイス情報を検索
EXEC sp_helpdevice 'ComponentBackup'
-- バックアップデバイスに対してバックアップを行う
BACKUP DATABASE Component
TO ComponentBackup
-- バックアップデバイスを削除する
sp_dropdevice 'ComponentBackup'
バックアップデバイスはManagement Studio 上からも、バックアップ、リストア時に指定できます。バックアップデバイス指定画面でバックアップメディアにバックアップデバイスを選択することで指定します。
1.2 トランザクションログのバックアップ
BACKUP LOG ステートメントを使用してトランザクションログのバックアップを作成します。指定可能なオプションは BACKUP DATABASE とほぼ同じですが、 NO_TRUNCATE, NORECOVERY, STANDBY などのオプションが使用できます。詳細は Books Online を参照してください。
また、サンプルでは、 DBCC SHRINKDATABASE を使用して、ログファイルを圧縮するサンプルも掲載しています。
-- トランザクションログのバックアップ
-- 使用できるオプションはBACKUP DATABASE と同じだが
-- NO_TRUNCATE, NORECOVERY, STANDBYなどがあります。
BACKUP LOG Component
TO DISK = N'C:\work\CompBackup.trn'
-- データベース、トランザクションログ
-- のバックアップが完了したら、トランザクション
-- ログを圧縮する
DBCC SHRINKDATABASE(N'Component')
1.3 バックアップ情報の取得
バックアップメディアに対して、 RESTORE LABELONLY , RESTORE FILELISTONLY, RESTORE HEADERONLY, RESTORE VERIFYONLY ステートメントを使用するとバックアップセットの情報を取得できます。
-- バックアップ メディアについての情報が含まれている結果セットを返します。 -- バックアップ メディアは、指定したバックアップ デバイスで識別されるメディアです。 RESTORE LABELONLY FROM DISK = N'C:\work\Backup1.bak' -- バックアップ セットに保存されているデータベースとログ ファイルのリスト -- を含んだ結果セットを返します。 RESTORE FILELISTONLY FROM DISK = N'C:\work\Backup1.bak' -- 特定のバックアップ デバイス上にあるすべてのバックアップ セットについて、 -- すべてのバックアップ ヘッダー情報を含む結果セットを返します。 RESTORE HEADERONLY FROM DISK = N'C:\work\Backup1.bak' -- 復元せずにバックアップを確認して、バックアップ セットが完全なものであること、 -- およびバックアップのすべてが読み取り可能であることを確認します RESTORE VERIFYONLY FROM DISK = N'C:\work\Backup1.bak'
2. リストア
バックアップセットからデータベースを復元するサンプルを掲載します。リストアを行うにはRESTORE DATABASE ステートメントを使用します。復元後のデータベースで使用する、データベースファイルを移動する場合は、MOVE TO オプションを使用します。
-- データベースをリストアする -- バックアップメディアの1番目のバックアップセット -- を既存のデータベースを上書きするモードで復元 USE master; RESTORE DATABASE Component FROM DISK = N'C:\work\BackupTest.bak' WITH FILE = 1, REPLACE
複数ファイルに分割されたバックアップファイルをリストする場合は、FROM DISK で複数のバックアップファイルを指定します。
完全バックアップからリストアを行い、トランザクションログからリストアを行う場合は,完全バックアップをNORECOVERY オプションで復元し、トランザクションログを RECOVERY オプションを使用してリストアします。
USE master;
-- データベースのリストア
-- トランザクションのリストアを行うサンプル
BACKUP DATABASE Component
TO DISK = N'C:\work\BackupTest.bak'
BACKUP LOG Component
TO DISK = N'C:\work\BackupTest.trn'
RESTORE DATABASE Component
FROM DISK = N'C:\work\BackupTest.bak'
WITH FILE = 1, REPLACE, NORECOVERY
-- トランザクションログのリストア
RESTORE LOG Component
FROM DISK = N'C:\work\BackupTest.trn'
WITH FILE = 1, RECOVERY, REPLACE
最後に、差分バックアップを含む場合のリストアサンプルです。完全バックアップ、差分バックアップ、トランザクションログの順にリストアを実施します。
-- 差分バックアップをリカバリする場合
BACKUP DATABASE Component
TO DISK = N'C:\work\Backup1.bak'
BACKUP DATABASE Component
TO DISK = N'C:\work\Backup1.bak'
WITH DIFFERENTIAL
BACKUP LOG Component
TO DISK = N'C:\work\Backup1.bak'
RESTORE DATABASE Component
FROM DISK = N'C:\work\Backup1.bak'
WITH FILE = 1, REPLACE, NORECOVERY
RESTORE DATABASE Component
FROM DISK = N'C:\work\Backup1.bak'
WITH FILE = 2, NORECOVERY
RESTORE LOG Component
FROM DISK = N'C:\work\Backup1.bak'
WITH FILE = 3, RECOVERY
複数ファイルに分割されたバックアップファイルをリストする場合は、FROM DISK で複数のバックアップファイルを指定します。
3.まとめ
サンプルには記載していませんが、リストアはファイルグループ単位や、部分(PARTIAL) バックアップなども行うことができます。詳細はBooks Online を参照してください。
説明は以上です。誤り、指摘点などがありましたらご連絡ください。