国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SQL Server數(shù)據(jù)庫備份與恢復(fù)的研究與實(shí)踐

2018-11-01 05:19周勇強(qiáng)
電腦知識(shí)與技術(shù) 2018年18期
關(guān)鍵詞:恢復(fù)檢查點(diǎn)備份

周勇強(qiáng)

摘要:如何設(shè)計(jì)良好的數(shù)據(jù)庫備份方案,正確處理各種備份恢復(fù)問題,在出現(xiàn)各種軟硬件故障及人為誤操作問題后及時(shí)有效地恢復(fù)數(shù)據(jù)庫,從而將數(shù)據(jù)丟失的風(fēng)險(xiǎn)降到最小,是很多數(shù)據(jù)庫管理員面臨的問題。該文力圖從較深入的層次對(duì)SQL Server數(shù)據(jù)庫的備份和恢復(fù)機(jī)制進(jìn)行研究,將理論與實(shí)踐相結(jié)合,分析一個(gè)有代表性的數(shù)據(jù)庫備份恢復(fù)策略,提供有益的知識(shí)和經(jīng)驗(yàn)。

關(guān)鍵詞: SQL Server;備份;恢復(fù);事務(wù)日志;檢查點(diǎn)

中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)18-0003-03

1 引言

SQL Server數(shù)據(jù)庫已在各種應(yīng)用系統(tǒng)中得到廣泛應(yīng)用,數(shù)據(jù)的重要性不言而喻,但各種軟硬件故障及人為誤操作問題難以避免,如果對(duì)SQL Server的數(shù)據(jù)庫備份和恢復(fù)機(jī)制沒有透徹的理解,就無法掌握正確的備份恢復(fù)技術(shù)。本文對(duì)SQL Server 2005及以上版本用戶數(shù)據(jù)庫的三種基本備份方式及相應(yīng)的介質(zhì)恢復(fù)技術(shù)進(jìn)行研究,不涉及文件和文件組的備份恢復(fù)、系統(tǒng)數(shù)據(jù)庫的備份恢復(fù)、高可用性方案等內(nèi)容的探討。

2 數(shù)據(jù)庫備份

2.1 完整備份

完整備份是所有其他備份類型的基準(zhǔn)備份,備份的內(nèi)容為備份時(shí)的所有數(shù)據(jù)以及能將數(shù)據(jù)庫基于這些數(shù)據(jù)恢復(fù)到備份結(jié)束時(shí)一致狀態(tài)的事務(wù)日志。

使用不帶DIFFERENTIAL選項(xiàng)的Backup Database命令執(zhí)行完整備份:

Backup Database database_name TO backup_device

完整備份過程分為三個(gè)階段:

① 執(zhí)行檢查點(diǎn)(Checkpoint)。將內(nèi)存中的臟日志和臟數(shù)據(jù)存盤,對(duì)處于非完整日志序列維護(hù)狀態(tài)的數(shù)據(jù)庫進(jìn)行日志截?cái)?,在日志文件中寫入一段檢查點(diǎn)記錄(首條記錄的LSN為檢查點(diǎn)起點(diǎn)的LSN,即CheckpointLSN),內(nèi)容為當(dāng)前的MinLSN及所有活動(dòng)事務(wù)的起始LSN,MinLSN是檢查點(diǎn)起點(diǎn)的LSN和當(dāng)前最早活動(dòng)事務(wù)起點(diǎn)的LSN中的最老LSN。

② 數(shù)據(jù)轉(zhuǎn)儲(chǔ)。將所有已分配區(qū)(Extent)的數(shù)據(jù)復(fù)制到備份集。

③ 日志轉(zhuǎn)儲(chǔ)。將LSN滿足條件FirstLSN≤LSN

2.2 差異備份

差異備份和完整備份類似,二者主要差別是備份的數(shù)據(jù)不同,差異備份以最近一次完整備份為基準(zhǔn),捕獲基準(zhǔn)備份后發(fā)生更改的數(shù)據(jù)區(qū)的數(shù)據(jù)。

使用帶DIFFERENTIAL選項(xiàng)的BACKUP DATABASE命令執(zhí)行差異備份:

Backup Database database_name TO backup_device WITH DIFFERENTIAL

2.3 日志備份

使用BACKUP LOG命令執(zhí)行日志備份:

Backup LOG database_name TO backup_device

日志備份的范圍是LSN滿足條件FirstLSN≤LSN

① 如果是第一次執(zhí)行事務(wù)日志備份,會(huì)備份所有日志記錄,即FirstLSN是第一次完整備份的FirstLSN。

② 否則備份上次日志備份以來新增的日志記錄,即FirstLSN是上次日志備份的LastLSN。

LastLSN是執(zhí)行日志備份時(shí)最后一個(gè)成功結(jié)束事務(wù)的下一個(gè)事務(wù)的開始LSN。

3 數(shù)據(jù)庫恢復(fù)

如果將數(shù)據(jù)庫的內(nèi)容(數(shù)據(jù)和日志等)稱為狀態(tài),則數(shù)據(jù)庫備份就是把數(shù)據(jù)庫當(dāng)時(shí)的狀態(tài)保存到備份集的過程,而數(shù)據(jù)庫恢復(fù)則是通過重演備份集中內(nèi)容來重建數(shù)據(jù)庫并逐步推進(jìn)(或稱還原)數(shù)據(jù)庫狀態(tài),最后重現(xiàn)數(shù)據(jù)庫在恢復(fù)點(diǎn)正確狀態(tài)的過程。

數(shù)據(jù)庫恢復(fù)操作包括確定恢復(fù)點(diǎn)、備份尾日志、選擇恢復(fù)鏈、執(zhí)行數(shù)據(jù)庫恢復(fù)命令四個(gè)基本步驟。

3.1 確定恢復(fù)點(diǎn)

恢復(fù)點(diǎn)是用戶指定將數(shù)據(jù)庫恢復(fù)到的點(diǎn)。恢復(fù)點(diǎn)可以是:

① 任何備份的尾部。

② 日志備份包含的特定時(shí)點(diǎn)(在大容量日志恢復(fù)模式下,僅當(dāng)日志備份不包含大容量更改,才能進(jìn)行時(shí)點(diǎn)還原)

如果恢復(fù)點(diǎn)是故障點(diǎn)或最后一個(gè)備份與故障點(diǎn)之間的某個(gè)時(shí)點(diǎn),則恢復(fù)所需的事務(wù)日志還在日志文件中。因?yàn)榻橘|(zhì)恢復(fù)是通過備份進(jìn)行的,所以應(yīng)先將處于日志文件尾部的這部分日志備份出來(稱為尾日志備份)。需要注意的是,對(duì)于大容量日志恢復(fù)模式下的數(shù)據(jù)庫,無法對(duì)包含大容量日志操作的活動(dòng)日志執(zhí)行尾日志備份。

實(shí)際上,對(duì)處于完整恢復(fù)模式或大容量日志恢復(fù)模式下的數(shù)據(jù)庫,SQL Server如果檢測(cè)到存在未備份的活動(dòng)日志,總是要求在還原前執(zhí)行尾日志備份。

3.2 備份尾日志

如果數(shù)據(jù)庫服務(wù)可用,用帶NORECOVERY選項(xiàng)的BACKUP LOG命令執(zhí)行常規(guī)的尾日志備份。對(duì)受損數(shù)據(jù)庫可嘗試用NO_TRUNCATE或CONTINUE_AFTER_ERROR選項(xiàng)備份尾日志,這兩個(gè)選項(xiàng)指示備份操作跳過錯(cuò)誤繼續(xù)進(jìn)行,因此可能導(dǎo)致數(shù)據(jù)丟失。

如果以上方法都無法備份尾日志,或者服務(wù)無法啟動(dòng),則只能嘗試用非常規(guī)方法進(jìn)行尾日志備份了,例如將日志文件“假載”到其他服務(wù)器上進(jìn)行恢復(fù)。

有時(shí)需要在沒有進(jìn)行尾日志備份的情況下恢復(fù)數(shù)據(jù)庫,例如尾日志已無法備份,或者恢復(fù)點(diǎn)不在尾日志中。可在數(shù)據(jù)庫恢復(fù)的還原階段使用以下方法跳過尾日志檢測(cè):(1)使用帶REPLACE選項(xiàng)的RESTORE命令還原備份(跳過了一些安全性檢查)。(2)還原時(shí)在每個(gè)RESTORE命令中使用STOPAT等時(shí)點(diǎn)還原參數(shù)指定已有日志備份包含的時(shí)點(diǎn)。(3)使用MOVE選項(xiàng)將數(shù)據(jù)庫還原到新位置并具有新名稱(如果還原到不同服務(wù)器可以使用相同名稱)。

3.3 選擇恢復(fù)鏈

恢復(fù)鏈?zhǔn)菑囊延袀浞菪蛄兄羞x出的、按備份先后次序排列的、用于恢復(fù)數(shù)據(jù)庫的備份組合?;謴?fù)鏈起于完整備份、止于恢復(fù)點(diǎn)所在備份,中間可能還包含其他備份,用于將數(shù)據(jù)庫狀態(tài)沿著恢復(fù)鏈逐步還原到恢復(fù)點(diǎn)。

要成功恢復(fù)數(shù)據(jù)庫,恢復(fù)鏈中每個(gè)備份都應(yīng)該是可成功還原的,有四種備份可成功還原:

第1種 完整備份。

第2種 基準(zhǔn)備份已被選進(jìn)恢復(fù)鏈的差異備份。

第3種 恢復(fù)鏈中的第一個(gè)日志備份,如果和緊接在前面的完整備份(或差異備份)之間的LSN不存在缺口,即:日志備份的FirstLSN≤前一個(gè)備份的LastLSN≤日志備份的LastLSN,則日志備份是可成功還原的。

第4種 二個(gè)相鄰的日志備份,如果二者之間的LSN首尾相連,即:后一個(gè)日志備份的FirstLSN=前一個(gè)日志備份的LastLSN,則后一個(gè)日志備份是可成功還原的。

3.4 執(zhí)行數(shù)據(jù)庫恢復(fù)命令

數(shù)據(jù)庫恢復(fù)包括還原和恢復(fù)兩個(gè)階段。

(1) 還原(RESTORE)階段

此階段使用帶“NORECOVERY”選項(xiàng)的RESTORE命令按備份的先后次序逐一還原恢復(fù)鏈中的各個(gè)備份,將數(shù)據(jù)庫狀態(tài)逐步推進(jìn),直到恢復(fù)點(diǎn)。

① 還原完整備份。

RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY

此命令將完整備份中的數(shù)據(jù)復(fù)制到數(shù)據(jù)庫并進(jìn)行初始化,然后在此基礎(chǔ)上應(yīng)用備份中的日志記錄(首先從備份集標(biāo)頭讀出CheckpointLSN,據(jù)此在備份日志中找到對(duì)應(yīng)的檢查點(diǎn)記錄,讀出當(dāng)時(shí)保存的MinLSN和所有活動(dòng)事務(wù)的起點(diǎn)LSN,就可找到每個(gè)活動(dòng)事務(wù)的所有日志記錄,然后重做已完成事務(wù),保留未完成事務(wù)),將數(shù)據(jù)庫還原到完整備份完成時(shí)的狀態(tài)。

② 還原差異備份

RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY

此命令將備份集中的差異數(shù)據(jù)應(yīng)用到數(shù)據(jù)庫(用差異數(shù)據(jù)覆蓋對(duì)應(yīng)區(qū)),然后在此基礎(chǔ)上應(yīng)用備份中的日志記錄(類似還原完整備份),將數(shù)據(jù)庫推進(jìn)到差異備份完成時(shí)的狀態(tài)。

③ 還原日志備份

RESTORE LOG database_name FROM backup_device WITH NORECOVERY

此命令將備份集中的日志記錄應(yīng)用到數(shù)據(jù)庫,重做已完成事務(wù),保留未完成事務(wù),將數(shù)據(jù)庫推進(jìn)到日志備份完成時(shí)的狀態(tài)。

(2) 恢復(fù)(RECOVERY)階段

所有備份還原后,數(shù)據(jù)庫狀態(tài)還原到了恢復(fù)點(diǎn),接下來需要對(duì)還原后數(shù)據(jù)庫中的存疑事務(wù)(可能不符合ACID特性的事務(wù))進(jìn)行處理,見圖1。

存疑事務(wù)以事務(wù)日志中的最后一個(gè)檢查點(diǎn)為界限分成二部分。第一部分是最后檢查點(diǎn)之前的事務(wù),這些事務(wù)都已被寫入日志文件和數(shù)據(jù)文件,暫時(shí)無需處理。第二部分是最后檢查點(diǎn)和恢復(fù)點(diǎn)之間的事務(wù),這些事務(wù)可能存在兩種問題:一是在日志中已提交的事務(wù)可能未被寫入數(shù)據(jù)文件(T2、T4),原因是寫日志和寫數(shù)據(jù)是按WAL原則異步進(jìn)行的,事務(wù)提交會(huì)將日志存盤,但數(shù)據(jù)可能尚未在恢復(fù)點(diǎn)之前存盤。二是未完成的事務(wù)被寫到了數(shù)據(jù)庫,原因是檢查點(diǎn)會(huì)把未完成事務(wù)存盤,但直到恢復(fù)點(diǎn)還沒有提交(T3、T5)。

此階段使用帶“RECOVERY”選項(xiàng)的RESTORE命令來處理存疑事務(wù):

RESTORE DATABASE database_name WITH RECOVERY

此命令根據(jù)最后一個(gè)檢查點(diǎn)的CheckpointLSN,在備份日志中找到對(duì)應(yīng)的檢查點(diǎn)記錄,據(jù)此讀出當(dāng)時(shí)保存的MinLSN和所有活動(dòng)事務(wù)的起點(diǎn)LSN,從而找到每個(gè)存疑事務(wù)的所有日志記錄,然后重做未存盤的已完成事務(wù)(T2、T4),撤銷已存盤的未完成事務(wù)(T3、T5),將數(shù)據(jù)庫恢復(fù)到恢復(fù)點(diǎn)時(shí)的一致狀態(tài)。

RECOVERY階段的操作可以合并到RESTORE階段的最后一個(gè)還原步驟。換言之,在還原階段的最后一個(gè)步驟不使用NORECOVERY選項(xiàng),而改用RECOVERY選項(xiàng),該選項(xiàng)在還原最后一個(gè)備份后,立即進(jìn)入恢復(fù)階段。

4 實(shí)例研究

模擬典型的備份策略,分析備份信息,揭示備份間的內(nèi)在聯(lián)系,研究恢復(fù)到故障點(diǎn)的恢復(fù)鏈方案。

4.1 數(shù)據(jù)庫備份

生成備份序列(用逗號(hào)分隔的備份名稱表示):F1,L1,L2,D1,L3,L4,D2,L5,L6,F(xiàn)2,L7,L8,D3,L9,L10,D4,L11,其中備份名稱由備份類型字母(F表示完整備份,D表示差異備份,L表示日志備份)加備份序號(hào)組成,每種備份類型獨(dú)立編號(hào)。

RESTORE HEADERONLY命令用于查詢備份集標(biāo)頭的基本備份信息,備份集的FirstLSN、LastLSN、CheckpointLSN、DatabaseBackupLSN反映了備份之間在日志和數(shù)據(jù)方面的內(nèi)在聯(lián)系??捎脠D示的方法直觀顯示這種關(guān)聯(lián),見圖2。圖中備份集的LSN范圍用水平線段(FirstLSN≤LSN

4.2 數(shù)據(jù)庫恢復(fù)

1)確定恢復(fù)點(diǎn)、備份尾日志

恢復(fù)點(diǎn)是故障點(diǎn),因此首先執(zhí)行尾日志備份。將尾日志備份Tail的LSN范圍也標(biāo)注在圖2。

2)選擇恢復(fù)鏈

按照選擇恢復(fù)鏈的要求,借助圖2,可方便地選出恢復(fù)鏈:

第一個(gè)備份必須是完整備份,用作后續(xù)還原的基準(zhǔn),可選F1或F2,但為了縮短恢復(fù)鏈,減少恢復(fù)時(shí)間,選F2。最后一個(gè)備份是包含恢復(fù)點(diǎn)的Tail。由于這兩個(gè)備份并無直接關(guān)聯(lián),故需選擇一些中間備份,以將數(shù)據(jù)庫狀態(tài)從F2逐步還原到Tail。

最佳方案:(F2,D4,L11,Tail)。F2屬于第1種可成功還原備份,D4屬于第2種,L11屬于第3種,Tail屬于第4種。這個(gè)方案的恢復(fù)鏈最短,故恢復(fù)時(shí)間最少。

備選方案:(F2,D3,L9,L10,L11, Tail)、(F2,,L7~L11, Tail)可用作最佳方案當(dāng)差異備份D4或D3有問題時(shí)的替換方案;(F1,D2,L5~L11, Tail)及(F1,D1,L3~L11, Tail)、(F1,L1~L11, Tail)可用作最佳方案當(dāng)完整備份F2有問題時(shí)的替換方案。

在以上方案中,任何一個(gè)備份都是必需的,如果其中一個(gè)備份丟失或被破壞,則恢復(fù)鏈中斷,按此方案只能將數(shù)據(jù)庫恢復(fù)到中斷點(diǎn)之前的某個(gè)狀態(tài)了,這里將這種恢復(fù)鏈稱為最簡(jiǎn)恢復(fù)鏈。

實(shí)際上,在最簡(jiǎn)恢復(fù)鏈中還可加入其他備份,只要所加入的備份滿足可成功還原的要求,并不影響恢復(fù)結(jié)果。例如最佳方案可修改為:(F1,F(xiàn)2,L7,D3,L9,D4,L11,TailLog),但這樣做除了增加恢復(fù)時(shí)間別無意義。

5 結(jié)論

SQL Server的備份恢復(fù),還包括文件和文件組的備份恢復(fù)、系統(tǒng)數(shù)據(jù)庫的備份恢復(fù)等。DBA應(yīng)在透徹理解備份恢復(fù)機(jī)制的基礎(chǔ)上,通過深入細(xì)致的研究實(shí)踐真正掌握備份恢復(fù)技術(shù),如此才能從容應(yīng)對(duì)各種復(fù)雜情況。

參考文獻(xiàn):

[1] 李愛武.SQL Server 2008 數(shù)據(jù)庫技術(shù)內(nèi)幕[M].北京:中國鐵道出版社,2012.

[2] Delaney K.Inside Microsoft? SQL Server? 2005[M].The Storage Engine.US:Microsoft Press,2006.

[3] 趙松濤.SQL Server 2005 奧秘[M].北京:電子工業(yè)出版社,2007.

[4] 王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論(第5版)[M].北京:高等教育出版社,2014.

[5] 向猛,謝力靖.SQL Server 2005基于事務(wù)日志的備份與恢復(fù)深入研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(6).

[6] Paul S. Randal.SQL Server:Understanding SQL Server Backups[EB/OL]. https://technet.microsoft.com/zh-cn/library/2009.07.sqlbackup.aspx#MtViewDropDownText.

[7] Paul S.Randal.SQL Server:Understanding Logging and Recovery in SQL Server[EB/OL]. https ://technet.microsoft.com /en-us/library/2009.02.logging.aspx.

[8] Paul S.Randal.SQL Server: Recovering from Disasters Using Backups[EB/OL]. https://technet.microsoft.com/en-us/library/ee677581.aspx.

[9] Paul S.Randal. Debunking a couple of myths around full database backups[EB/OL].https://www.sqlskills.com/blogs/paul/debunking-a-couple-of-myths-around-full-database-backups/.

[10] Paul S.Randal. More on how much transaction log a full backup includes [EB/OL]. https://www.sqlskills.com/blogs/paul/more-on-how-much-transaction-log-a-full-backup-includes/.

[11] 王渝次.信息系統(tǒng)災(zāi)難恢復(fù)的規(guī)劃及實(shí)施[M].北京:北京交通大學(xué)出版社,2006.

猜你喜歡
恢復(fù)檢查點(diǎn)備份
Spark效用感知的檢查點(diǎn)緩存并行清理策略①
免疫檢查點(diǎn)抑制劑相關(guān)內(nèi)分泌代謝疾病
創(chuàng)建vSphere 備份任務(wù)
免疫檢查點(diǎn)抑制劑在腫瘤治療中的不良反應(yīng)及毒性管理
舊瓶裝新酒天宮二號(hào)從備份變實(shí)驗(yàn)室
分布式任務(wù)管理系統(tǒng)中檢查點(diǎn)的設(shè)計(jì)
出版原圖數(shù)據(jù)庫遷移與備份恢復(fù)