如何让SQL Server数据库自动备份并压缩成rar文件

1、  先开启xm_cmdshell服务

xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。由于xp_cmdshell 可以执行任何操作系统命令,所以一旦SQL Server管理员帐号(如sa)被攻破,那么攻击者就可以利用xp_cmdshell 在SQL Server中执行操作系统命令,如:创建系统管理员,也就意味着系统的最高权限已在别人的掌控之中。由于存在安全隐患,所以在SQL Server 2005中, xp_cmdshell 默认是关闭的。 

 

两种方式启用xp_cmdshell 

  1.打开外围应用配置器—> 
  功能的外围应用配置器—> 
  实例名Database Enginexp_cmdshell—> 启用

 

2.sp_configure 
  --开启xp_cmdshell部分
--------------------------------------------------
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO


--通过xp_cmdshell执行shell命令的部分
--------------------------------------------------
Exec xp_cmdshell 'bcp '
GO


--关闭xp_cmdshell部分
-----------------------------------------------------
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 0
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

 

3、新建立一个作业,名称命名为“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='E:\DataBackup\LiangJiaLun219'  -- 备份目录及备份的文件头

 +CONVERT(CHAR(8),DATEADD(week, @timeDateDiff,0),112)  -- 完全备份日期

 +'_0100'    -- 完全备份时间

 +'完全备份'

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

BACKUP DATABASE [LiangJiaLun219]

 TO  DISK = @strSqlCmd WITH INIT

 ,NOUNLOAD

 ,NAME = N'LiangJiaLun219 备份'

 ,NOSKIP

 ,STATS = 10

 ,NOFORMAT

 操作如图一: 

                 

 

4、 然后开始执行对数据库的压缩,在步骤中再新建一个作业,步骤名为“压缩数据库”,然后在命令框中输入如下的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='E:\DataBackup\LiangJiaLun219'  -- 备份目录及备份的文件头

 +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+'  >> E:\DataBackup\CompressDataBase\LiangJiaLun219'+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 >> E:\DataBackup\CompressDataBase\LiangJiaLun219'+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+'  >> E:\DataBackup\CompressDataBase\LiangJiaLun219'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'

EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT

 

完成后我们可以看到操作步骤的对话框,如图三,数据完全备份的步骤:

 

 

6、设定计划任务

 

 

7、如果执行一下代码  首先必须安装WinRar 然后  在环境变量中---系统环境变量 Path 中 把Rar.exe 的路径加进去 (如:C:/Program Files/WinRar/) 这样就可以了,看好了 只需要加路径。。。不需要Rar.exe;我们之前干的这些步骤是为了  下面红色地方,因为要执行Rar.exe  不然会报  不是内部程序 或者不是内部命令 。。。

 

posted on 2014-08-07 10:30  会写字的程序员  阅读(4718)  评论(0编辑  收藏  举报

导航