SSIS包写了0行

时间:2018-03-20 10:36:40

标签: ssis sql-server-2012

是的,我在同一主题上阅读了其他问题,但它们并未涵盖我的问题。

我们运行两个环境; DEV和Prod。这两个在上周同步,这意味着它们应该包含相同的数据,运行相同的SSIS包,并获取相同的源数据。

然而,今天我们有一个关于PROD的包裹通过它的'通常的步骤(3个表被截断,然后从OLEDB源加载到OLEDB目的地,一个接一个)。包完成时没有抛出错误,前两个表包含数据,而最后一个表没有。

在DEV上,一切看起来都很好。

我浏览了包历史记录,它实际上显示它写了0行:

enter image description here

然而,昨天,它按预期工作:

enter image description here

当我手动运行包时,它会写入数据。当我点击"预览"时,它会显示数据。当我手动运行源查询时,它每次都会一致地返回数据,行数相同。 SSIS目录尚未更新(昨天和今天之间未对PROD进行任何更改)。

源查询不使用表变量,但确实使用了CTE。我看到了添加SET NOCOUNT ON的建议,并愿意接受这可能是一个解释。但是,这些答案似乎表明软件包永远不会写任何数据,而这个软件包之前已成功运行,并且在DEV上成功运行。

有没有人有任何解释我如何向我的客户解释我不知道为什么1包突然选择不写任何数据,以及我如何确保这不会再次发生,这个包或任何其他包?

2 个答案:

答案 0 :(得分:1)

这可能很棘手。请尝试以下方法:

  1. Integration Service Catalogs -> SSISDB -> project -> (right click)Reports -> Standard Reports -> All executions下。如果在任何时候检查这里,ETL工作失去了与仓库的联系。
  2. 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. 您如何处理交易和检查点?如果您想了解此问题的根本原因,这一点很重要。可能会发生由于连接丢失而被迫回滚仓库中的任何写入。

答案 1 :(得分:0)

事实证明,问题是由疏忽造成的。

因为我们在同一台服务器上运行DEV和PROD(我们知道,并且建议客户至少考虑使用不同的实例)),我们使用变量来指向适当的环境(在环境中设置)变量)。

提供此特定包的查询已更新,显然不是使用变量来切换数据库,而是硬编码(可能是测试结果,然后忘记更新变量)。 DEV和PROD的负载同时运行,我们怀疑PROD准备就绪时,DEV仍在处理源表,因此返回了0行。

我们今天才发现这一点,因为直到今天早上,负载再次运行良好。我太晚了,无法使用Profiler捕获它,但因为它只是这个包,我检查了一下,并发现了对_DEV的硬编码引用。

感谢所有人的欢呼声。