1. 程式人生 > >SqlServer 數據庫日誌無法收縮處理過程

SqlServer 數據庫日誌無法收縮處理過程

check == 收縮數據庫 之前 分享 活動 適用於 truncate 過程

今天按常用方法收縮一個測試用的數據庫日誌,發現沒法收縮!
dbcc sqlperf(logspace)
技術分享圖片

USE [dbname]
GO
 
ALTER DATABASE [dbname] SET RECOVERY SIMPLE WITH NO_WAIT
GO
DBCC SHRINKFILE (N‘dbname_log‘ , 0, TRUNCATEONLY)
GO
DBCC SHRINKDATABASE(N‘dbname‘ )
GO

日誌大小還是一樣。

技術分享圖片 技術分享圖片 DBCC OPENTRAN 查看是否打開的事務。發現有打開的事務,執行檢查點再收縮,還是不行!
DBCC OPENTRAN (dbname) 
CHECKPOINT

技術分享圖片

參考:http://bbs.csdn.net/topics/350199751,將日誌事務標誌為已分發,再收縮,不行!

--日誌中所有復制的事務將標記為已分發
EXEC sp_repldone @xactid = NULL,@xact_segno = NULL,@numtrans = 0,@time = 0,@reset = 1

技術分享圖片  

現在查看虛擬日誌文件,發現有很多,並且都處於活動狀態

dbcc loginfo

技術分享圖片 

最重要的語句竟然忘了,這可以查看日誌空間的重復使用正在等待最後一個檢查點的描述.。發現是REPLICATION

SELECT name,log_reuse_wait_desc FROM sys.databases where name=‘dbname‘

技術分享圖片

這個數據庫之前有作為事物同步過,但是都刪除了。分發庫也不存在了,現在竟然還有日誌在等待?!

參考http://bbs.csdn.net/topics/390674731?page=1 ,執行刪除所有復制對象。

--刪除當前數據庫中所有復制對象
EXEC sp_removedbreplication dbname

再看日誌重用狀態,正常了!看來有效!

技術分享圖片

在收縮數據庫,查看已經收縮了!其他也恢復正常!
DBCC SHRINKFILE (N‘dbname_log‘ , 0, TRUNCATEONLY)
GO
DBCC LOGINFO
GO
DBCC OPENTRAN (dbname) 
GO

技術分享圖片

此收縮方法,適用於發布過數據庫訂閱同步的情況,一般正常情況下,都可以收縮日誌。

轉自:https://blog.csdn.net/kk185800961/article/details/41865073

 

SqlServer 數據庫日誌無法收縮處理過程