Sql-Server-2012

簡單恢復模型的完整備份 - 如果有打開的事務,則備份多少日誌

  • November 27, 2019

我現在有個情況。

SIMPLE 恢復模型中有一個數據庫。

注意:

  1. 壓縮沒有開啟,很快就會開啟。2. SQL Server 2012 SP3
BackupSize: 8GB (Usually)<br/>
Last Saturday BackupSize: 73GB (yes, 73 !!)

這是因為一個應用程序打開了 2 個事務。

現在 LOG 文件為 154GB。

Transaction: So far it inserted 90M records to a not so large table)

題:

  1. 在 FULL 備份中,如果有打開的事務,會記錄多少 LOG 資訊?
  2. 當 FULL 備份恢復時,它是否 ROLLBACK OPEN 事務的操作?
  3. 如果是這樣,為什麼完整備份甚至在備份完成後仍然打開時為 OPEN 事務備份 LOG(儘管在簡單恢復模型上)。
  4. 如果我從 SQL Server 中殺死 spid,它是否需要更多的 LOG 空間來回滾?我們這裡已經沒有空間了!!

在 FULL 備份中,如果有打開的事務,會記錄多少 LOG 資訊?

您的問題的答案在Paul Randal 的此部落格中

當 FULL 備份恢復時,它是否 ROLLBACK OPEN 事務的操作?

是的,如果在完整備份完成時事務尚未送出,它將在備份恢復時回滾,這很簡單,因為 SQL Server 在事務送出/完成之前備份完成時不知道“事務狀態”。請閱讀下文了解更多詳情

了解 SQL Server 中的備份

如果是這樣,為什麼完整備份甚至在備份完成後仍然打開時為 OPEN 事務備份 LOG(儘管在簡單恢復模型上)。

如上所述,因為它不知道事務的狀態,例如它是送出還是回滾,並且由於 SQL Server 中的事務首先寫入事務日誌,然後再對備份分頁進行更改,因此它完成了備份工作建立足夠的事務日誌,以便如果事務送出,它可以在備份恢復後使數據庫處於一致狀態,如果事務在備份完成之前未送出,則備份將其視為未送出,何時恢復,它們將沒有有關更改的資訊通過還原數據庫中的該事務。

閱讀 Paul Randal 指出的第一個神話

如果我從 SQL Server 中殺死 spid,它是否需要更多的 LOG 空間來回滾?我們這裡已經沒有空間了!!

是的,它確實需要事務日誌文件中的空間來回滾。回滾主要是單執行緒的,並撤消事務所做的事情。

回滾:終止會話時會發生什麼

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