更新時(shí)間:2021-11-02 10:48:01 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽790次
要從故障中恢復(fù) SQL Server 數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)管理員必須以邏輯上正確且有意義的恢復(fù)順序恢復(fù)一組 SQL Server 備份。SQL Server 還原和恢復(fù)支持從整個(gè)數(shù)據(jù)庫(kù)、數(shù)據(jù)文件或數(shù)據(jù)頁(yè)的備份中還原數(shù)據(jù),如下所示:
數(shù)據(jù)庫(kù)(完整的數(shù)據(jù)庫(kù)恢復(fù))
整個(gè)數(shù)據(jù)庫(kù)被還原和恢復(fù),并且數(shù)據(jù)庫(kù)在恢復(fù)和恢復(fù)操作期間處于脫機(jī)狀態(tài)。
數(shù)據(jù)文件(一個(gè)文件恢復(fù))
恢復(fù)和恢復(fù)一個(gè)數(shù)據(jù)文件或一組文件。在文件還原期間,包含文件的文件組在還原期間自動(dòng)脫機(jī)。任何訪問(wèn)脫機(jī)文件組的嘗試都會(huì)導(dǎo)致錯(cuò)誤。
數(shù)據(jù)頁(yè)(一個(gè)頁(yè)恢復(fù))
在完整恢復(fù)模式或大容量日志恢復(fù)模式下,您可以還原單個(gè)頁(yè)面。可以在任何數(shù)據(jù)庫(kù)上執(zhí)行頁(yè)面恢復(fù),而不管文件組的數(shù)量。
SQL Server 備份和還原在所有支持的操作系統(tǒng)上工作。有關(guān)支持的操作系統(tǒng)的信息,請(qǐng)參閱安裝 SQL Server 2016 的硬件和軟件要求。有關(guān)對(duì) SQL Server 早期版本的備份的支持的信息,請(qǐng)參閱RESTORE (Transact-SQL)的“兼容性支持”部分。
一個(gè)恢復(fù)的情況在SQL Server是從一個(gè)或多個(gè)備份恢復(fù)數(shù)據(jù),然后恢復(fù)數(shù)據(jù)庫(kù)的過(guò)程。支持的還原方案取決于數(shù)據(jù)庫(kù)的恢復(fù)模型和 SQL Server 的版本。
下表介紹了不同恢復(fù)模型支持的可能還原方案。
還原場(chǎng)景 |
簡(jiǎn)單恢復(fù)模式下 |
在完整/大容量日志恢復(fù)模式下 |
---|---|---|
完成數(shù)據(jù)庫(kù)恢復(fù) |
這是基本的恢復(fù)策略。完整的數(shù)據(jù)庫(kù)還原可能只涉及還原和恢復(fù)完整的數(shù)據(jù)庫(kù)備份。或者,完整的數(shù)據(jù)庫(kù)還原可能涉及還原完整的數(shù)據(jù)庫(kù)備份,然后還原和恢復(fù)差異備份。 |
這是基本的恢復(fù)策略。完整的數(shù)據(jù)庫(kù)還原涉及還原完整的數(shù)據(jù)庫(kù)備份和(可選)差異備份(如果有),然后還原所有后續(xù)日志備份(按順序)。完整的數(shù)據(jù)庫(kù)還原是通過(guò)恢復(fù)最后一個(gè)日志備份并恢復(fù)它來(lái)完成的(RESTORE WITH RECOVERY)。 |
文件恢復(fù)* |
還原一個(gè)或多個(gè)損壞的只讀文件,而無(wú)需還原整個(gè)數(shù)據(jù)庫(kù)。僅當(dāng)數(shù)據(jù)庫(kù)具有至少一個(gè)只讀文件組時(shí),文件恢復(fù)才可用。 |
還原一個(gè)或多個(gè)文件,而不還原整個(gè)數(shù)據(jù)庫(kù)。可以在數(shù)據(jù)庫(kù)脫機(jī)時(shí)執(zhí)行文件還原,或者對(duì)于某些版本的 SQL Server,在數(shù)據(jù)庫(kù)保持聯(lián)機(jī)時(shí)執(zhí)行文件還原。在文件還原期間,包含正在還原的文件的文件組始終處于脫機(jī)狀態(tài)。 |
頁(yè)面還原 |
不適用 |
恢復(fù)一個(gè)或多個(gè)損壞的頁(yè)面。可以在數(shù)據(jù)庫(kù)脫機(jī)時(shí)執(zhí)行頁(yè)面還原,或者對(duì)于某些版本的 SQL Server,在數(shù)據(jù)庫(kù)保持聯(lián)機(jī)時(shí)執(zhí)行頁(yè)面還原。在頁(yè)面還原期間,正在還原的頁(yè)面始終處于脫機(jī)狀態(tài)。 一個(gè)完整的日志備份鏈必須可用,直到當(dāng)前日志文件,并且必須全部應(yīng)用它們以使頁(yè)面與當(dāng)前日志文件保持同步。 |
零碎恢復(fù)* |
在文件組級(jí)別分階段還原和恢復(fù)數(shù)據(jù)庫(kù),從主文件組和所有讀/寫輔助文件組開(kāi)始。 |
從主文件組開(kāi)始,在文件組級(jí)別分階段還原和恢復(fù)數(shù)據(jù)庫(kù)。 |
*僅企業(yè)版支持在線恢復(fù)。
要執(zhí)行文件還原,數(shù)據(jù)庫(kù)引擎執(zhí)行兩個(gè)步驟:
創(chuàng)建任何丟失的數(shù)據(jù)庫(kù)文件。
將數(shù)據(jù)從備份設(shè)備復(fù)制到數(shù)據(jù)庫(kù)文件。
要執(zhí)行數(shù)據(jù)庫(kù)還原,數(shù)據(jù)庫(kù)引擎執(zhí)行三個(gè)步驟:
如果數(shù)據(jù)庫(kù)和事務(wù)日志文件尚不存在,則創(chuàng)建它們。
將數(shù)據(jù)庫(kù)備份介質(zhì)中的所有數(shù)據(jù)、日志和索引頁(yè)復(fù)制到數(shù)據(jù)庫(kù)文件中。
在所謂的恢復(fù)過(guò)程中應(yīng)用事務(wù)日志。
不管數(shù)據(jù)如何恢復(fù),在恢復(fù)數(shù)據(jù)庫(kù)之前,SQL Server 數(shù)據(jù)庫(kù)引擎保證整個(gè)數(shù)據(jù)庫(kù)在邏輯上是一致的。例如,如果您還原一個(gè)文件,則在它前滾到足以與數(shù)據(jù)庫(kù)保持一致之前,您無(wú)法恢復(fù)它并使其聯(lián)機(jī)。
還原和恢復(fù)文件或頁(yè)面而不是整個(gè)數(shù)據(jù)庫(kù)具有以下優(yōu)點(diǎn):
還原較少的數(shù)據(jù)可減少?gòu)?fù)制和恢復(fù)數(shù)據(jù)所需的時(shí)間。
在 SQL Server 上還原文件或頁(yè)面可能允許數(shù)據(jù)庫(kù)中的其他數(shù)據(jù)在還原操作期間保持聯(lián)機(jī)。
對(duì)于大多數(shù)還原方案,必須應(yīng)用事務(wù)日志備份并允許 SQL Server 數(shù)據(jù)庫(kù)引擎運(yùn)行恢復(fù)過(guò)程以使數(shù)據(jù)庫(kù)聯(lián)機(jī)。恢復(fù)是 SQL Server 用于每個(gè)數(shù)據(jù)庫(kù)以事務(wù)一致(或干凈)狀態(tài)啟動(dòng)的過(guò)程。
在發(fā)生故障轉(zhuǎn)移或其他非干凈關(guān)閉的情況下,數(shù)據(jù)庫(kù)可能會(huì)處于某些修改從未從緩沖區(qū)緩存寫入數(shù)據(jù)文件的狀態(tài),并且數(shù)據(jù)文件中的不完整事務(wù)可能會(huì)有一些修改。當(dāng) SQL Server 實(shí)例啟動(dòng)時(shí),它會(huì)根據(jù)最后一個(gè)數(shù)據(jù)庫(kù)檢查點(diǎn)運(yùn)行每個(gè)數(shù)據(jù)庫(kù)的恢復(fù),包括三個(gè)階段:
分析階段分析事務(wù)日志以確定最后一個(gè)檢查點(diǎn)是什么,并創(chuàng)建臟頁(yè)表 (DPT) 和活動(dòng)事務(wù)表 (ATT)。DPT 包含數(shù)據(jù)庫(kù)關(guān)閉時(shí)臟頁(yè)的記錄。ATT 包含在數(shù)據(jù)庫(kù)未完全關(guān)閉時(shí)處于活動(dòng)狀態(tài)的事務(wù)記錄。
重做階段會(huì)前滾記錄在日志中的每個(gè)修改,這些修改在數(shù)據(jù)庫(kù)關(guān)閉時(shí)可能尚未寫入數(shù)據(jù)文件。成功的數(shù)據(jù)庫(kù)范圍恢復(fù)所需的最小日志序列號(hào)(minLSN) 可在 DPT 中找到,并標(biāo)記所有臟頁(yè)所需的重做操作的開(kāi)始。在此階段,SQL Server 數(shù)據(jù)庫(kù)引擎將屬于已提交事務(wù)的所有臟頁(yè)寫入磁盤。
撤消階段回滾在 ATT 中發(fā)現(xiàn)的不完整事務(wù),以確保保留數(shù)據(jù)庫(kù)的完整性。回滾后,數(shù)據(jù)庫(kù)上線,不能再對(duì)數(shù)據(jù)庫(kù)應(yīng)用事務(wù)日志備份。
SQL Server錯(cuò)誤日志中記錄了每個(gè)數(shù)據(jù)庫(kù)恢復(fù)階段的進(jìn)度信息。還可以使用擴(kuò)展事件跟蹤數(shù)據(jù)庫(kù)恢復(fù)進(jìn)度。
簡(jiǎn)單恢復(fù)模型對(duì)還原操作施加了以下限制:
文件還原和分段還原僅適用于只讀輔助文件組。有關(guān)這些還原方案的信息,請(qǐng)參閱文件還原(簡(jiǎn)單恢復(fù)模型)和零碎還原 (SQL Server)。
不允許頁(yè)面還原。
不允許時(shí)間點(diǎn)還原。
如果這些限制中的任何一個(gè)不適合您的恢復(fù)需求,我們建議您考慮使用完整恢復(fù)模式。
如果在大容量日志恢復(fù)模式下進(jìn)行的日志備份包含大容量日志更改,則不允許時(shí)間點(diǎn)恢復(fù)。嘗試對(duì)包含批量更改的日志備份執(zhí)行時(shí)間點(diǎn)恢復(fù)將導(dǎo)致還原操作失敗。
僅當(dāng)滿足以下條件時(shí),聯(lián)機(jī)還原序列才有效:
在恢復(fù)序列開(kāi)始之前,必須已完成所有必需的日志備份。
在開(kāi)始在線恢復(fù)序列之前,必須支持批量更改。
如果數(shù)據(jù)庫(kù)中存在批量更改,則所有文件都必須為 online 或defunct。(這意味著它不再是數(shù)據(jù)庫(kù)的一部分。)
如果不滿足這些條件,聯(lián)機(jī)恢復(fù)序列將失敗。
以上是關(guān)于“使SQL數(shù)據(jù)庫(kù)恢復(fù)的方案”的介紹,大家若想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容詳細(xì),從入門到精通,對(duì)于初學(xué)者來(lái)說(shuō)會(huì)有很大幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743