帶日志傳送的SQL Server災難恢復
譯文【51CTO.com快譯】目前,業(yè)界有著許多種災難恢復(disaster recovery,DR)技術,其中包括:數據庫鏡像、集群、復制等解決方案。而日志傳送方式是一種更簡單、更易于配置與維護的方法。本文將和您討論帶有日志傳送的SQL Server災難恢復步驟。在討論具體配置之前,讓我們先來了解一下日志傳送的基本概念。
帶有日志傳送的災難恢復方案
日志傳送主要通過維護備用服務器上的備份,并按需接替主服務器,以提高數據庫的整體可用性。也就是說,在主數據庫由于受災而不可用時,您可以通過手動的方式,將備用數據庫連上線,繼續(xù)提供原有的服務。
為了給數據庫配置日志傳送,SQL Server會創(chuàng)建如下三個代理作業(yè),來自動執(zhí)行備份(backup)、復制(copy)和還原(restore)操作:
- 第一個作業(yè)工作在主實例上。它會在主數據庫上去備份事務日志(transaction log)。
- 第二個作業(yè)工作在備用服務器上。它將日志備份從主服務器復制到備用服務器。
- 第三個作業(yè)也工作在備用服務器上。它不但能夠恢復日志的備份,而且可以替換備用數據庫上的日志條目。
雖然我們配置日志傳送并不難,但在實現(xiàn)之前,需要注意如下方面:
- 在數據庫級別進行保護:如果您只希望在災難發(fā)生時,僅保護少量的數據庫,那么該級別是足夠的。不過,如果您想要在SQL Server實例級別,保存大量的數據庫,那么單純的日志傳送方案是遠遠不夠的。
- 需要在備用服務器上手動啟動故障轉移:光靠單一的日志傳送配置,我們是不可能以自動的方式,從主服務器故障轉移到備用服務器上的。此時,您需要以手動的方式,將備用數據庫連上線。
- 需要手動配置SQL登錄:SQL的登錄是不會自動從主服務器傳送到備用服務器的。您可以將登錄名和密碼從主服務器實例傳輸到備用服務器實例,以實現(xiàn)登錄名的同步(具體請參見--https://docs.microsoft.com/en-US/troubleshoot/sql/security/transfer-logins-passwords-between-instances)。注意:您往往還需要在備用服務器上手動創(chuàng)建各種維護計劃、鏈接服務器和SSIS(SQL Server Integration Services)包。
- 數據丟失的風險:通常,在主數據庫不可用時,我們只能恢復最后一次事務備份的數據。也就是說,在該事務日志的備份被發(fā)往備用服務器之后的任何事務,都將由于缺少備份,而導致數據的丟失。例如:主服務器在上午9點發(fā)生故障。如果復制到備用服務器實例B的最后一次備份是在上午8:45進行的,那么上午8:45到9點之間的數據將會丟失。
- 反向日志傳送:當您需要調換服務器的角色,而非重做完整的數據庫備份時,這將非常實用。例如,您擁有一個體量很大的備份,并且需要將數據從備用服務器傳送到位于遠端的主服務器,那么復制完整的備份則可能需要相當長的時間。
如何配置和使用日志傳送?
通常,配置日志傳送的過程可以被分為兩個不同的步驟:
步驟 1 – 在備用服務器上初始化數據庫
假設我們在主服務器實例中有兩個數據庫。我們需要把TestDB1日志傳送到原本不帶任何數據庫的備用服務器上。值得注意的是,為了設置日志傳送,數據庫需要處于FULL或BULK-LOGGED恢復模式。如果是在SIMPLE恢復模型的情況下,日志傳送將因為無法使用事務日志的備份而失敗。
- 首先,我們需要進行一次完整的數據庫備份和事務日志的備份。您可以運行如下T-SQL查詢,來創(chuàng)建“完整”的和“事務日志”類型的備份:
- backup database TestDB1 to disk = ‘c:\backup\TestDB1.bak’
- backup log TestDB1 to disk = ‘c:\backup\TestDB1.bak’
- 接著,是在備用服務器上進行備份恢復。
- 在“恢復數據庫”界面上,您可以選擇“設備”作為數據源,然后單擊其圖標。
- 在“選擇備份設備”的對話框中,單擊“添加”。
- 選擇可恢復的備份文件,然后單擊“確定”。
- 針對TestDB1備份的恢復,將會被執(zhí)行。
- 單擊“選擇頁面”下的文件,以便更改各個物理數據庫文件的位置。
- 接著,單擊左側的“選項”。在“選項”頁面上,從“恢復狀態(tài)”下拉列表中選擇RESTORE WITH STANDBY。值得注意的是,我們通過選擇“RESTORE WITH STANDBY”選項,來確保數據庫的只讀性。您雖然可以選擇“RESTORE WITH NORECOVERY”選項,但是會使得數據庫無法被訪問到。
- 選擇好上面提到的恢復狀態(tài)之后,請單擊“確定”,以保證數據庫能夠成功完成恢復。這會讓“TestDB1”數據庫以“Standby(只讀)”的模式,在備用服務器上恢復實例。
至此,數據庫已經在備用服務器上完成了初始化。
步驟 2 – 啟用主數據庫
- 請右鍵單擊主服務器實例中的“TestDB1”,然后單擊“屬性”。
- 請選擇“在日志傳送配置中,將此作為主數據庫啟用”的選項。
注意:在默認情況下,事務日志每隔15分鐘備份一次。不過,您的事務日志有時會變得太大,而無法在已定義的時間限制內,完成復制和恢復。對此,您需要安排一次針對日志的備份。您可以單擊“備份設置”,然后在“事務日志備份設置”的界面上,指定保存?zhèn)浞菸募奈恢?。接下來,請單?ldquo;計劃”,并將每日的備份頻率更改為每1-2分鐘運行一次。
- 請單擊“添加”,以設置備用數據庫。此時,系統(tǒng)將提示您連接到備用服務器的實例上。
- 正如步驟 1中所做的設置,我們將在“備用數據庫設置”的界面上,選擇“否,備用數據庫已初始化”的選項。
- 現(xiàn)在,讓我們繼續(xù)復制文件。在此,請輸入備用服務器的備份文件夾的位置,然后設置備份的頻率,并單擊“確定”。
- 在“恢復事務日志”的界面上,請將數據庫的狀態(tài)選擇為“備用模式”,并選中“恢復備份時,斷開數據庫中的用戶”。在設定好備份的時間間隔后,請單擊“確定”。
- 為了添加備用服務器的實例和數據庫,請通過單擊“確定”來創(chuàng)建SQL Server的各種代理作業(yè)。在單擊主“SQL Server代理”后,您可以查看到已創(chuàng)建的備份事務日志的作業(yè)。而在備用“SQL Server 代理”中,您可以查看到新創(chuàng)建的兩個作業(yè)。其中,一個是將事務日志備份從主數據庫復制到備用數據庫,另一個是將該事務日志還原到備用數據庫上。
- 至此,帶日志傳送的災難恢復方案已配置完畢。據此,一旦主數據庫出現(xiàn)故障,您可以立即將備用數據庫連上線。同時,您可以通過運行如下查詢,來確認備用數據庫退出了待機(standby)的模式:
- Select * from Products
- RESTORE DATABASE TestDB1 WITH RECOVERY
- 通過刷新數據庫,您將查看到備用服務器中的“TestDB1”數據庫已上線。
小結
日志傳送是一種針對SQL Server的經濟、高效且簡單的災難恢復解決方案。當然,它只是在數據庫級別執(zhí)行災難恢復的理想選擇。而對于服務器實例上的災難恢復,我們可以使用諸如:數據庫鏡像、故障轉移群集等其他災難恢復技術。此外,配置日志傳送也可能會導致數據的丟失。因此若要從損壞的SQL數據庫中,恢復已刪除或無法訪問的數據,請使用專業(yè)的SQL恢復工具。
原文標題:SQL Server Disaster Recovery with Log Shipping,作者:Daniel Calbimonte
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】