SQL Server 2008データベースの自動バックアップを作成するためのソフトウェア製品の推奨事項は何ですか?
バックアップは、データベースをオフライン/デタッチせずに実行する必要があります。
SQL Serverでバックアップを処理するメンテナンスプランを作成することをお勧めします。データベースをオフラインにすることなく、指定した時間に指定した場所にバックアップするように構成でき、増分バックアップのクリーンアップを処理します。
SQL Server Expressを使用している場合、定期的なバックアップを実行するためのUIが見つかりません。
この場合、Windowsスケジュールタスクなどを使用してバッチを実行する必要があります。
SQL Serverにアクセスするのに十分な特権を持つユーザーを使用することを忘れないでください。
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S
(local)\SQLExpress -i D:\dbbackups\SQLExpressBackups.sql
BACKUP DATABASE MyDataBase1 TO DISK = N'D:\DBbackups\MyDataBase1.bak'
WITH NOFORMAT, INIT, NAME = N'MyDataBase1 Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
BACKUP DATABASE MyDataBase2 TO DISK = N'D:\DBbackups\MyDataBase2.bak'
WITH NOFORMAT, INIT, NAME = N'MyDataBase2 Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
ある実行で他の実行が上書きされないように、異なる名前のファイルを生成する体制をどのように操作するかが明らかではなかったので、しばらくの間これに苦労しました。最後に、次のWindowsバッチファイルを作成しました
:: Daily Backup of SQLSERVER databases
:: AKC 30 Apr 2011
::
:: Set environment variables
SET SQLCMDPASSWORD=xxxxxx
SET BACKUPDIR=C:\backups\db\
SET SCRIPTDIR=D:\Public\DB\batch_scripts\
:: Issue backup commands from a sql script
SQLCMD -U a_backup -S SERVER\SQLEXPRESS -i %SCRIPTDIR%daily_backup.sql
:: Tidy Up Old Backup Files (keep for 5 days)
FORFILES /P %BACKUPDIR% /S /M "*.bak" /D -5 /C "cmd /c del @path"
ここで、a_backupは、バックアップ権限を持つsqlserverログインです。対応するSQLは
DECLARE @thistime nvarchar(25);
DECLARE @filename nvarchar(255);
SET @thistime = CONVERT(nvarchar,GETDATE(),126);
SET @filename = "$(BACKUPDIR)" + N'PASL' + SUBSTRING(@thistime,1,10) + N'_DB.bak';
BACKUP DATABASE DB_live
TO DISK = @FILENAME
WITH INIT;
GO
古いファイルを削除する「FORFILES」コマンドの発見は、私にとって重要な発見でした。
同等のトランザクションログは次のとおりです。
:: Transaction Log Backups of SQLSERVER databases
:: AKC 30 Apr 2011
:: Run at reasonably spread out times of the day
:: Set environment variables
SET SQLCMDPASSWORD=xxxxxx
SET BACKUPDIR=C:\backups\db\
SET SCRIPTDIR=D:\Public\DB\batch_scripts\
:: Issue backup commands from a sql script
SQLCMD -U a_backup -S SERVER\SQLEXPRESS -i %SCRIPTDIR%tlog_backup.sql
sQLファイル
DECLARE @thistime nvarchar(25);
DECLARE @filename nvarchar(255);
SET @thistime = CONVERT(nvarchar,GETDATE(),126);
SET @filename = "$(BACKUPDIR)" + N'PASL' + SUBSTRING(@thistime,1,10) + SUBSTRING(@thistime,11,3) + N'_LOG.bak';
BACKUP LOG DB_live
TO DISK = @FILENAME
WITH INIT;
GO
データベースファイルはD:ドライブにあることに注意してください。これが、バックアップをC:ドライブに作成した理由です。
毎日のバックアップは、Windowsタスクスケジューラのジョブとして入力され、毎日午前4時に実行されます。トランザクションログのバックアップは、毎日午前8:00に実行され、4時間ごとに繰り返され、13時間後に終了します(毎日午前8時、午後4時、午後8時に実行されるため)。