天天看點

使用資料庫內建程式實作異地備份

作者:飄葉帶你漲知識

大聖歸來,不負衆望!因為工作原因,一直在忙一些其他的事情,有好久沒有在這個号上面更新文章了,今天給大家說聲抱歉。以後我會經常更新,絕對不辜負我這1000多關注者,哈哈哈。 好了,廢話不多說,進入正題。

今天主要講的是sqlserver 備份問題,大家最常用的方式應該就是手動備份,或利用資料庫的任務建立一個自動備份的定時任務。但是是有弊端的,就是如果資料庫出現故障,進不了系統會很難解決的,因為這個問題我研究了 微軟官方文檔,就是利用資料庫程式集來實作資料庫的定時備份,并上傳到指定伺服器。大概思路是這樣的:

資料庫異地備份基本原理:

1、資料庫內建程式集代碼長這樣

使用資料庫內建程式實作異地備份

2、資料庫程式集管理軟體,友善開啟資料庫CLR程式集支援,建立證書、秘鑰。無證書的程式集不能操作IO和使用多線程或異步程式設計。使用sql 代碼也可以開啟以上功能。

使用資料庫內建程式實作異地備份

3、開發生成的程式集就是個DLL檔案(第一個圖的代碼生成的檔案)

使用資料庫內建程式實作異地備份

4、資料庫程式在資料庫程式集中進行建立。以存儲過程的形式展現,友善調用。

使用資料庫內建程式實作異地備份

5、建立一個作業。計劃中使用重複執行 間隔根據自己需要建立。如每天一次 或 每N 小時執行一次。指令中傳入 上傳的位址、賬号、密碼、路徑、協定。是否保留機備份等

使用資料庫內建程式實作異地備份

6、本地備份的資料(之前我測試的備份)

使用資料庫內建程式實作異地備份

7、傳入到群晖伺服器中備份(由于這個程式集寫入了支援SMB和FTP 兩種協定 群晖都支援)。

使用資料庫內建程式實作異地備份

8、傳輸時的一個進度展示日志。路徑D:/dbbackup/log/資料庫名稱.log,如果作業中傳入的參數不正确 ,會在D:/dbbackup/路徑内生成一個backuperror的日志檔案。

使用資料庫內建程式實作異地備份

9、官方安全性解釋

程式集內建原理:基于CLR程式開發。SQLSERVER資料庫自身支援內建,功能預設處于關閉狀态,開啟CLR 才可以使用程式集。程式集的類型:安全,通路外部,無限制。安全的程式集隻能使用增、删、改、查。操作于資料庫内部,代碼中試圖執行的如何操作IO 的代碼都會傳回異常。通路外部的程式集:加入了操作IO(如在伺服器中建立檔案,通路系統檔案等)的權限。無限制:加入了多線程、和異步的權限。

程式中所有代碼必須是基于官方給定的基礎類庫去開發,代碼中如果引用了第三方程式包,程式執行時會傳回異常。(經測試确實是這樣,代碼必須全部手敲)

微軟官方給出的類庫。

使用資料庫內建程式實作異地備份

根據官方文檔檢視使用 操作IO 和 多線程的程式時有兩種方法,一種是将資料庫置于不安全的狀态(測試階段);另一種就是使用證書形式。是以我寫的備份程式集采用了證書形式。

秘鑰證書作用。建立證書是映射一個登陸憑證。確定資料庫的後續程式集安全性,開發的所有程式集凡是操作IO和多線程 必須使用和登陸憑證使用相同的秘鑰證書才能建立到資料庫程式集中,證書不同無法建立。

官方部分說明

使用資料庫內建程式實作異地備份
使用資料庫內建程式實作異地備份

好了 這篇文章總算是寫完了。整個流程下來呢,隻有第一個圖的代碼是最關鍵的,那個生成的dll檔案是資料庫備份核心插件。

寫這篇文章,也是出了一個新意的思路,歡迎大神來噴。

繼續閱讀