Sql-Server

事務備份後大型事務日誌不會縮小

  • September 20, 2019

我將首先說我們的數據庫使用完全恢復模式並且我們執行 SQL Server 2014。

在過去的幾天裡,我們的備份似乎失去了控制,以至於我們的完整/差異備份失敗了,只創建了非常大的事務備份。這當然會導致磁碟空間問題,並且需要相當多的人工干預才能恢復秩序。

我在每個數據庫上手動執行完整備份,然後嘗試通過執行事務備份來跟進。在此期間,一個數據庫的日誌文件的大小不斷增加,以至於磁碟空間不足。通常日誌文件大約為 1 GB,現在大約為 30 GB。

執行事務備份並沒有減少日誌文件的大小,我被困在日誌文件已滿且磁碟上沒有空間的位置。作為最後的努力,我執行了 SHRINKFILE(dbname, 4096),它立即減小了大小,一切看起來都很正常。

這樣做之後,我注意到我的備份不再工作並且我收到一個錯誤:

數據錯誤(循環冗餘校驗)失敗。我嘗試執行 CheckDB 並收到以下消息:

目前命令發生嚴重錯誤。結果,如果有的話,應該丟棄。

鑑於我無法備份數據庫,我決定嘗試從當天早些時候恢復完整備份和我創建的 1 個單一事務備份。這兩個文件都很大。我只有 1 個事務備份的原因是因為我禁用了該作業的執行以避免事情進一步失控。

新數據庫啟動並執行,備份工作正常,但大日誌文件的問題仍然存在。我的事務備份現在非常小,但我似乎無法縮小數據庫。

誰有想法?或者,如果有辦法解決原始數據庫上的冗餘問題,那將是一個更可取的解決方案,因為那時我不會失去數據。

沒有未結交易。這log_reuse_wait_desc是“LOG_BACKUP”,我的理解是它正在等待日誌備份執行。這太瘋狂了,因為我已經做了幾個;)dbcc sqlperf(logspace)聲稱我正在使用 92% 的空間。

日誌備份在正常情況下每 15 分鐘執行一次,但就像我提到的那樣,這些備份在周末一直失敗。我暫時關閉了它們以停止驅動器填充並且剛剛手動執行事務備份。該數據庫目前未啟用,因此沒有其他數據進入,我在過去一個小時左右執行了 4 個事務備份作為測試。

此處未配置任何複製、鏡像或 AOAG。

日誌備份的頻率是多少?

使用 dbcc sqlperf(logspace) 檢查日誌中有多少可用空間。

有一些東西正在阻止日誌。檢查該數據庫的 log_reuse_wait_desc 並採取相應措施。

按照下面的文章:

https://www.brentozar.com/archive/2016/03/my-favorite-system-column-log_reuse_wait_desc/

sys.databases 中的 log_reuse_wait_desc 可以在 2 種情況下顯示 LOG_BACKUP:

  1. 等待日誌備份執行
  2. 或者備份的日誌記錄都在目前的VLF中,無法清除。如果日誌備份執行但 log_reuse_wait_desc 仍然顯示為“LOG_BACKUP”,則可能是因為第二個原因。這意味著數據庫上的事務非常少,而且這些事務都在同一個 VLF 上。日誌備份執行時無法清除目前的 VLF;所以 log_reuse_wait_desc 不能被重置。

Paul Randal 在這裡有一篇很棒的文章

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