SQL Server日志文件不会因非复制数据库上的“日志正在等待复制”而收缩?

我有一个非Mission Mission DB 9 am-5pm SQL Server数据库,我已经设置为在工作时间每30分钟进行一次夜间完全备份和日志备份。 数据库正在完全恢复,通常我没有理由截断/收缩日志,除非我做了一些大量的维护。 日志备份pipe理的大小没有问题。 然而,我几个星期没有到这个客户那里,经过检查,我发现日志已经增长到.mdf文件大小的10倍左右。 我探讨了备份已经运行,我没有得到任何严重错误警报(SQL邮件)。 我试图把DB简单的恢复和收缩日志,这是不好的。 我之前尝试一个日志备份,我得到了:

日志未被截断,因为日志开始处的logging是暂挂复制或更改数据捕获。 确保日志读取器代理或捕获作业正在运行或使用sp_repldone将事务标记为分布式或捕获。

重新启动SQL Server冲洗重复同样的事情…

我说 ??? 这个数据库或数据库/服务器上的复制是不是也没有设置? 所以日志备份没有刷新.ldf。 所以我做了几个小时的研究,发现:

http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server/5445/Log-file-is-not-truncated-inspite-of-regular-log-backup

http://www.eggheadcafe.com/software/aspnet/30708322/the-log-was-not-truncated-because-records-at-the-beginning-of-the-log-are-pending-replication.aspx

似乎是某种forms不佳的错误?

该解决scheme似乎已经运行exec sp_repldone,更精确

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

在紧急情况下可以使用此过程,以便在存在等待复制的事务时允许截断事务日志。 使用此过程可防止Microsoft SQL Server 2000复制数据库,直到数据库取消发布并重新发布。 〜MSDN

当我这样做,我得到以下

消息18757,级别16,状态1,过程sp_repldone,行1无法执行过程。 该数据库未发布。 在发布用于复制的数据库中执行该过程。

这是有道理的因为数据库从来没有发布复制。

我有几个问题:

A)首先是,WTF正在进行? 这是什么原因导致我有兴趣知道这里的原因? 这个genuinley是一个错误还是有一些方面的备份不能正常工作,因为数据库模仿复制状态? 有人请在这上面造就我。

B)第二个…我真的不得不发布/复制这个数据库来执行这个SP来解决这个问题吗? 听起来很疯狂,或者是否有一些T-SQL,我可以把它放在一个发布的状态执行PROC,并在我的路上…

C)第三,如果我真的必须发布这个数据库来执行SP来释放这个不需要的错误复制/预期的日志,让我的.ldf文件和备份回到正轨。 如何在没有在线主机的情况下发布数据库? 我通常不做这种数据库pipe理,需要一些指导。

对不起,如果这是太冗长,但只是表示这个问题可以帮助我澄清它…

预先感谢您的帮助

我有同样的问题

我做了SELECT name, log_reuse_wait_desc FROM sys.databases

它告诉我没有清空日志的原因是REPLICATION

我试过了

sp_removedbreplication youdbname

并修复它

我们几乎有这个问题。 复制甚至没有安装(SQL 2008),但在sys.databases中,我们的一个dbs是突然,没有理由,我可以find,设置为复制。

我们不得不做很糟糕的事情来恢复数据库,因为日志文件增长得非常快,当然,正常的冲洗日志的过程也不能工作。

之前我才意识到复制设置是个问题。 到那时,日志文件已满。 令人惊讶的是,即使我们能够恢复数据库,该复制设置仍然设置。

这是删除该设置:

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

数据库启用CDC,CDC和复制使用相同的技术。

1运行select DATABASEPROPERTY('','ISPublished') – 应该返回0

  1. 检查数据库是否启用了CDC。 转到数据库,并从sys.dm_repl_traninfoselect*这应该是空的

3 DBCC loginfo – 查找值为2的状态列

  1. DBCC OPENTRAN – 检查是否有一些长时间运行的事务。

  2. 即使所有这些都没有帮助,那么我们可能必须启用复制和e

检查数据库是否有CDC(更改数据捕获)或其他types的日志阅读器服务器启用。 这通常会导致完全相同的问题。 我有一个启用CDC的生产数据库,我复制到一个开发服务器,并不断遇到这个问题。 当CDC代理作业最近没有运行时,我也有CDC启用的生产服务器出现此错误。 CDC代理作业通常会持续运行,但是如果失败,它将停止并且不会再次启动,除非您更改了设置。

希望这可以帮助。

我有这个完全相同的问题,我find了一个更简单的解决scheme:

  • 分离数据库
  • 删除日志文件
  • 通过使用指定FOR ATTACH_REBUILD_LOG的CREATE DATABASE语句重新附加它

(注意,这是在SQL 2K8上)