重定向后处理SSIS错误行的正确过程?

时间:2018-06-22 22:21:21

标签: sql-server ssis sql-server-2012 etl data-warehouse

通常,我将创建我的软件包,以使软件包在出现错误时失败,并在sql服务器作业上设置警报,以在发生这种情况时通过电子邮件发送给我。然后,我可以查看sql服务器日志以查看特定的错误,导致该错误的值等。或者只需重新运行在Visual Studio中出错的程序包,然后查看进度选项卡以查看发生了什么。这样一来,就不会插入任何不良数据。

我正在为当前想要在其程序包上进行错误处理和错误行重定向的客户端工作。这是这些的增量负载模式。他们每天都会从其软件供应商那里获取txt文件,以获取任何新行或更改的行,并且程序包将插入新行并从登台表更新已更改的行,然后将txt文件移至已处理的文件夹,一段时间后将被删除时间。

我为平面文件源和目标表添加了错误行重定向。然后创建一个错误行表,该表接受错误行,进行所有并集,然后将它们重定向到该行。它具有典型列,错误代码,错误列,包名称,插入日期。 Plus它具有一个文本字段,可以捕获平面文件中错误出行的所有数据。问题是目的地没有唯一的来源。

因此,如果某行由于插入中的数据约束问题而出错,那么它将对其进行重定向,而我只得到了一个带有错误代码,程序包名称的行,但该行中没有数据出错。在这种情况下,错误代码之一是 -1071607683,并且对其进行谷歌搜索似乎没有帮助。

由于软件包没有失败并且仍然可以成功运行,所以我没有收到有关代理作业任何问题的通知,并且sql代理作业历史记录中没有错误消息,告诉我有问题。如果我每天都不检查并发现有问题,那么包含您需要的行的已处理文件之一将最终被删除。

我唯一能想到的就是在错误表上放置一个触发器,该触发器将在插入行时向我发送电子邮件,但是我仍然必须再次运行并调试该包,以使整个文件失败。找到一个问题行。无论如何,我都必须在没有错误行重定向的情况下执行此操作,但是通过使程序包继续运行会导致更多问题,如下所示。然后,当您使用重定向对其进行调试时,它不会告诉您为什么在“进度”选项卡上对行进行了重定向,您必须删除错误优先级约束并将目标设置为失败,而不是重定向才能使错误显示出来会再次告诉您行的问题。

由于这发生在新的维度表行上,并且我具有对事实表的引用完整性,因此,与该新维度相关的插入行的所有事实也会失败,并且将更多行插入错误表中,而没有关于该行的信息因为它在目标插入上。如果第一个出现问题行的程序包失败并停止了整个ETL过程,那么所有这些都将被避免。

每篇在线文章仅告诉您如何设置错误行重定向,但是当您遇到数据问题时不告诉您如何使用此方法在发生错误后有效识别和修复错误数据。

所以我的问题是,为什么以及为什么有人会使用此功能来设置适当的etl负载?在我当前的项目中有效使用此方法的正确方法是什么,这样我就不会遇到所有这些问题了?

0 个答案:

没有答案