如何快速複製 (clone) 20 TB SQL Server 資料庫 - 心得分享
幾個月前,Business Intelligence 部門跑來跟 DBA 討論,希望可以設定一個複製資料庫的排程,每天將約 20 TB 的資料庫複製到另一個 SQL Server 供數據科學家們 (Data Scientists) 使用。沒錯!是20 TB, 而且是每天的排程 (on a daily basis)。
設定 backup 與 restore 的複製排程聽起來相當容易,但問題是如果使用 SQL Server 內建的複原方法, 20 TB 資料庫的複製程序推算大概要花 26個小時才能完成,但每個人每一天都只有24小時,根本就不切實際。所以要達成使命,必須得借助 Storage Admin 的幫忙。
讓我們想一想如何在複製程序上利用 SAN storage snapshot 的 magic。通常 Storage Admin 從 SAN 建立 volume (create a volume), 從 volume 裁切 disk luns (cut disk luns),然後附加 disk luns (attach disk luns) 到 SQL Server 的虛擬主機 (VM) 上設定為儲存的空間(如 E:\ )。 Snapshot 1GB 的時間跟 snapshot 20 TB 的時間是相同的,大概需要30秒到60秒時間完成。在 Snapshot 之前,系統會將 SQL server 的 I/O 靜止 (freeze the I/O), 確認儲存拍照時沒有任何的資料庫活動運作,拍完照後再釋放 I/O,讓SQL Server 恢複正常使用。
了解了上述 storage 的概念後,現在把所有資料庫複製程序歸納如下。
首先,建立安裝 一個新的 destination (目的地) SQL server, 然後建立一個空的複製資料庫,複製資料庫的名稱跟檔案的名稱與 source (來源) 資料庫的名稱必須一樣,並設定好使用者與權限。(舉例來說,使用者資料庫的 MDF 跟 LDF 都在 E:.)
排程:
-
在 source (來源)SQL server, snapshot E:\ drive (包括 MDF 跟 LDF).
-
將步驟 1 得到的 snapshot 附加 (attach) 到 destination (目的地)SQL Server 覆蓋取代原有的 E:.
-
重啟 destination (目的地) SQL server service.
就這樣,這個 20 TB 資料庫每天的複製程序在30分鐘內搞定。