Sql-Server

Sql Server 2017 - 無法收縮事務日誌文件,被 LOG_BACKUP 狀態阻止

  • March 11, 2020

上週我的 sql server 2017 實例(在 windows server 2016 上執行)空間不足,用 190GB 的事務日誌文件完全填滿了磁碟。

幸運的是,這是在一個雲實例上,所以我很快解除安裝了磁碟,將它增加了 200GB 左右,然後重新安裝並格式化了未使用的空間。

但是我仍然有這個巨大的 190GB 日誌文件。未設置日誌備份。所以我手動備份了事務日誌。然後我執行了一個磁碟使用報告,幸運的是它顯示了 95% 的事務日誌空間未使用:

在此處輸入圖像描述

但是,日誌文件本身仍然是 190GB。在做了一些研究之後,人們建議我縮小日誌文件,剛剛通過備份清除了大部分數據。所以我嘗試縮小它,它處理了幾秒鐘,然後縮小實用程序視窗關閉,沒有任何錯誤。但是,日誌文件仍為 190GB。

我查詢了我的數據庫的 log_reuse_wait_desc,並返回了“LOG_BACKUP”。這種狀態顯然意味著在我收縮事務日誌文件之前,我必須做一個備份,但是我只是做了一個備份?

我被困在這一點上,我想要一個更小的日誌事務文件(大約 10-20GB),並且我想自動備份日誌,或者定期備份,使其永遠不會超過 10-20GB,或者自動備份文件達到 10-20GB 標記。

有誰知道如何處理 LOG_BACKUP 狀態阻止我縮小文件的能力,除了簡單地執行備份(因為我已經這樣做了)?

這是我的數據庫 dm_db_log_stats: 在此處輸入圖像描述

您會注意到我的總 vlf 計數很大(1097),我的活動 vls 計數較小(300),但我不確定這意味著什麼。

ldf 文件分為虛擬日誌文件 (VLF)。最後使用的 VLF 設置了文件可以縮小的限制。即,文件只能從結尾向開頭收縮。所以你顯然在文件末尾有一個使用過的 VLF。最後你需要得到未使用的 VLF。

你要做的是清空日誌(如果不是在 SIMPLE 模式下,則為 BACKUP LOG,否則為 CHECKPOINT 命令),然後收縮。然後你做幾次。這是關鍵,幾次。在某個時間點,您將在最後擁有盡可能多的未使用的 VLF,因此文件將根據您的喜好縮小。

然後正確設置恢復模式(基於是否進行日誌備份)。

您可以使用 DBCC LOGINFO 調查 VLF 佈局。

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