Sql-Server

日誌傳送複製作業不會刪除作為 AlwaysOn 配置一部分的輔助節點上的舊文件

  • September 13, 2016

我有以下設置,所有伺服器都是 SQL 2014 Enterprise:

  • 2 節點 AlwaysOn 可用性組;
  • 用於異地 DR 的第三台伺服器。

正在主節點上進行日誌備份,複製到輔助節點(恢復作業當然被禁用),然後複製並恢復到 DR 伺服器。

一切都很好,除了日誌備份文件沒有在輔助節點上被刪除。我注意到它是因為該文件夾一直在增長,當我打開它時,我看到所有日誌都在那裡,因為從設置日誌傳送的第一天開始。所有作業都在沒有錯誤的情況下執行,並且設置了保存日誌備份的時間間隔。我該如何解決這個問題?


**更新:**顯然,刪除舊文件的過程實際上是 RESTORE 作業的一部分,並且是 COPY 作業的一部分。

現在的問題是,我是否也可以在輔助 AlwaysOn 節點上安全地執行 RESTORE 作業?

您不想確保輔助日誌以一定的時間間隔恢復到輔助伺服器嗎?通過日誌傳送,我認為您將日誌傳送到您的輔助數據庫,然後從這些數據庫中恢復,以使輔助數據庫盡可能接近您的主數據庫。

您是否看到任何不想在日誌傳送配置中自動在輔助數據庫上恢復日誌傳送的原因?

一旦將這些日誌文件應用於輔助數據庫,該作業將清除不再需要的日誌,因為這些日誌當時反映在輔助數據庫中。

測試一下,看看效果如何。

編輯:@nulldotzero

好的,因為您無法在 AlwaysOn 配置中在主伺服器或輔助伺服器上執行恢復操作,並且因為您還將 TRN 日誌文件複製到輔助伺服器以及 DR 以實現冗餘,所以您可以只在輔助伺服器上設置 SQL 代理作業例如,在您認為需要清除的任何時間執行以下操作。

--This will set the date time stamp to pass onto the Stored Proc for 72 hours from the current date when it runs
--The stored proc will recursively delete all TRN files from the parent level specified all the way down
declare @DeleteDate nvarchar(50)
declare @DeleteDateTime datetime
set @DeleteDateTime = DateAdd(hh, -72, GetDate())
set @DeleteDate = (Select Replace(Convert(nvarchar, @DeleteDateTime, 111), '/', '-') + 'T' + Convert(nvarchar, @DeleteDateTime, 108))

--5th argument below "0 - don't delete recursively (default)" and  "1 - delete files in sub directories"
EXECUTE master.dbo.xp_delete_file 0,N'S:\MSSQL\Backup\TransactionLog\',N'trn', @DeleteDate,1

由於日誌備份文件是從 LSRestore for DR 執行並獲取的位置清除的,因此一旦恢復作業成功完成,該作業將處理這些文件。

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