SQLServer 多點及時備份技巧,sqlserver多點備份

來源:互聯網
上載者:User

SQLServer 多點及時備份技巧,sqlserver多點備份

為了保證資料庫的安全性,我們都會規劃資料庫的容災策略,包括本地備份、異地備份、raid,或者使用高可用性(如 記錄傳送、鏡像、複製等)進行異地容災。由於 SqlServer 資料庫的備份只有一個備份策略(如 完整-差異-日誌),對某個資料庫中,只建立一個完整的策略,不要建立多個,否則備份鏈對不上,備份各在一方。對於備份,一般使用完整備份+差異備份+記錄備份,或者 完整備份+差異備份+記錄傳送,但是備份只有一個檔案。為了在異地也儲存有相同的備份,SqlServer 有幾種參數可設定多地儲存,如 MIRROR TO ,COPY_ONLY ,但只對完整備份有效。所有其他情況下,都使用 windows 命令拷貝到其他地方做冗餘儲存。


以前也用過一種方法,拷貝N天內的資料到其他地方(參考 forfiles 和 xcopy 在windows下拷貝N天內更改過的檔案),但是使用windows 作業的方法拷貝,並不及時。這裡就介紹一種方法,及時異地儲存到網路路徑中,也就是Database Backup完成後,立即把檔案拷貝到異地中。



在一個檔案夾中,有眾多的備份檔案,怎麼篩選出剛剛備份出來的檔案呢? 

用 windows 命令批處理應該可以完成,但是出來會太麻煩。那就在 SqlServer 尋找吧!~

SqlServer 中每個備份都會有記錄,備份的名稱、路徑、時間 等待都可以從備份曆史中找出。


以master 完整備份為例:

SELECT TOP(1) media_set_id ,nameFROM msdb.dbo.backupset WHERE database_name = 'master' and type = 'D'ORDER BY backup_finish_date DESCSELECT physical_device_name FROM msdb.dbo.backupmediafamily WHERE media_set_id = 2048


這些備份是維護計劃自動備份的,每個備份組中只有一個備份檔案,這就可以唯一確定一個檔案了!~

順便說明一下,backupset 中的 name 有時與實際的物理檔案名稱不匹配,所以不用該名字。但是 backupset 中有時間資訊,就按備份完成時間排序取第一條最新的。

註:backupset 中的欄位 type 表示不同的備份類型,D = 資料庫; I = 差異資料庫 ;L = 日誌 。(參考backupset)


因此,就可以確定 master 最新的完整備份檔案了!

SELECT physical_device_name FROM msdb.dbo.backupmediafamily where media_set_id =(SELECT TOP(1) media_set_id FROM msdb.dbo.backupset WHERE database_name = 'master' and type = 'D'ORDER BY backup_finish_date DESC)

為了能在 SqlServer 中更方便管理,檔案的拷貝也在資料庫中執行,需要啟用系統命令 xp_cmdshell。

exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'xp_cmdshell',1reconfigure

對於異地包括,需要建立網路映射:

exec master.dbo.xp_cmdshell 'net use \\IP\yourPath "password" /user:IP\user'


最終的拷貝指令碼如下,在SqlServer使用 xp_cmdshell  進行拷貝:

DECLARE @OldPath NVARCHAR(200)DECLARE @NewPath NVARCHAR(100)DECLARE @cmdSQL NVARCHAR(300)SET @NewPath = N'\\192.168.1.111\master\'SELECT @OldPath = physical_device_name FROM msdb.dbo.backupmediafamily WHERE media_set_id =(SELECT TOP(1) media_set_id FROM msdb.dbo.backupset WHERE database_name = 'master' and type = 'D'ORDER BY backup_finish_date DESC)SET @cmdSQL = N'xcopy "'+@OldPath+'" "'+@NewPath+'" /y '--SELECT @cmdSQLEXEC MASTER.DBO.XP_CMDSHELL @cmdSQL

命令完成了,該放在哪裡執行呢? 當然是Database Backup作業的下一步了!~ 哈哈 O(∩_∩)O 自言自語~~


開啟維護計劃,選擇控制流程“ 執行T-SQL語句”的任務,將上面的語句粘貼到裡面中,作為系統資料庫備份後的下一步,完成!~



執行看看!~這樣備份就比較快了!~(同樣試試其他資料庫的 完整備份+差異備份+記錄備份)




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.