数据流任务失败,因为 TempDB 已满

Posted

技术标签:

【中文标题】数据流任务失败,因为 TempDB 已满【英文标题】:Data flow task fails because TempDB is full 【发布时间】:2020-08-13 08:44:25 【问题描述】:

我的 OLE DB 源查询如下所示:

select a,b,sum(c)
from(select a,b,c from t1 union all 
     select a,b,c from t2 union all 
     select a,b,c from t3) a
inner join t2 on ...
group by a,b

它给了我以下错误:

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“警告:空值被聚合或其他 SET 操作消除。”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80040E14 描述:“由于文件组 'DEFAULT' 中的磁盘空间不足,无法为数据库 'TEMPDB' 分配新页面。通过删除文件组中的对象创建必要的空间,添加附加文件到文件组,或为文件组中的现有文件设置自动增长。"。

源表并没有那么大,它们之间有大约 3M 行。知道如何处理 tempdb 错误吗?

【问题讨论】:

你真的想要union吗?这会增加删除重复项的开销。一般推荐union all 是的,确实是 union all,我的错 确保 1) 磁盘上有足够的空间 2) tempdb 的大小不受限制或有足够的空间用于查询(数据库属性 -> 文件) 【参考方案1】:

预聚合表格可能有帮助:

select a, b, sum(c)
from ((select a, b, sum(c) as c
       from t1
       group by a, b
      ) union all 
      (select a, b, sum(c) as c
       from t2
       group by a, b
      ) union all 
      (select a, b, sum(c)
       from t3
       group by a, b
      )
     ) t inner join
     t2
     on ...
group by a, b;

【讨论】:

以上是关于数据流任务失败,因为 TempDB 已满的主要内容,如果未能解决你的问题,请参考以下文章

我使用金蝶K3财务软件 今天突然报错说是 数据库 tempdb 日志已满请备份该数据库的事物日志及释放一些空间

电脑开机提示:日志已满

SQL Server中的Tempdb已满

数据库日志已满,如何处理?

数据库日志已满,如何处理?

数据库 'DJABC' 的日志已满.请备份该数据库的事务日志以释放一些日志空间.