EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
--如果執行一下代碼 首先必須安裝WinRar 然後 在環境變量中---系統環境變量 Path 中 把Rar.exe 的路徑加進去 (如:C:/Program Files/WinRar/) 這樣就可以了,看好了 只需要加路徑。。。不需要Rar.exe;我們之前乾的這些步驟是爲了 下面紅色地方,因爲要執行Rar.exe 不然會報 不是內部程序 或者不是內部命令 。。。
--備份數據庫
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='H:/BackUpCost/Costing/CostDB_' -- 備份目錄及備份的文件頭
+replace(replace(replace(CONVERT(varchar(16), getdate(), 120 ),'-',''),' ',''),':',''); --數據路徑及 當前時間文件名
SET @strSqlCmd= @strSql+'.BAK' --備份文件的擴展名
BACKUP DATABASE [Costing] --要備份的數據庫名稱
TO DISK = @strSqlCmd WITH INIT
,NOUNLOAD
,NAME = N'MyDb 備份'
,NOSKIP
,STATS = 10
,NOFORMAT
go
--壓縮數據庫
Declare @TimeNow nvarchar(500)
set @TimeNow=replace(replace(replace(CONVERT(varchar(16), getdate(), 120 ),'-',''),' ',''),':','');
DECLARE @strSqlTo VARCHAR(1000)
DECLARE @strSqlFrom 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 @strSqlFrom='H:/BackUpCost/Costing/CostDB_' -- 備份目錄及備份的文件頭 從那個目錄備份及原始文件在哪
+ @TimeNow
SET @strSqlTo='H:/BackUpCost/CostingRAR/CostDB_' -- 備份目錄及備份的文件頭 備份到那個目錄下
+@TimeNow
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+' >> H:/BackUpCost/Costing/CostDB_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
EXEC master.dbo.XP_CMDSHELL @strSqlCmd
SET @strSqlCmd= 'Rar.exe A -R '+@strSqlTo+'.RAR '+@strSqlFrom+'.BAK >> H:/BackUpCost/Costing/CostDB_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
PRINT LEN(@strSqlCmd)
PRINT (@strSqlCmd)
EXEC master.dbo.XP_CMDSHELL @strSqlCmd --這個是真正備份的語句
SET @strSqlCmd= 'ECHO 壓縮日期: '+CONVERT(VARCHAR(20),GETDATE(),120)+' '+@strWeekDay+' >> H:/BackUpCost/Costing/CostDB_'+CONVERT(CHAR(6),DATEADD(week,@timeDateDiff,0),112)+'.txt'
EXEC master.dbo.XP_CMDSHELL @strSqlCmd