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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM