今天按常用方法收縮一個測試用的數據庫日志,發現沒法收縮!
- 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

http://blog.csdn.net/kk185800961/article/details/41865073
