Sql-Server-2008-R2

由於快照複製,無法收縮日誌文件

  • October 23, 2020

我們的數據庫日誌(SQL Server 2008 R2)變得太大,通過 DBCC SHRINKFILE 截斷它不起作用(數據庫設置為簡單恢復模式)。

一點背景。幾天前我發布了對我們的實時伺服器的一些更改,我需要從我所做的快照複製中刪除一些文章,進行更改,然後重新添加已刪除的文章。但是,當我嘗試重新初始化訂閱者時,我遇到了一個奇怪的錯誤(不幸的是我沒有保存,並且在下一個發布視窗之前不允許重新創建)。我將複製程序設置為再次執行,但它似乎鎖定了日誌文件。

select log_reuse_wait_desc from sys.databases where name = '<dbname>'

給出“複製”的結果。

DBCC OPENTRAN ('<dbname>')

數據庫“< dbname >”的事務資訊。

複製的事務資訊:最舊的分佈式 LSN:(0:0:0) 最舊的非分佈式 LSN:(3891297:327:1) DBCC 執行完成。如果 DBCC 列印錯誤消息,請聯繫您的系統管理員。

我已經做了一些閱讀,我懷疑修復它的方法是殺死一個阻塞的 spid 或以某種方式使用 sp_repldone,但是……

exec distribution.dbo.sp_browsereplcmds @xact_seqno_start = '0x003B6061000001470001', @xact_seqno_end = '0x003B6061000001470001'

什麼都不返回。我不確定我是否正確轉換了 lsn。

我不是 DBA,他目前不可避免地在國外,讓他從事這方面的工作會很糟糕。我更願意解決日誌增長問題,並讓他研究為什麼在他回來後重新初始化不起作用,但這是一個時間敏感問題,因為我們將在周日某個時候以目前的增長速度耗盡空​​間。

我不能做任何過於激烈的事情,因為我們在同一台伺服器上執行了其他發布(事務複製)。任何關於我應該做什麼的想法現在都會非常感激。

如果您確定所有內容都已復製到所有訂閱者,並且您現在確實需要縮小它,您可以試試這個。

  1. 在複製數據庫中執行以下程式碼段。它會將所有複製標記為成功,並且您的複制隊列將為空。確保情況確實如此!否則你可能會失去一些需要複製的元素。

腳本:

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, 
    @numtrans = 0, @time = 0, @reset = 1
  1. 進行備份並跟踪日誌。它現在應該是空的。

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