首页 > 新闻系统 > 编程天地 > 文章正文

如何让SQL Server数据库自动备份并压缩

2008-04-15 10:57:57 来源:IT专家网 作者: 松晨 点击:
我们通常在维护数据库的时候,都会建立一个备份的机制,本文详细介绍了让SQL Server数据库自动备份及进行压缩的步骤。

  操作如图二:

建立作业对数据进行压缩

  图二 建立作业对数据进行压缩
  完成后我们可以看到操作步骤的对话框,如图三:

数据完全备份的步骤

  图三 数据完全备份的步骤

  我们对照上图,注意两点,第一个是步骤1“成功时”这一列的显示,当成功的时候转到下一步,“失败时”当失败的时候失败后退出,步骤2“成功时”当成功的时候成功后退出,“失败时”当失败时失败后退出。确保两个步骤对数据操作的正常。

  再执行“调度”一栏,主要实现在什么时候执行这些作业,我们定在每周日一点的时候开始执行,如图四:

建立调度

  图四 建立调度
  这样就可以建立好对数据库的整个完全备份了。

  有时我们数据在遭到破坏的时候,而在恢复到上次的整个备份时,就会产生很多丢失的数据了,这时我们就必须还得建立另外一种备份的机制—差异备份。

  步骤还和上面一样,我们建立一个作业,命名为“MyDb差异备份”,在步骤里面同样是建立两个步骤,分别是差异备份和差异压缩,步骤一在命令框中输入内容如下:

DECLARE @strSql   VARCHAR(1000)
 ,@strSqlCmd VARCHAR(1000)
 ,@timeDateDiff INT
SET @timeDateDiff = DATEDIFF(week,0,GETDATE())
SET @timeDateDiff = CASE DATEPART(WEEKDAY,GETDATE())
 WHEN 1 THEN @timeDateDiff -1
 ELSE @timeDateDiff END
SET @strSql='D:\DataBase\BackData\MyDb_'  -- 备份目录及备份的文件头
 +CONVERT(CHAR(8),DATEADD(week, @timeDateDiff,0),112)  -- 完全备份日期
 +'_0100'    -- 完全备份时间
 +'差异备份'
 +'_'+CONVERT(CHAR(8),GETDATE(),112) -- 差异备份日期
 +'_0300'    -- 差异备份时间

SET @strSqlCmd= @strSql+'.BAK'    --备份文件的扩展名

BACKUP DATABASE [webEIMS2008]
 TO  DISK = @cSqlCmd WITH INIT
 ,NOUNLOAD
 ,DIFFEREN
TIAL
 ,NAME = N'MyDb差异备份'
 ,NOSKIP
 ,STATS = 10
 ,NOFORMAT

  我们可以看到,差异备份除了文件名命名格式不一样外,就在备份执行SQL语句时增加了了下DIFFERENTIAL参数,然后再执行。

  步骤二在命令框中执行如下:
  
DECLARE @strSql   VARCHAR(1000)
 ,@strSqlCmd VARCHAR(1000)
 ,@timeDateDiff INT
 ,@strWeekDay VARCHAR(20)

SET @timeDateDiff= DATEDIFF(week,0,GETDATE())
SET @timeDateDiff= CASE DATEPART(WEEKDAY,GETDATE())
 WHEN 1 THEN @timeDateDiff-1
 ELSE @timeDateDiff END
SET @strSql='D:\DataBase\BackData\MyDb_'   -- 备份目录及备份的文件头
 +CONVERT(CHAR(8),DATEADD(week,@timeDateDiff,0),112)  -- 完全备份日期
 +'_0100'    -- 完全备份时间
 +'差异备份'
 +'_'+CONVERT(CHAR(8),GETDATE(),112) -- 差异备份日期
 +'_0300'    -- 差异备份时间


SET @strWeekDay= CASE DATEPART(WEEKDAY,GETDATE()) WHEN 1 THEN '星期天'
  WHEN 2 THEN '星期一'
  WHEN 3 THEN '星期二'
  WHEN 4 THEN '星期三'
  WHEN 5 THEN '星期四'
  WHEN 6 THEN '星期五'
  WHEN 7 THEN '星期六' END

SET @strSqlCmd= 'ECHO 压缩开始日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+'  >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

SET @strSqlCmd= 'RAR.EXE A -R '+@strSql+'.RAR '+@strSql+'.BAK >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
PRINT LEN(@strSqlCmd)
PRINT (@strSqlCmd)
EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

SET @strSqlCmd= 'ECHO 压缩结束日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+'  >> D:\DataBase\BackData\CompressDataBase\MyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

9 7 3 1 2 3 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203