【问题标题】:Logging errors in SSIS在 SSIS 中记录错误
【发布时间】:2013-07-19 10:09:10
【问题描述】:

我有一个 ssis 项目,其中包含 3 个 ssis 包,一个是父包,它根据某些条件调用其他 2 个包。在父包中,我有一个 foreach 循环容器,它将从一个位置读取多个 .csv 文件,并根据文件名执行两个子包之一,并将数据上传到 MS SQL Server 2008 中的表中. 由于读取了多个文件,如果任何文件在子包中产生错误,我必须在自定义数据库表中记录错误的详细信息(如文件名、错误消息、行号等),删除所有上传到表中并读取下一个文件的记录,对于有效且读取时不会产生任何错误的文件,包不应停止。

假设一个文件有 100 行并且第 50 行有问题,那么我们需要将错误详细信息记录在一个表中,删除在数据库表中上传的第 1 到 49 行,并开始执行包下一个文件。

如何在 SSIS 中实现这一点?

【问题讨论】:

    标签: csv ssis sql-server-2008-r2 error-logging


    【解决方案1】:

    您必须在 foreach 循环容器上设置 TransactionOption=*必需* 和 TransactionOption=*支持* 在其中的控制流项上。如果您的子包中发生任何并发症,这将允许您的事务回滚。更多关于 'TransactionOption' 属性的信息可以在@http://msdn.microsoft.com/en-us/library/ms137690.aspx找到

    通过将目标的错误输出重定向到首选错误目标,可以在子包中执行自定义日志记录。但是,此重定向日志记录仅在插入错误时发生。因此,如果您希望捕获子程序包中任何地方发生的错误,则必须设置一个“OnError”事件处理程序或利用 SSIS 的内置错误日志记录(SSIS -> Logging..)

    【讨论】:

      【解决方案2】:

      我建议您尝试在循环容器中创建两个数据流。这里的主要思想是拥有一组三个表,以更好、更轻松地处理错误情况。在同一流程中,您执行以下操作:

      第一个数据流: 应该读取 .csv 文件并将数据加载到临时表中。如果文件处理错误,您只需截断临时表。此外,您还应该配置平面文件源输出以将错误重定向到错误日志表。

      第二个数据流: 另一方面,在处理无错误的情况下,您需要将行从 temp 传输到目标表。因此,这里的 OLEDB 数据源是“临时表”,而 OLEDB 目标是“最终表”。

      在这两种情况下都不要忘记截断临时表,因为下一个文件需要一个空表。

      【讨论】:

        【解决方案3】:

        让我们稍微分解一下。

        我假设您有一个一次处理单个文件的数据流。数据流将通过源连接读取输入文件,对其进行转换,然后将数据加载到目标。您基本上需要通过选择“重定向行”在转换中实现错误处理程序流。此处提供有关错误流程的详细信息:https://docs.microsoft.com/en-us/sql/integration-services/data-flow/error-handling-in-data

        如果由于格式错误而需要跳过整个文件,则需要为文件系统任务失败实施优先约束。

        我的建议是获取一份 70-463 考试准备书的副本 - 它包含关于您遇到的场景的很好的练习示例。

        【讨论】:

          【解决方案4】:

          我们对 Excel 文件做类似的事情 我们有一个 ErrorsFound 变量,每次在 for each 循环中读取新文件时都会重置该变量。 脚本组件验证数据的每一行,如果发现错误,则将 ErrorsFound 变量设置为 true,并构建一个包含任何错误详细信息的字符串。 然后 - 基于 ErrorsFound 变量 - 导入数据或将错误记录在日志表中。

          当 Excel 文件填写得非常糟糕以至于进程根本无法读取它们时,它会变得有点棘手 - 例如,当在日期、数字或货币字段中输入文本时。在这种情况下,我们使用数据流任务的 OnError 事件处理程序在日志中记录错误,但不知道是哪一行导致了问题

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-13
            相关资源
            最近更新 更多