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