在每日作业计划的某一天,我收到错误数据库 dbname 的事务日志已满,原因是“ACTIVE_TRANSACTION”

Posted

技术标签:

【中文标题】在每日作业计划的某一天,我收到错误数据库 dbname 的事务日志已满,原因是“ACTIVE_TRANSACTION”【英文标题】:On a certain day in the daily job schedule i get the error The transaction log for database dbname is full due to 'ACTIVE_TRANSACTION' 【发布时间】:2017-06-02 03:38:33 【问题描述】:

我有一个批处理作业每天都可以正常执行,但是从周五晚上到周六早上运行的作业给了我以下错误:

由于“ACTIVE_TRANSACTION”,数据库“Db name”的事务日志已满,无法执行。

你能帮我理解这个问题吗?

【问题讨论】:

批处理文件的内容是什么? 不涉及批处理文件,基本上是问题发生的级别,它在执行 sql 任务中调用显式事务,从删除语句开始,然后从连接开始将数据插入目标表查询作为源的各种表。 你会截断日志文件吗? 我的数据库恢复处于简单恢复模式,所以我相信它会使用检查点自动配置日志文件的截断过程......但我没有手动执行此操作。但是,如果您在这方面有任何建议,请告诉我 如果是简单恢复,那么您必须手动截断日志文件,只有当您有无法控制的活动事务时才会发生这种情况 【参考方案1】:

尝试小批量删除数据,而不是单个事务。

While (@RecordCount > 0)
  BEGIN
       DELETE top 5000 FROM <<TABLE>>
       <<where condition>>
     SET @RecordCount = @@RowCount
  END

【讨论】:

以上是关于在每日作业计划的某一天,我收到错误数据库 dbname 的事务日志已满,原因是“ACTIVE_TRANSACTION”的主要内容,如果未能解决你的问题,请参考以下文章

批处理 + 文件 + 一年中的某一天

SQL/ms-access 中的条件仅考虑月份中的某一天,而不是完整日期

根据年,月,周,计算具体的某一天(星期一)

你如何将 POSIX 日期转换为一年中的某一天?

将一年中的某一天转换为某些日期格式具有 DDYYYY 并且某些日期格式具有 DDDYYYY 在 oracle 中的日期

长沙聚财科技-冲刺日志(第5天)