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

时间:2009-08-06 12:15:38

标签: sql-server

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

5 个答案:

答案 0 :(得分:12)

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

SELECT name, log_reuse_wait_desc FROM sys.DATABASES

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

DBCC OPENTRAN

终止事务并缩小数据库。

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

DBCC loginfo

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

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time= 0, @reset = 1

关闭执行该查询的连接,然后重新启动SQL Server代理(或只是Reader Agent)。您现在应该已经准备好缩小数据库了。

答案 1 :(得分:1)

数据库不允许您删除未备份的事务数据。首先,您必须备份事务日志,然后才能缩小它。

答案 2 :(得分:0)

您是否有定期的备份计划?

如果没有,我建议您阅读这篇优秀的文章:8 Steps to better Transaction Log throughput

答案 3 :(得分:0)

使用dbcc shrinkfile缩小日志文件

然后使用

截断日志文件
  

使用truncate_only

备份databaseName

然后再次收缩日志文件

答案 4 :(得分:0)

我使用Red-Gate's SQL Backup工具来处理备份。然后我只使用管理控制台在日志文件上发出一个收缩命令(告诉它在释放未使用的空间之前重新排列页面)。

像魅力一样。