SQL Server重做日誌管理機制

lawzjf發表於2006-05-11

SQL Server把所有日誌檔案當作一個連續的檔案看待。當需要收縮資料庫時,SQL Server也是把所有的檔案當作一個檔案看待,而不是每個檔案單獨收縮。除非由於磁碟空間的問題,否則沒必要使用多個重做檔案。

SQL Server把日誌檔案又劃分為多個Virtual Log Files來管理,每個VLF的大小由SQL Server根據日誌檔案的大小及增長率來確定。一個VLF可以以下面三種狀態存在:

  • active:包含活動的事務
  • recoverable:活動事務之前的VLF,還未進行備份,當恢復資料庫時要用到
  • reusable:在完全恢復模式下已經備份,或者在簡單模式下,未包含活動事務

哈!VLF多麼類似於Oracle日誌檔案組的日誌檔案成員。

下面幾種情況,SQL Server認為使用者沒有維護一個完整的日誌序列:

  • 在完全恢復模式下,從來未進行全庫備份
  • 把資料庫設定為簡單模式
  • 使用命令backup log with no_log或backup log with truncate_only對日誌檔案進行了手工截斷。

在上面任何一種情況下,SQL Server都會直接重用reusable VLF。在這些情況下,因為可以重用VLF,日誌檔案一般不會自動增長。當資料庫處於完全恢復模式時,如果進行了全庫備份,而又沒有對日誌進行過備份,則日誌檔案會自動增長(當然要求之前對日誌檔案進行了自動增長配置)。

查詢一個資料庫是否處於日誌維護模式可以使用下面語句(只適用於SQL Server 2005):

select last_log_backup_lsn from sys.database_recovery_status

如果結果為null,則表示資料庫未處於日誌維護狀態。

在簡單恢復模式下,SQL Server會使recoverable VLF的數量保持在一定限度之下,從而使得需要進行例項恢復時,啟動時間維持在設定的時間之內(可以使用企業管理器設定伺服器啟動的時間)。如果recoverable VLF超過這個限制,則checkpoint程式會啟動起來,把相應dirty page寫入磁碟,並把recoverable VLF寫入日誌檔案。

SQL Server的完全恢復模式及簡單恢復模式,類似於Oracle的歸檔與非歸檔模式,但是SQL Server的日誌歸檔(即日誌備份)要手工去做,或者用作業設定為自動日誌備份,顯然Oracle歸檔模式的智慧化程度高多了。  


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/37724/viewspace-152537/,如需轉載,請註明出處,否則將追究法律責任。

相關文章