我有一个长时间运行的流程,在整个过程中保持打开的事务.
我无法控制执行的方式.
由于事务在整个期间保持打开状态,因此当事务日志(log)填充时,SQL Server无法增加日志(log)文件的大小.
因此,该过程失败,错误为"The transaction log for database 'xxx' is full"
.
我试图通过增加数据库属性中事务日志(log)文件的大小来防止这种情况,但我得到了相同的错误.
我不确定下一步该怎么做.这个过程要运行几个小时,所以不容易反复try .
有什么 idea 吗?
如果有人感兴趣,这个过程是一个Microsoft Dynamics CRM 4.0.
年的组织导入
有足够的磁盘空间,我们以简单的日志(log)记录模式保存日志(log),并在启动过程之前备份了日志(log).
-=-=-=-=-更新-=-=-=-=-
谢谢大家到目前为止的 comments .以下是让我相信日志(log)不会因为开放事务而增长的原因:
我得到以下错误...
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
所以按照这个建议,我 Select 了"log_reuse_wait_desc column in sys.databases
",它的值是"ACTIVE_TRANSACTION
".
据微软称:
这意味着:
事务处于活动状态(所有恢复模式).
•事务被延迟(仅限SQL Server 2005 Enterprise Edition及更高版本).延迟事务实际上是一个活动事务,其回滚由于某些不可用的资源而被阻止.有关延迟事务的原因以及如何将其移出延迟状态的信息,请参阅延迟事务.
我误解了什么吗?
-=-=-=-更新2-=-=-=-
刚开始,初始日志(log)文件大小设置为30GB.这需要几个小时才能完成.
-=-=-=-最终更新-=-=-=-
这个问题实际上是由于日志(log)文件占用了所有可用的磁盘空间造成的.在最后一次try 中,我释放了120GB,但它仍然使用了所有的容量,最终失败了.
我之前没有意识到这一点,因为当流程在一夜之间运行时,它会在失败的情况下回滚.这次我能够在回滚之前判断日志(log)文件的大小.
谢谢大家的意见.