我有一个运行时间很长的过程,可以在整个过程中保持打开事务。
我无法控制它的执行方式。
由于事务在整个持续时间内保持打开状态,因此当事务日志填满时,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的存储空间,但仍然使用了所有存储空间,最终失败了。
我没有意识到这是以前发生的,因为当流程运行一整夜时,它会因故障而回滚。这次,我能够在回滚之前检查日志文件的大小。
谢谢大家的投入。