数据库的事务日志已满

新手上路,请多包涵

我有一个长时间运行的进程,可以在整个持续时间内保持打开事务。

我无法控制它的执行方式。

因为事务在整个持续时间内保持打开状态,所以当事务日志填满时,SQL Server 无法增加日志文件的大小。

因此该过程失败并出现错误 "The transaction log for database 'xxx' is full"

我试图通过增加数据库属性中事务日志文件的大小来防止这种情况,但我得到了同样的错误。

不知道接下来我应该尝试什么。该过程会运行几个小时,因此试错并不容易。

有任何想法吗?

如果有人感兴趣,该过程是 Microsoft Dynamics CRM 4.0. 中的组织导入

有足够的磁盘空间,我们有简单日志模式的日志,并在开始进程之前备份了日志。

-=-=-=-=- 更新 -=-=-=-=-

感谢大家到目前为止的评论。以下是让我相信日志不会因为打开的事务而增长的原因:

我收到以下错误…

 Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

所以按照这个建议,我去了“ log_reuse_wait_desc column in sys.databases ”,它的值是“ ACTIVE_TRANSACTION ”。

根据微软:http: //msdn.microsoft.com/en-us/library/ms345414 (v=sql.105).aspx

这意味着以下内容:

事务处于活动状态(所有恢复模型)。 • 日志备份开始时可能存在长时间运行的事务。在这种情况下,释放空间可能需要另一个日志备份。有关详细信息,请参阅本主题后面的“长时间运行的活动事务”。

• 事务被延迟(仅限 SQL Server 2005 Enterprise Edition 和更高版本)。延迟事务实际上是一个活动事务,其回滚由于某些不可用资源而被阻止。有关延迟事务的原因以及如何将它们移出延迟状态的信息,请参阅延迟事务。

我误解了什么吗?

-=-=-=- 更新 2 -=-=-=-

刚开始这个过程,初始日志文件大小设置为 30GB。这将需要几个小时才能完成。

-=-=-=- 最终更新 -=-=-=-

该问题实际上是由日志文件消耗所有可用磁盘空间引起的。在最后一次尝试中,我释放了 120GB,但它仍然使用了所有空间,最终失败了。

我之前没有意识到这会发生,因为当进程在一夜之间运行时,它会在失败时回滚。这次我能够在回滚之前检查日志文件的大小。

感谢大家的意见。

原文由 Jimbo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 655
2 个回答

我曾经遇到过这个错误,它最终是服务器的硬盘驱动器磁盘空间不足。

原文由 PretoriaCoder 发布,翻译遵循 CC BY-SA 3.0 许可协议

解决: 根据错误,驱动器中剩余的可用空间不足。要解决它,您可以扩展驱动器空间或将 MDF/LDF/LOG 文件移动到具有足够空间的驱动器。 注意: 从以下步骤检查现有路径

数据库属性 -> 选择文件选项 在此处输入图像描述

原文由 SatyaRavi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进