【问题标题】:How to Track batch packages are worked如何跟踪批处理包的工作
【发布时间】:2018-02-13 10:05:02
【问题描述】:

我的 SSIS 项目中有五个以上的包。面对批量运行包的困难,无法跟踪哪个包没有运行,哪个包失败,哪个包成功。重新运行包批处理如何设置失败的包起始点。

【问题讨论】:

  • 日志没有告诉你吗?
  • 在 sql server 中,转到Integration services catalog -> SSISDB。右键单击它Reports -> Standard reports -> all execution reports。在这里你可以看到所有通过 n 失败。
  • @Prabhat G ,使用标准报告如何设置包重新运行起点?
  • 我的错,我没有读到。但是,我在 SSIS 中使用 Checkpoint 来重新运行失败的包。
  • @Prabhat G,您能描述一下您是如何设置检查点的吗?

标签: sql-server ssis etl sql-server-data-tools


【解决方案1】:

管理包执行

要管理包运行,我更喜欢使用 SQL Server 表。我在 SQL Server 中保留了一个表,其中包含类似的列。

PackageName , LastExecuted , Error , Intervals

创建一个主包,它从这个表中读取数据并根据它们的 LastExecuted 和间隔值执行包。

还执行上次执行时出错的包,依此类推,你明白了。

管理重新运行的起点

根据您的来源和目的地,它可能会有所不同。但是,当您从 SQL Server 中提取或加载到 SQL Server 时,请在 SQL Server 中创建一个可能包含两列的表。

PK_ID , Status

  1. 在包执行的第一步,上传状态 ID = 0(行状态开始)的行的主键值。

  2. 一旦包执行开始设置 Set StatusID = 1 (Row Status Processing )

  3. 一个包执行已完成设置 StatusID = 2 (Row Status Processed)

  4. 最后,在最后一步从该表中删除 StatusID = 2 的行,如果未删除任何内容,则删除已处理的行将在下一次运行中处理。

【讨论】:

  • 感谢您提供的宝贵信息,我不清楚,假设我的数据库中有两个表(表-A,表-B)。我的一个包从表 A 中读取数据并存储在表 B 中。在这个包活动中,我如何设置您定义的流程 1、2、3、4。
  • @shamim 如果它只是从 SQL Server 到 SQL Server 的提取和加载,那么您需要找到一种方法来获取增量数据(新的或不同的),我通常会使用某种获取增量数据的日期列。在将数据上传到实际目的地之前,还可以在目标服务器中使用某种暂存/临时表,对暂存/临时表中的目标表使用UPSERT 操作。以防万一已经有任何东西,它会被更新并插入新的东西。
  • 我认为您的第一种方法更好,因为将数据保存在临时表中确实很昂贵,而且需要比较 UPSERT 中的每条记录,这也很昂贵。请您告诉我如何有效地使用 1,2,3,4 步骤?
  • 仍然卡在这个问题上,请你举一些关于如何管理包执行的例子。
【解决方案2】:

这可能没什么大不了的;在问题解决并且一切恢复正常后,您可以简单地重新启动软件包。事件处理程序和服务器登录可帮助您识别问题,但需要一个有助于识别失败批次的过程来管理重新运行的起点。 article详细描述了重新运行的过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2015-11-19
    相关资源
    最近更新 更多