Sql-Server

如果日誌文件已滿,為什麼不備份數據庫?

  • February 7, 2018

我在 SQL Server 2008 R2 上的完整恢復模式中有一個簡單的數據庫備份腳本:

backup database livendb to disk = '\\ehsjmaydb01\Data\livendb.bak' with init, format
backup log livendb to disk =  '\\ehsjmaydb01\Data\livendb_log.tran' with init, format  

我們在周末打開了一個新的 ETL 腳本,這絕對讓我可憐的伺服器不堪重負。事務日誌已滿,TempDB 已滿。

查看我的備份作業的歷史記錄,它失敗並顯示以下消息:

數據庫“livendb”的事務日誌已滿。

要找出日誌中的空間不能被重用的原因,請參閱 sys.databases 中的 log_reuse_wait_desc 列

$$ SQLSTATE 42000 $$(錯誤 9002)備份數據庫異常終止。

$$ SQLSTATE 42000 $$(錯誤 3013)。步驟失敗。

今天早上來的時候,我能夠先備份日誌*,*然後執行數據庫備份,效果很好。

**問題:**為什麼數據庫備份過程需要日誌文件中的空間?

BACKUP DATABASE 異常終止

問題:為什麼數據庫備份過程需要日誌文件中的空間?

作為第一步,每個數據備份(完整/差異)都會執行checkpoint. 這樣做是為了能夠從磁碟中獲取盡可能多的新數據。

每個checkpoint操作都寫入關於自身的日誌(至少 2 條日誌記錄)

如果您的日誌已滿,即使無法將checkpoint操作寫入日誌也會導致備份失敗。

在備份結束時,每次full backup重置differential base,這也被記錄下來。

並且這兩者之間還有其他日誌寫入,您可以sys.fn_dblog在備份成功後看到它們使用。

在這裡你可以看到和的checkpoint解釋differential base

數據庫檢查點 (SQL Server)

檢查點如何工作以及記錄什麼

差異備份的基礎

引用自:https://dba.stackexchange.com/questions/197094