数据库的事务日志已满

我有一个长期的运行过程,持有整个交易持续时间。

我无法控制这个执行的方式。

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

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

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

不知道我应该尝试下一步。 该过程运行几个小时,所以玩试验和错误并不容易。

有任何想法吗?

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

有足够的磁盘空间,我们有简单的日志logging模式的日志,并已启动日志之前启动进程。

– = – = – = – = – – UPDATE – = – = – = – = –

感谢所有迄今为止的意见。 以下是导致我相信日志不会由于公开交易而增长的原因:

我收到以下错误…

 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 

所以遵循这个build议,我去了“ 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及更高版本)。 延期交易实际上是一个活动交易,其回滚由于某些不可用的资源而被阻止。 有关延期交易原因以及如何将其从延期状态转出的信息,请参阅延期交易。

我误解了一些东西吗?

– = – = – = – UPDATE 2 – = – = – = –

刚刚启动了初始日志文件大小设置为30GB的进程。 这将需要几个小时才能完成。

– = – = – = – 最终更新 – = – = – = –

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

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

感谢您的input。

这是一次性脚本,还是经常发生的工作?

过去,对于临时需要大量日志文件空间的特殊项目,我创build了第二个日志文件,并使其变得庞大。 一旦项目完成,我们然后删除额外的日志文件。

要解决此问题,请将恢复模式更改为简单,然后收缩文件日志

1. 数据库属性>选项>恢复模式>简单

2. 数据库任务>收缩>文件>日志

完成。

然后在数据库属性>文件>数据库文件>path中检查您的数据库日志文件大小

检查完整的SQL服务器日志:打开日志文件查看器在SSMS>数据库>pipe理> SQL Server日志>当前

我有这个错误一次,它最终成为服务器的硬盘驱动器用完磁盘空间。

您是否为日志文件启用了启用自动增长无限制文件增长 ? 您可以在“数据库属性>文件”中通过SSMS编辑这些文件

这是一个老派的方法,但是如果你在SQL中执行迭代更新或插入操作,那么运行很长时间,定期(以编程方式)调用“checkpoint”是个好主意。 调用“检查点”会导致SQL向磁盘写入所有这些仅存储在内存中的更改(脏页面,它们被调用)以及存储在事务日志中的项目。 这具有定期清理您的事务日志的效果,从而防止所描述的问题。

如果您的数据库恢复模式已满并且您没有日志备份维护计划,则会由于LOG_BACKUP而导致事务日志已满而出现此错误。

这将阻止对此数据库的任何操作(例如缩小),并且SQL Server数据库引擎将引发9002错误。

为了克服这种行为,我build议你检查这个数据库“SharePoint_Config”的事务日志已满,由于LOG_BACKUP ,显示详细的步骤来解决这个问题。

以下将截断日志。

 USE [yourdbname] GO -- TRUNCATE TRANSACTION LOG -- DBCC SHRINKFILE(yourdbname_log, 1) BACKUP LOG yourdbname WITH TRUNCATE_ONLY DBCC SHRINKFILE(yourdbname_log, 1) GO -- CHECK DATABASE HEALTH -- ALTER FUNCTION [dbo].[checker]() RETURNS int AS BEGIN RETURN 0 END GO 
Interesting Posts