我们通常在维护数据库的时候
,都会建立一个备份的机制
,在
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:DataBaseBackDataMyDb_' -- 备份目录及备份的文件头
+CONVERT(CHAR(8),DATEADD(week, @timeDateDiff,0),112) -- 完全备份日期
+'_0100' -- 完全备份时间
+'完全备份'
SET @strSqlCmd= @strSql+'.BAK' --备份文件的扩展名
BACKUP DATABASE [MyDb]
TO DISK = @strSqlCmd WITH INIT
,NOUNLOAD
,NAME = N'MyDb 备份'
,NOSKIP
,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:DataBaseBackDataMyDb_' -- 备份目录及备份的文件头
+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:DataBaseBackDataCompressDataBaseMyDb_'+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:DataBaseBackDataCompressDataBaseMyDb__'+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:DataBaseBackDataCompressDataBaseMyDb_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
EXEC master.dbo.XP_CMDSHELL @strSqlCmd,NO_OUTPUT