我有一个长时间运行的流程,在整个过程中保持打开的事务.

我无法控制执行的方式.

由于事务在整个期间保持打开状态,因此当事务日志(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)文件的大小.

谢谢大家的意见.

推荐答案

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

过go ,对于临时需要大量空间来存放日志(log)文件的特殊项目,我创建了第二个日志(log)文件,并将其变大.项目完成后,我们删除了额外的日志(log)文件.

Sql相关问答推荐

提取Snowflake SQL中的嵌套键

从2个表中查找每条记录的唯一最接近的日期匹配

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

SQL基于多个值 Select 单行

MariaDB查询在逗号分隔的字符串中查找多个值

PostgreSQL基于2个COLS的任意组合 Select 唯一行

收到%1、%2或%2邮箱的唯一客户

每年独特口味的冰淇淋数量

正在try 从SQL获取最新的ID和一个唯一名称

使用SQL数据库中的现有列派生或修改几个列

从给定数据中查找下一个工作日期

根据日期 Select ID 的上一条记录

如何修复初学者 SQL INNER JOIN 查询错误

日期逻辑(查找过go 90 天内的第一个匹配行)

计算 ID 满足条件的次数

使用SQLAlchemy和Postgres数据库创建新行时,为什么我的创建日期比更新日期晚?

如何创建一个递归计数器来查找一个元素有多少父级和子级?

for each 客户查找每个类别的最新评分

在 Microsoft SQL Server 中,如何只为特定值保留不同的行?

Postgres 窗口函数未按预期工作