我有一个长时间运行的进程,在整个持续时间内保持打开一个事务。数据库的事务日志已满
我无法控制它的执行方式。
因为事务在整个持续时间内保持打开状态,所以当事务日志填满时,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及更高版本)。延迟事务实际上是一个活动事务,其回滚由于某些不可用的资源而被阻止。有关延期交易原因以及如何将其移出延期状态的信息,请参阅延期交易。
我误解了一些东西吗?
- = - = - = - UPDATE 2 - = - = - = -
刚启动了与设定为30GB初始日志文件的大小的过程。这将需要几个小时才能完成。
- = - = - = - 最后的更新 - = - = - = -
这个问题实际上是由日志文件消耗所有可用磁盘空间所致。在最后一次尝试中,我释放了120GB,它仍然使用了所有这些,最终失败了。
我没有意识到这是以前发生的,因为当这个过程在一夜之间运行时,它会在失败时回滚。这次我能够在回滚之前检查日志文件的大小。
谢谢大家的意见。
重新“...并备份了日志”....如果数据库处于简单模式,您将无法备份日志,日志备份不适用于简单模式。它是否被批量记录? – SqlACID
我备份了整个数据库并对其进行了缩小,导致日志缩小到1MB。然后,我将日志文件的大小最初增加到20GB,现在增加到30GB。 – Jimbo