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

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

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

     我们通常在维护数据库的时候,都会建立一个备份的机制,在SQL Server中,我们就可以通过如下的方法来实现:

  如果SQL Server代理没有启动,我们先把其启动,然后新建立一个作业,名称命名为“MyDb完全备份”,在分类下面选择“数据库维护”,然后新建立作业第一个步骤,步骤名为“对数据进行完全备份”,然后在命令框中输入如下的SQL代码:

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'    -- 完全备份时间
 +'完全备份'

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

BACKUP DATABASE [MyDb]
 TO  D
ISK = @strSqlCmd WITH INIT
 ,NOUNL
OAD
 ,NAME = N'MyDb 备份'
 ,NOSK
IP
 ,STATS = 10
 ,NOFORMAT

  操作如图一:

建立作业对数据库进行完全备份

  图一 建立作业对数据库进行完全备份
  然后开始执行对数据库的压缩,在步骤中再新建一个作业,步骤名为“压缩数据库”,然后在命令框中输入如下的SQL代码:

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'    -- 完全备份时间
 +'完全备份'

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