无论我做什么,都无法收缩事务日志

时间:2009-11-12 00:43:39

标签: sql-server sql-server-2008 transaction-log

我有一个数据库,其tlog已增长到4.5 GB。 数据库处于完全恢复模式,我尝试了多个事务日志备份 DBCC shrinkfile。 它不会缩小。 有没有人有任何想法?

有几个事务的状态= 2,但数据库中没有活动事务。我想知道为什么他们仍然出现status = 2.

6 个答案:

答案 0 :(得分:2)

  • 使用DBCC OPENTRAN获取未结交易
  • MDF有多大?如果它是5GB或更高,我会留下日志文件
  • 也许日志文件需要是他的大
  • 当它增长时,它会再次碎片
  • 查看Paul Randall的网站。他写了很多t-log代码......

最后,如果你真的被卡住了,我会考虑附加/分离来删除日志文件。但是,这只是在你绝望的时候......

答案 1 :(得分:1)

如果您实际上对事务日志的内容不感兴趣,请运行命令

BACKUP LOG dbname WITH NO_LOG

然后运行DBCC SHRINKFILE

编辑:没有意识到2008年已经删除了 - 我们只是转而使用它。在2008年,您必须暂时将恢复模型设置为simple,然后运行DBCC SHRINKFILE,然后再将恢复模型恢复为Full。 代码在这里:

http://www.uhleeka.com/blog/2009/08/sql-2008-shrink-log-file-size-with-no_lo/

答案 2 :(得分:1)

您很可能拥有以下其中一项:

  • 未提交的交易
  • 孤立的交易
  • 长时间运行的操作(如索引碎片整理/重建,创建索引,checkdb,长时间运行的查询等)
  • 如果您正在使用复制,未复制的事务

还有其他一些可能性,但this kb article概述了大多数/所有可能的原因以及如何确定它们是否/在哪里/它们是什么,以及来自this kb article的一些额外的好信息和this kb article(最后一个有点过时,但大多数仍然适用)。

答案 3 :(得分:1)

如果是SQL,则获取数据库的完整备份,然后备份事务日志,然后收缩数据库。出于某种原因,它希望在截断日志之前进行完整备份。你可能可以使用差异,但看看第一部分是否有效。

答案 4 :(得分:0)

我们有一份工作从另一台链接服务器写入数据库。 它做了一些巨大的删除。 我们优化了这项工作,并且能够将日志文件成功缩小到100MB。

谢谢!

答案 5 :(得分:0)

就我而言,即使数据库看起来不像,它也被标记为要复制。

运行以下命令清除了复制,并且收缩文件命令按预期工作。

1)sp_replicationdboption'DatabaseName','publish','false'

2)sp_replicationdboption'DatabaseName','merge publish','false'

3)sp_removedbreplication'数据库名称'

参考:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cc853b02-6f00-49d6-8419-9ad1cb9dbfb5/cant-detachdelete-migrated-db-mistakenly-marked-for-replication?forum=sqlreplication