数据流任务失败,因为 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 已满的主要内容,如果未能解决你的问题,请参考以下文章