web-dev-qa-db-ja.com

SQL Server自動バックアップ

SQL Server 2008データベースの自動バックアップを作成するためのソフトウェア製品の推奨事項は何ですか?

バックアップは、データベースをオフライン/デタッチせずに実行する必要があります。

27
blu

SQL Serverでバックアップを処理するメンテナンスプランを作成することをお勧めします。データベースをオフラインにすることなく、指定した時間に指定した場所にバックアップするように構成でき、増分バックアップのクリーンアップを処理します。

http://msdn.Microsoft.com/en-us/library/ms189715.aspx

17
cmsjr

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

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
68
Eduardo Molteni

ある実行で他の実行が上書きされないように、異なる名前のファイルを生成する体制をどのように操作するかが明らかではなかったので、しばらくの間これに苦労しました。最後に、次の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時に実行されるため)。

9
akc42