如何在复制中收缩sql server数据库中的事务日志

11 sql-server

嗨,我有一个生产数据库及其复制的报告数据库.如何在日志文件大小增加时缩小生产数据库中的事务日志文件.我曾尝试过 DBCC SHRINKFILESHRINKDATABASE命令,但它对我不起作用.我无法分离和缩小并作为复制中的数据库附加回来.请帮我解决这个问题.

小智 15

首先通过运行检查导致数据库不缩小的原因:

SELECT name, log_reuse_wait_desc FROM sys.DATABASES
Run Code Online (Sandbox Code Playgroud)

如果您被交易阻止,请找到以下内容:

DBCC OPENTRAN
Run Code Online (Sandbox Code Playgroud)

杀死事务并缩小数据库.

如果阻止的原因是"REPLICATION"并且您确定副本是同步的,则可能需要重置复制事务的状态.要查看数据库仍然认为需要复制的状态,请使用:

DBCC loginfo
Run Code Online (Sandbox Code Playgroud)

您可以通过先关闭Reader代理(我通常只关闭整个SQL Server代理)重置此项,然后在要修复复制问题的数据库上运行该查询:

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time= 0, @reset = 1
Run Code Online (Sandbox Code Playgroud)

关闭执行该查询的连接,然后重新启动SQL Server代理(或只是Reader代理).你现在应该全力以赴收缩你的数据库了.


Mit*_*eat 0

您有定期备份计划吗?

如果没有,我建议您阅读这篇优秀的文章:提高事务日志吞吐量的 8 个步骤