SSIS 中诊断日志记录的基本方法

Basic Approach to Diagnostic Logging in SSIS

this microsoft link 的帮助下,我了解到许多与 SSIS 诊断相关的工具:

  1. 事件处理程序(特别是“OnError”)
  2. 错误输出
  3. 运营报告
  4. SSISDB 视图
  5. 日志记录
  6. 调试转储文件

我只想知道使用 SSIS 进行(非生产)诊断设置的基本“转到”方法是什么。我是一名开发人员,可以访问 QA 和 UAT 服务器,我将在其中执行诊断。

在我第一次尝试查找错误来源时,我使用 SSMS 查看操作报告。我只看到了这个:

我按照上面显示的说明进行操作,但它所做的只是让我转了一圈。概览让我看到了细节,但是细节显示了上面的信息,让我回到概览。简而言之,除了告诉我 SSIS 包中哪个任务失败之外,错误信息为零。

我只是想到达一个地步,在那里我终于可以看到关于错误的一些东西。

如果答案是我首先需要在我的包中配置一个 OnError 事件,那么我的下一个问题是:该 OnError 事件的基本“转到”设计器流程是什么样的?

仅供参考,此问题类似于“best way of logging in SSIS

我还注意到 overall strategy for success with SSIS in this answer。作者说:

Instrument your code - have it make log entries, possibly recording diagnostics such as check totals or counts. Without this, troubleshooting is next to impossible. Also, assertion checking is a good way to think of error handling for this (does row count in a equal row count in b, is A:B relationship really 1:1).

听起来不错!但我想要一个更具体的例子......特别是为了让我了解生成了哪些特定错误的基础知识。

我试图避免学习所有 SSIS 诊断方法,只是为了选择一种好的“全方位”方法。

更新

根据 Nick.McDermaid 建议,在 SSISDB 数据库中我 运行 这个:

SELECT * FROM [SSISDB].[catalog].[executions] ORDER BY start_time DESC

这向我显示了我手动执行的包。时间戳正确反映了我 运行 它们的时间。如果有任何异常(?),那就是 reference_idreference_typeenvironment_name 列为空。所有其他列都有值。

更新#2

我找到了一半的答案。没有错误信息可用的原因是因为默认情况下 SSIS 包执行日志记录级别为“none”。我不得不 change the logging level.

Nick.McDermaid 通过解释我不需要深入研究 OnError 工具或 SSIS 日志记录提供程序工具,给了我其余的答案。

我不确定您的报告有什么问题,但在回答问题 "Which SSIS diagnostics should I learn" 时,我建议开箱即用。

换句话说,使用内置的 SSIS 日志记录(不需要任何额外代码)来记录失败。然后使用内置报告(一旦你让它们工作)来检查这些日志。

原始功能无需维护。自定义功能(即用 OnError 事件填充您的包)需要更多维护。

您可能会发现需要学习一些 SSISDB 技巧以进行故障排除的情况,但首先,请尝试从原始报告中获取所有可能的信息。

如果您需要维护 SQL 2012 或现有系统之后的系统,那么所有这些日志记录都是内置的。手动 OnError 添加不保证内置

唯一需要注意的是脚本任务永远不会产生信息性错误。我实际上建议您避免在 SSIS 中使用脚本任务。我觉得如果你使用脚本任务,你可能用错了工具

添加@Nick.McDermaid的优秀答案。
我使用 SSIS 目录错误报告。在大多数情况下,具有以下错误分析功能就足够了。重点如下:

  • 通常第一条或第二条错误信息包含有意义的错误信息。后者是数据流中发生了一些错误...
  • 如果您在 所有消息 报告的 错误消息 部分查看 first/second 错误消息,您将看到 错误上下文 超链接。调用它会在包崩溃时向您显示环境、连接管理器和一些变量。

好的错误分析更多的是一种方法和实践,而不是单纯的工具选择。以下是我的建议:

  • SSIS 喜欢报告错误代码而不是有意义的解释。所以,Integration Services Error and Message Reference 是你的朋友。
  • SSIS 在错误上下文中包含(见上文)转储那些 Include in ErrorDump 属性 设置为 true 的变量。
  • 我在变量中为 SQL 任务或数据流源构建 SQL 命令。当您在 Dump 属性 中对这些变量设置 incude 时,这允许在错误上下文中显示在错误时执行的 SQL 命令。
  • 组织好你的变量。如果某些变量仅在某些任务中使用 - 在此任务中声明它。否则一堆乱七八糟的变量对你的伤害大于好处。