(2.19)备份与还原--备份的原理与总结
備份T-SQL操作參考:https://www.cnblogs.com/gered/p/9178924.html
?一、完整備份
完整備份包含了數據庫中的所有數據,以及可以恢復這些數據的足夠的日志(以便恢復到該備份的結尾)。
1. 備份的過程
(1)鎖定數據庫,阻塞所有的事務。
(2)在事務日志中放置一個標志1。
(3)釋放數據庫鎖。
(4)提取數據文件的所有包含數據的數據頁面,把它們寫入備份設備。不包含數據的數據頁面被跳過,因此備份的文件大小永遠不會大于該數據庫的數據文件。
(5)鎖定數據庫,阻塞所有事務。
(6)在事務日志中放置一個標志2。
(7)釋放數據庫鎖。
(8)提取標志1與標志2之間的所有事務,把它們追加到備份中。
2.多線程
為了提升性能,發起一次備份時,備份引擎以最快的速度從數據文件中獲取數據頁面,這個過程不考慮頁面的順序。根據這個機制,可以用多個線程向備份設備寫入數據頁面。
3. 完整備份中包含了少量的事務日志
這是因為在備份過程中可能還在不停地產生“臟頁”,在恢復時就需要利用這些少量日志進行“重做”(把“臟頁”回寫到磁盤的數據頁面),這樣就可以恢復到備份完成時的那個時間點。
二、差異備份
1. 差異備份的“基準”
差異備份基于數據庫的最新完整備份。也就是說,上一個完整備份就是這些“差異”的“基準”,要想使用差異備份,必須存在一個完整備份。
差異備份只包含自“基準”后發生更改的數據頁面(以區為單位)。
差異備份不是增量備份。差異備份的“基準”是上一個完整備份。可以認為多個差異備份之間沒有直接的關聯關系。增量備份的“基準”是上一個增量備份。事務日志備份就屬于增量備份。
2. 差異備份的工作原理
在數據庫中有一些特殊的數據頁面,稱為DCM(差異變更映射表),類似于Windows的文件分配表。DCM記錄了數據庫的區(8個連續的8KB數據頁面)的變化情況。
在執行了完整備份之后,DCM的內容被清零。如果某個區發生了變化,DCM中對應的位將被設為1。
執行差異備份時,備份引擎讀取DCM,然后捕獲自上一次完整備份以來發生變化的所有區,并將那些區包括在差異備份中。
三、事務日志備份
每個日志備份都包括創建備份時處于活動狀態的部分事務日志,以及先前日志備份中未備份的所有日志記錄。
注意:只有在完整恢復模式或者大容量日志恢復模式時,才可以執行事務日志備份。
1. 完整恢復模式的事務日志備份
在日志備份時,備份引擎掃描所有的VLF,查找自上一次事務日志備份后被新增的日志記錄,并將這些日志記錄包括在備份文件中。
2. 大容量日志恢復模式的日志備份
在數據頁面中有一個BCM(大容量變更映射表)頁,記錄了自上一次日志備份后被大容量日志記錄操作(例如批量插入)修改的區。BCM存在于任何恢復模式的數據庫中,但僅在大容量恢復日志時才使用BCM。
上一次日志備份后,BCM已經被清零。然后,如果某個區的數據被大容量日志記錄操作修改,就在BCM中將對應的位修改為1。
在日志備份時,備份引擎掃描所有的BCM頁,查找已經修改的區,并將那些區包括在日志備份的前部。
?
3.結尾日志備份
在最后一次事務日志備份之后,數據庫繼續執行新的事務,這樣就會在事務日志中還存在著尚未備份的日志記錄,這部分“新”日志就稱為“結尾日志”。
(1)結尾日志備份
“結尾日志備份”就是用來捕獲事務日志的“尾部”(即尚未備份的那部分日志記錄),而且可以備份到最后一個事務,從而形成一個完好無損的日志鏈。
通過結尾日志備份,可以將數據庫恢復到最后一個時間點的最后一個事務,以防丟失所做的工作。
結尾日志備份將是數據庫還原計劃中相關的最后一個備份。結尾日志完成后,數據庫處于“正在恢復”狀態,不可以訪問。
1. T-SQL
示例
2.SSMS
(2)結尾日志備份的場景
1. With NoRecovery選項
如果數據庫處于聯機狀態并且您計劃對數據庫執行還原操作,則從備份日志結尾開始。 若要避免聯機數據庫錯誤,必須使用 BACKUP Transact-SQL 語句的 … WITH NORECOVERY 選項。
如果數據庫處于脫機狀態而無法啟動,則需要還原數據庫,從備份日志結尾開始。 由于此時不會發生任何事務,因此 WITH NORECOVERY 是可選的。
2. 數據庫置疑時
如果數據庫的數據文件損壞,數據庫的狀態為“可疑”,則立即嘗試使用 BACKUP 語句的 WITH CONTINUE_AFTER_ERROR 選項執行結尾日志備份。
?
?
在損壞的數據庫上,僅當日志文件未受損、數據庫處于支持結尾日志備份的狀態并且數據庫不包含任何大容量日志更改時,日志結尾備份才會成功。 如果無法創建結尾日志備份,則最新日志備份后提交的任何事務都將丟失。
(3).不需要結尾備份日志的場景
并非所有的數據庫恢復方案都要求執行結尾日志備份。
1. 如果恢復點包含在較早的日志備份中,則無需結尾日志備份。
2. 如果準備移動或替換(覆蓋)數據庫,并且在最新備份后不需要將該數據庫還原到某一時間點,則不需要結尾日志備份。
?
轉載于:https://www.cnblogs.com/gered/p/9204827.html
總結
以上是生活随笔為你收集整理的(2.19)备份与还原--备份的原理与总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5分钟了解Zigbee的前世今生
- 下一篇: bzoj1854 [Scoi2010]游