代码之家  ›  专栏  ›  技术社区  ›  blu

SQL Server自动备份[已关闭]

  •  27
  • blu  · 技术社区  · 15 年前

    对于创建SQL Server 2008数据库的自动备份,软件产品有哪些建议?

    3 回复  |  直到 15 年前
        1
  •  71
  •   Luke Girvin Nathan Bedford    6 年前

    SQL Server Express ,您将找不到运行定期备份的UI。

    不要忘记使用具有足够权限的用户来访问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
    
        2
  •  17
  •   cmsjr    15 年前

    我建议只在SQL Server中创建一个维护计划来处理备份,它可以配置为在指定时间备份到指定位置,而无需使数据库脱机,并将处理增量备份清理。

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

        3
  •  10
  •   akc42    13 年前

    我为此挣扎了一段时间,因为不清楚如何使用一个产生不同名称文件的机制,以便一次运行不会覆盖另一次运行。最后,它创建了以下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"
    

    其中,_备份是我的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:drive上,这就是为什么我将备份放在C:drive上。

    每日备份作为作业输入到Windows任务计划程序中,每天在凌晨4:00运行。事务日志备份设置为每天上午8:00运行,每4小时重复一次,13小时后结束(使其每天在中午8:00、下午4:00和晚上8:00运行)