有哪些软件产品推荐用于创建SQL Server 2008数据库的自动备份?
备份应在不使数据库离线/脱机的情况下进行。
有哪些软件产品推荐用于创建SQL Server 2008数据库的自动备份?
备份应在不使数据库离线/脱机的情况下进行。
不要忘记使用拥有足够权限访问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
我建议在SQL Server中创建一个维护计划来处理备份,可以配置为在指定时间备份到指定位置,而不会使数据库脱机,并且将处理增量备份的清理。
我遇到了一些困难,因为不清楚如何处理生成具有不同名称的文件的程序,以便一次运行不会覆盖另一个。最终创建了以下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是我的SQL Server登录带有备份权限。相应的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:00am 运行。事务日志备份被设置为每天在 8:00am 运行,每 4 小时重复一次,在 13 小时后完成(导致它在每天的上午 8 点、中午 12 点、下午 4 点和晚上 8 点运行)。