Sql-Server

在始終可用的情況下縮小數據庫

  • March 23, 2020

您好我正在使用此查詢來縮小數據庫日誌文件

USE Tfs_CoE;
GO
ALTER DATABASE Tfs_CoE
SET RECOVERY SIMPLE;
GO
DBCC SHRINKFILE (Tfs_CoE_Log, 1);
GO
ALTER DATABASE Tfs_CoE
SET RECOVERY FULL;
GO

它工作正常,直到我將數據庫添加到始終在可用性組中,現在我收到此錯誤

消息 1468,級別 16,狀態 2,第 4 行 無法對數據庫“Tfs_CoE”執行操作,因為它涉及數據庫鏡像會話或可用性組。不允許對參與數據庫鏡像會話或可用性組的數據庫執行某些操作。消息 5069,級別 16,狀態 1,第 4 行 ALTER DATABASE 語句失敗。數據庫“Tfs_CoE”的日誌不能收縮,直到所有輔助節點都移過添加日誌的點。

(1 行受影響) DBCC 執行完成。如果 DBCC 列印錯誤消息,請聯繫您的系統管理員。

誰能幫我縮小已經增長到 650gb 的數據庫的日誌文件,該文件配置為始終在可用性組上,數據庫的實際大小僅為 39gb?

我什至檢查了事務日誌的備份,但這對我不起作用,日誌文件大小保持不變 650gb。

對於要在可用性組中的數據庫,它需要處於完全恢復模式。您的部分腳本嘗試將其設置為簡單模式。

當然,更大的問題是,你為什麼要縮小你的日誌?

編輯:好的,看到您的編輯 - 錯誤表明您的輔助數據庫(一個)不是最新的,我會研究為什麼會這樣……您將無法截斷日誌直到所有輔助節點都是最新的。

確保首先在主數據庫上有完整備份或日誌備份,然後從主數據庫執行收縮操作。

由於大量事務,它可能會再次增長,因此您可能想看看是否投入一些日誌備份可能有助於在完全備份發生之前減少增長,或者確定是什麼導致日誌增長得比數據文件大得多——通常這是由於查詢編寫不當或交易量巨大,或者可能是因為您處於完全恢復模式而沒有進行足夠的備份以釋放空間。

  1. 所以在你的主數據庫上做一個完整的備份
  2. 在鏡像的主數據庫上執行 SHRINKFILE 而不更改為 SIMPLE RECOVERY 模式

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