是的,我在同一主题上阅读了其他问题,但它们并未涵盖我的问题。
我们运行两个环境; DEV和Prod。这两个在上周同步,这意味着它们应该包含相同的数据,运行相同的SSIS包,并获取相同的源数据。
然而,今天我们有一个关于PROD的包裹通过它的'通常的步骤(3个表被截断,然后从OLEDB源加载到OLEDB目的地,一个接一个)。包完成时没有抛出错误,前两个表包含数据,而最后一个表没有。
在DEV上,一切看起来都很好。
我浏览了包历史记录,它实际上显示它写了0行:
然而,昨天,它按预期工作:
当我手动运行包时,它会写入数据。当我点击"预览"时,它会显示数据。当我手动运行源查询时,它每次都会一致地返回数据,行数相同。 SSIS目录尚未更新(昨天和今天之间未对PROD进行任何更改)。
源查询不使用表变量,但确实使用了CTE。我看到了添加SET NOCOUNT ON
的建议,并愿意接受这可能是一个解释。但是,这些答案似乎表明软件包永远不会写任何数据,而这个软件包之前已成功运行,并且在DEV上成功运行。
有没有人有任何解释我如何向我的客户解释我不知道为什么1包突然选择不写任何数据,以及我如何确保这不会再次发生,这个包或任何其他包?
答案 0 :(得分:1)
这可能很棘手。请尝试以下方法:
Integration Service Catalogs -> SSISDB -> project -> (right click)Reports -> Standard Reports -> All executions
下。如果在任何时候检查这里,ETL工作失去了与仓库的联系。 2.如果您启用了日志记录,请尝试查看您的软件包开始返回的任务名称0:
select
data_stats_id,
execution_id,
package_name,
task_name,
source_component_name,
destination_component_name,
rows_sent
from
ssisdb.catalog.execution_data_statistics
答案 1 :(得分:0)
事实证明,问题是由疏忽造成的。
因为我们在同一台服务器上运行DEV和PROD(我们知道,并且建议客户至少考虑使用不同的实例)),我们使用变量来指向适当的环境(在环境中设置)变量)。
提供此特定包的查询已更新,显然不是使用变量来切换数据库,而是硬编码(可能是测试结果,然后忘记更新变量)。 DEV和PROD的负载同时运行,我们怀疑PROD准备就绪时,DEV仍在处理源表,因此返回了0行。
我们今天才发现这一点,因为直到今天早上,负载再次运行良好。我太晚了,无法使用Profiler捕获它,但因为它只是这个包,我检查了一下,并发现了对_DEV的硬编码引用。
感谢所有人的欢呼声。