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 不然會報 不是內部程序 或者不是內部命令 。。。