Автоматизированные резервные копии SQL Server

Каковы рекомендации программных продуктов для создания автоматизированных резервных копий баз данных SQL Server 2008?

Резервное копирование должно происходить без использования базы данных в автономном режиме/отладки.

Ответ 1

Я бы порекомендовал просто создать план обслуживания в SQL Server для обработки резервных копий, его можно настроить на резервное копирование в указанное место в указанное время без отключения баз данных и обработать инкрементную очистку резервной копии.

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

Ответ 2

Если вы используете SQL Server Express, вы не найдете пользовательский интерфейс для запуска периодических резервных копий.
В этом случае вам нужно запустить пакет, используя запланированные задачи 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

Ответ 3

Я боролся с этим какое-то время, потому что не было очевидно, как работать с режимом, который создавал файлы с разными именами, чтобы один запуск не переписывал другой. В конце он создал следующий пакетный файл 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:00 пополудни, с 16:00 до 20:00 каждый день).