Sql-Server

當它是鏡像中的主體時,如何縮小物理事務日誌文件?

  • March 23, 2016

我們在周末設置了數據庫鏡像,忘記重新啟用備份事務日誌的作業。今天早上我進來時,事務日誌已經膨脹到 58GB,並且佔用了大部分驅動器空間。

我將事務日誌手動備份到磁碟以使數據庫再次執行,但是執行 DBCC SHRINKFILE 似乎不會減小事務日誌文件的物理大小。

DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000)

如果我使用檢查日誌使用情況

DBCC SQLPERF(LOGSPACE)

我可以看到目前日誌只有 22% 被使用

數據庫名稱 日誌大小 (MB) 已用日誌空間 (%) 狀態
我的數據庫名稱 55440.87 22.38189 0

如果我log_reuse_wait_desc在 sys.databses 中籤出,我看到的唯一記錄是DATABASE_MIRRORING,所以我猜測鏡像在日誌文件的物理大小不會縮小的原因中發揮了作用?

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = N'MyDatabaseName';

我還注意到我的主體數據庫鏡像狀態為 Suspended,嘗試立即恢復它失敗並出現以下錯誤:

數據庫“MyDatabaseName”的遠端鏡像夥伴遇到錯誤 5149,狀態 1,嚴重性 25。數據庫鏡像已暫停。解決遠端伺服器上的錯誤並恢復鏡像,或者刪除鏡像並重新建立鏡像伺服器實例。

鏡像伺服器上的錯誤日誌也包含此錯誤,但也包含有關日誌文件驅動器已滿的錯誤

MODIFY FILE 在嘗試擴展物理文件時遇到作業系統錯誤 112(磁碟上沒有足夠的空間。)。

F:\Databaselogs\MyDatabaseName_1.ldf:遇到作業系統錯誤 112(磁碟空間不足。)。

主體伺服器在日誌文件驅動器上有 60GB(這里托管了其他數據庫),而鏡像伺服器只有 45GB。

備份日誌文件使數據庫再次可用,但是我還想減小磁碟上物理日誌文件的大小,並恢復鏡像。

如何在不影響鏡像或備份鏈的情況下縮小物理事務日誌文件的大小?

我正在執行 SQL Server 2005

據我所知,我不能。

我相信大部分日誌文件都在等待鏡像到鏡像伺服器,但是鏡像已關閉且無法恢復,因為鏡像事務日誌也已增長到佔用磁碟上的所有空間。

DBCC SHRINKFILE一旦我刪除了鏡像,該命令正確地縮小了物理日誌文件,並且log_reuse_wait_desc返回等待,這一事實進一步支持了這一理論LOG_BACKUP

我無法縮小鏡像伺服器上的日誌文件,因為它充當鏡像並且無法打開,所以我認為鏡像是不可恢復的。

所以我將完全刪除鏡像,然後重新設置所有內容(使用 300GB 數據庫的過程非常緩慢)。而這一次,我將確保在啟動鏡像之前事務日誌大小相當小,並且一旦鏡像備份並執行,事務日誌備份就會執行。

我還將對生產伺服器上的事務日誌可以增長的大小設置一個限制,因此鏡像永遠不會嘗試將其事務日誌增長到磁碟上可用的大小之外。

今天我們的數據庫也遇到了同樣的問題,由於某種原因,它已經停止備份過去 3 個月的事務日誌,並且日誌已經膨脹到 200GB。

與您的情況完全相同的錯誤程式碼,並且鏡像不會恢復。鏡像上的日誌驅動器已滿。

幸運的是,我能夠通過刪除日誌驅動器上的一些雜散舊日誌來釋放一些空間。之後,能夠恢復鏡像。

然後進入維護計劃備份並手動觸發數據庫和事務日誌備份。即使在備份之後,事務日誌文件仍然很大。所以我不得不反復告訴 SQL Studio 縮小日誌文件(釋放任何未使用的空間),經過幾個小時的幾次嘗試,它把它們縮小到更易於管理的大小。

希望這可以幫助。

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