Sql-Server
如果日誌文件已滿,為什麼不備份數據庫?
我在 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
: