程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server日志在高可用和災難恢復中的作用

SQL Server日志在高可用和災難恢復中的作用

編輯:關於SqlServer

簡介

日志的作用是保證持久性和數據一致性,通過日志可以實現數據的Undo與Redo,因此通過日志,SQL Server不僅僅可以實現災難恢復,還可以通過日志的Redo來實現高可用性。本篇文章主要講述日志在SQL Server中提供的幾種高可用性中的作用以及在災難恢復中的角色。

日志損壞

日志可能會由於IO子系統的故障而損壞,當出現日志損壞時,如果您對日志的原來略有了解,並能在日志損壞的情況下盡量挽救數據,那麼感覺一定是非常好的:-),下面我們來了解幾種日志損壞的情況下的恢復情況。

1.數據庫正常關閉,日志損壞。

當數據庫正常關閉時,日志損壞就不是那麼重要了,因為此時數據庫中所有提交的事務對應的髒數據都已經CheckPoint到物理磁盤,因此不存在數據不一致的問題。因此,如果MDF和NDF文件完好,直接指定 FOR ATTACH_REBUILD_LOG參數後附加即可,如圖1所示。

圖1.如果數據庫正常關閉,直接附加即可

但值得注意的是,使用該方式附加數據庫會自動重建日志文件,日志文件大小為0.5MB,也就是2個VLF,自動增長為10%,因此您需要手動再來設置一下日志的大小,避免出現太多VLF的情況。

2.數據庫非正常關閉,日志損壞

在講述這種情況之前,我們首先來看數據庫所能處在的幾種狀態,一個完整的模型如圖2所示。

圖2.數據庫所能處在的狀態關系

上面的幾種狀態的具體轉換關系超出了本文的討論范圍,但是這裡我會強調兩種和日志損壞關系很大的狀態:RECOVERY_PENDING和SUSPECT狀態。

假如出現了數據庫沒有正常關閉,也就是還有數據沒有CheckPoint到磁盤,如果數據庫要啟動就必須經歷Recovery過程,如果日志損壞,則無法進行該Recovery過程,就會造成數據不一致的問題。

此時,數據庫可能處於下面兩種狀態之一:

RECOVERY_PENDING:需要運行crash recovery,但該過程由於資源等待無法開始,比如說日志完全損壞

SUSPECT:crash recovery已經開始,但無法完成

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved