对包执行进行故障排除的工具

Integration Services 包括可用于在包完成和部署以后的执行过程中进行故障排除的功能和工具。

在设计时, SQL Server Data Tools (SSDT) 提供了用于暂停包的执行的断点、“进度”窗口和用于在数据通过数据流时查看数据的数据查看器。 但是,这些功能在包部署后运行包时不再可用。 用于排除已部署包故障的主要技术如下:

  • 使用事件处理程序捕获和处理包错误。

  • 使用错误输出捕获错误数据。

  • 使用日志记录跟踪包的执行步骤。

还可以使用下列技巧和技术避免正在运行的包的问题

使用事件处理程序捕获和处理包错误

通过使用事件处理程序,您可以响应许多由包和包中的对象引发的事件。

  • 创建 OnError 事件的事件处理程序。 在事件处理程序中,您可以使用发送邮件任务将故障通知给管理员,使用脚本任务和自定义逻辑获取用于故障排除的系统信息或者清除临时资源或不完整的输出。 有关详细信息,请参阅 Integration Services (SSIS) 事件处理程序

使用错误输出对错误数据进行故障排除

您可以使用对许多数据流组件可用的错误输出将包含错误的行定向到单独的目标中,供以后分析。

  • 使用错误输出捕获错误数据。 将包含错误的行发送到单独的目标(如错误表或文本文件)。 错误输出自动添加两个数值列(包含导致该行被拒绝的错误的编号)以及发生该错误的列的 ID。 有关详细信息,请参阅 数据中的错误处理

  • 向错误输出添加易于理解的信息。 除了错误输出提供的两个数字标识符外,还可以通过添加描述性信息来更轻松地分析错误输出。

    添加错误的说明。 使用脚本组件可以轻松查找错误说明。 有关详细信息,请参阅 增强脚本组件的错误输出

    添加错误列的名称。 在脚本组件中无法轻松地查找与错误输出保存的列 ID 对应的列名称,并且需要执行其他步骤。 数据流中的每个列 ID 在该数据流任务中是唯一的,在设计时保留在包中。 以下方法是将列名称添加到错误输出的一个建议。

    1. 创建列名称的查找表。 创建一个单独的应用程序,该应用程序使用 Integration Services API 循环访问每个已保存的包、包中的每个数据流、数据流中的每个对象以及数据流对象中的每个输入和输出。 应用程序应将每个列的列 ID 和名称保存到查阅表中,以及父数据流任务的 ID 和包的 ID。

    2. 将列名添加到输出。 将查找转换组件添加到错误输出中,以查找在上一步中创建的查找表中的列名称。 查找可以使用错误输出中的列 ID、包 ID(在系统变量 System::P ackageID 中可用)和数据流任务的 ID(在系统变量 System::TaskID 中可用)。

使用操作报告对包执行进行故障排除

SQL Server Management Studio 中提供标准操作报告,帮助您监视部署到 Integration Services 目录的 Integration Services 包。 这些包报告有助于您查看包状态和历史记录,并根据需要确定执行失败的原因。

有关详细信息,请参阅 对包执行进行故障排除的报告

使用 SSISDB 视图对包执行进行故障排除

提供了一些 SSISDB 数据库视图,您可以查询它们来监视包执行和其他操作信息。 有关详细信息,请参阅 监视包执行和其他操作

使用日志记录对包执行进行故障排除

通过启用日志记录,您可以跟踪正在运行的包中所发生的大部分问题。 日志提供程序捕获有关指定事件的信息供以后分析,并且以数据库表、平面文件、XML 文件或支持的其他输出格式保存该信息。

  • 启用日志记录。 您可以只选择所要捕获的事件以及只选择所要捕获的信息项,以修改日志记录输出。 有关详细信息,请参阅 Integration Services (SSIS) 日志记录Integration Services (SSIS) 日志记录

  • 选择包的“诊断”事件对访问接口问题进行故障排除。 一些日志记录消息可以帮助您对包与外部数据源的交互情况进行故障排除。 有关详细信息,请参阅 对包连接进行故障排除的工具

  • 增强默认日志记录输出。 通常,每次该包运行时日志记录都会向日志记录目标中追加行。 虽然日志记录输出的每一行都使用包的名称和唯一标识符来标识包,也通过唯一的 ExecutionID 来标识包的执行,但单一列表中的大量日志记录输出会使分析变得困难。

    建议采用下列方法增强默认日志记录输出并使其更容易生成报告:

    1. 创建记录包的每次执行情况的父表。 此父表只有一行用于包的每次执行,并使用 ExecutionID 链接到 Integration Services 日志记录表中的子记录。 您可以在每个包的开始使用一个执行 SQL 任务创建此新行并记录开始时间。 然后您可以在包的结尾使用另一个执行 SQL 任务,用结束时间、持续时间和状态来更新该行。

    2. 将审核信息添加到数据流。 您可以使用审核转换将有关创建或修改每一行的包执行的信息添加到数据流的行中。 审核转换可以提供九条信息,包括 PackageName 和 ExecutionInstanceGUID。 有关详细信息,请参阅 审核转换。 如果您希望在每一行中包括自定义信息以便审核,可以使用派生列转换将此信息添加到数据流的行中。 有关详细信息,请参阅 派生列转换

    3. 考虑捕获行计数数据。 考虑另行创建一个表,用于存储行计数信息。其中,每个包执行实例均由其 ExecutionID 标识。 使用行计数转换在数据流的关键点将行计数保存到一系列变量中。 数据流结束后,请使用执行 SQL 任务将该系列值插入到表的行中,供以后分析和报告。

    有关此方法的详细信息,请参阅 Microsoft 白皮书 Project REAL:Business Intelligence ETL 设计实践中的“ETL 审核和日志记录”一节。

使用调试转储文件对包执行进行故障排除

在 Integration Services中,可以创建提供包执行信息的调试转储文件。 有关详细信息,请参阅 生成包执行的转储文件

针对运行时验证问题进行故障排除

有时在包中前一个任务执行完成之前,您也许不能连接到数据源,或者无法验证包的某些部分。 Integration Services 包括以下功能,可帮助您避免由这些情况导致的验证错误:

  • 配置加载包时无效包元素的 DelayValidation 属性。 可以在配置无效的包元素上设置为DelayValidationTrue防止加载包时出现验证错误。 例如,可以使用只有在运行时通过执行 SQL 任务创建才存在的目标表来执行数据流任务。 DelayValidation可以在包级别或包包含的各个任务和容器级别启用该属性。

    DelayValidation可以在数据流任务上设置该属性,但不能在单个数据流组件上设置。 通过将单个数据流组件ValidateExternalMetadata的属性设置为 false ,可以实现类似的效果。 但是,当此属性的值为 false时,组件不知道对外部数据源的元数据的更改。 如果设置为 true,则 ValidateExternalMetadata 属性有助于避免由于数据库中锁定导致的阻塞问题,尤其是在软件包使用事务时。

运行时权限问题的故障排除

如果您在尝试使用 SQL Server 代理运行已部署的包时遇到错误,则代理所使用的帐户可能不具备必需的权限。 有关如何对从 SQL Server 代理作业运行的包进行故障排除的信息,请参阅 从 SQL Server 代理作业步骤调用 SSIS 包时 SSIS 包不运行。 有关如何从 SQL Server 代理作业运行包的详细信息,请参阅 包的 SQL Server 代理作业

若要连接到 Excel 或 Access 数据源, SQL Server 代理要求帐户具有在 TEMP 和 TMP 环境变量所指定的在文件夹中读取、写入、创建和删除临时文件的权限。

64 位问题的故障排除

  • 部分数据访问接口在 64 位平台上不可用。 尤其是,需要连接到 Excel 或 Access 数据源的 Microsoft Jet OLE DB 访问接口在 64 位版本中不可用。

无说明错误的故障排除

如果遇到了没有附带说明的 Integration Services 错误,您可以根据其错误号在 Integration Services 错误和消息引用 中查找错误来找到说明。 目前该列表中不包括故障排除信息。

在数据流组件中配置错误输出