排查 SSIS Integration Runtime 中的包执行问题

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

本文描述了在执行 SSIS Integration Runtime 中的 SQL Server Integration Services (SSIS) 包时可能遇到的最常见错误, 并描述了潜在的原因,以及解决这些错误的操作。

常规

在何处可以找到用于故障排除的日志

使用 Azure 数据工厂门户检查 SSIS 包执行活动的输出。 输出包括执行结果、错误消息和操作 ID。 有关详细信息,请参阅监视管道

使用 SSIS 目录 (SSISDB) 检查执行活动的详细日志。 有关详细信息,请参阅监视正在运行的包和其他操作

常见错误、原因和解决方法

错误消息:“连接已超时”或“服务在处理请求时遇到错误。 重试。 "

下面是可能的原因和建议的操作:

  • 数据源或目标过载。 检查数据源或目标的负载,并查看它是否有足够的容量。 例如,如果使用的是 Azure SQL 数据库,而该数据库可能会超时,请考虑纵向扩展。
  • SSIS Integration Runtime 与数据源或目标之间的网络不稳定,当连接跨区域或者是在本地与 Azure 之间建立的时尤其如此。 执行以下步骤,在 SSIS 包中应用重试模式:
    • 确保 SSIS 包在失败时可以重新运行,且不产生负面影响(例如数据丢失或数据重复)。
    • 在“常规”选项卡上配置“执行 SSIS 包”活动的“重试”和“重试间隔”。Set properties on the General tab
    • 对于 ADO.NET 和 OLE DB 源或目标组件,请在 SSIS 包或 SSIS 活动的连接管理器中设置 ConnectRetryCountConnectRetryInterval

此问题通常意味着无法从 SSIS 集成运行时访问数据源或目标。 原因可能各不相同。 请尝试以下操作:

  • 确保正确传递数据源或目标的名称/IP。
  • 确保已正确设置防火墙。
  • 确保在数据源或目标为本地源或目标的情况下正确配置虚拟网络:
    • 可以通过在同一虚拟网络中预配 Azure VM,来验证问题是否与虚拟网络配置有关。 然后检查是否可以从 Azure VM 访问数据源或目标
    • 若要更详细地了解如何将虚拟网络与 SSIS Integration Runtime 配合使用,可参阅将 Azure-SSIS Integration Runtime 加入虚拟网络

错误消息:“ADO NET 源无法获取连接 '...'”,并显示“无法创建托管连接管理器。” "

潜在的原因是在包中使用的 ADO.NET 提供程序未安装在 SSIS Integration Runtime 中。 可以使用自定义安装程序来安装该提供程序。 在自定义 Azure SSIS Integration Runtime 的安装中可以找到有关自定义安装的更多详细信息

错误消息:“找不到连接 '...'”

旧版 SQL Server Management Studio (SSMS) 中的某个已知问题可能导致此错误。 如果此包包含的自定义组件(例如 SSIS Azure Feature Pack 或合作伙伴组件)未安装在使用 SSMS 来执行部署的计算机上,则 SSMS 会删除该组件,导致此错误。 将 SSMS 升级到已解决该问题的最新版本。

错误消息:“SSIS 执行程序退出代码: -1073741819。 "

  • 可能的原因和建议的操作:
    • 出现此错误的原因可能是,以多线程并行执行多个 Excel 源或目标时,Excel 源和目标遭到限制。 可通过以下方式解决此限制:将 Excel 组件更改为按顺序执行,或将其分隔到不同的包中,并在将 ExecuteOutOfProcess 属性设置为 True 的情况下,通过“执行包任务”来触发执行。

错误消息:“磁盘上没有足够的空间”

此错误表示 SSIS Integration Runtime 节点中的本地磁盘空间已用尽。 请检查你的包或自定义安装是否占用了大量的磁盘空间:

  • 如果包占用了磁盘,包执行完成后会释放磁盘空间。
  • 如果自定义安装占用了磁盘,则你需要停止 SSIS Integration Runtime,修改脚本,然后再次启动 Integration Runtime。 为自定义安装指定的整个 Azure Blob 容器将复制到 SSIS Integration Runtime 节点,因此,请检查该容器中是否包含任何不必要的内容。

错误消息:“无法从主节点检索资源。 Microsoft.SqlServer.IntegrationServices.Scale.ScaleoutContract.Common.MasterResponseFailedException:代码: 300004。 说明:加载文件 "***" 失败。 "

  • 可能的原因和建议的操作:
    • 如果 SSIS 活动正在从文件系统(包文件或项目文件)执行包,而使用你在 SSIS 活动中提供的包访问凭据无法访问项目、包或配置文件,则会出现此错误
      • 如果使用 Azure 文件:
        • 文件路径应以 \\<存储帐户名称>.file.core.chinacloudapi.cn\<文件共享路径> 开头
        • 域应是“Azure”
        • 用户名应是 <存储帐户名称>
        • 密码应是 <存储访问密钥>
      • 如果使用本地文件,请检查是否正确配置了 VNet、包访问凭据和权限,以便 Azure-SSIS 集成运行时可以访问你的本地文件共享

错误消息:“连接中指定的文件名 "..." 无效”

  • 可能的原因和建议的操作:
    • 指定的文件名无效
    • 确保在连接管理器中使用 FQDN(完全限定的域名)而不是短时间

错误消息:“无法打开文件 '...'”

当包执行在 SSIS Integration Runtime 中的本地磁盘内找不到文件时,将发生此错误。 请尝试以下操作:

  • 不要在 SSIS Integration Runtime 中执行的包内使用绝对路径。 改用当前执行工作目录 (.) 或临时文件夹 (%TEMP%)。
  • 如果需要在 SSIS Integration Runtime 节点上保留某些文件,请根据自定义安装中所述准备文件。 执行完成后,系统会清理工作目录中的所有文件。
  • 改用 Azure 文件来存储 SSIS Integration Runtime 节点中的文件。 有关详细信息,请参阅使用 Azure文件共享

错误消息:“数据库 'SSISDB' 已达到大小配额”

可能的原因是,在 Azure SQL 数据库或 SQL 托管实例中创建的 SSISDB 数据库已达到其配额。 请尝试以下操作:

错误消息:“数据库的请求限制是 ...,现已达到该限制。 "

如果在 SSIS Integration Runtime 中同时运行许多的包,可能会发生此错误,因为 SSISDB 已达到请求限制。 请考虑增加 SSISDB 的 DTU 来解决此问题。 有关详细信息,可参阅逻辑服务器的 SQL 数据库限制

错误消息:“SSIS 操作失败,出现意外操作状态 '...'”

该错误主要是由某个暂时性问题导致的,因此请尝试重新运行包执行。 执行以下步骤,在 SSIS 包中应用重试模式:

  • 确保 SSIS 包在失败时可以重新运行,且不产生负面影响(例如数据丢失或数据重复)。
  • 在“常规”选项卡上配置“执行 SSIS 包”活动的“重试”和“重试间隔”。Set properties on the General tab
  • 对于 ADO.NET 和 OLE DB 源或目标组件,请在 SSIS 包或 SSIS 活动的连接管理器中设置 ConnectRetryCountConnectRetryInterval

错误消息:“没有任何活动的辅助角色。 "

此错误通常表示 SSIS Integration Runtime 处于不正常状态。 请在 Azure 门户中检查状态和详细错误。 有关详细信息,请参阅 Azure-SSIS Integration Runtime

错误消息:“集成运行时无法升级,最终将会停止工作,因为我们无法访问你为自定义安装提供的 Azure Blob 容器。 "

当 SSIS Integration Runtime 无法访问针对自定义安装配置的存储时,将发生此错误。 请检查提供的共享访问签名 (SAS) URI 是否有效且未过期。

错误消息:“Microsoft OLE DB Provider for Analysis Services。 ‘Hresult:0x80004005 说明:’COM 错误:COM 错误: mscorlib;某个调用的目标引发了异常”

一种潜在原因是为 Azure Analysis Services 身份验证配置了已启用 Microsoft Entra 多重身份验证的用户名或密码。 SSIS Integration Runtime 不支持这种身份验证。 尝试使用服务主体进行 Azure Analysis Services 身份验证:

  1. 请根据使用服务主体进行自动化中所述准备服务主体。

  2. 在连接管理器中,配置“使用特定的用户名和密码”:将“app:<>@<>”设为用户名,将“clientSecret”设为密码。 下面是格式正确的用户名示例:

    app:12345678-9012-3456-789a-bcdef012345678@9abcdef0-1234-5678-9abc-def0123456789abc

  3. 在连接管理器中,配置“使用特定的用户名和密码”:将“AppID”设为用户名,将“clientSecret”设为密码。

错误消息:“使用托管标识时,ADONET 源未能获取连接 {GUID},并收到以下错误:用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败”

如果参数 ConnectUsingManagedIdentityTrue,请确保不要将连接管理器的身份验证方法配置为“Active Directory密码身份验证”。 可将其配置为“SQL 身份验证”,设置了 ConnectUsingManagedIdentity 时会忽略此配置。

错误消息:“0xC020801F at ..., OData Source [...]: 无法从运行时连接管理器获取托管连接”

一个可能的原因是,未在 SSIS 集成运行时中启用 OData 源所需的传输层安全性 (TLS)。 可以使用自定义设置在 SSIS 集成运行时中启用 TLS。 有关更多详细信息,请参见无法通过 SSIS 连接 Project Online Odata自定义 Azure-SSIS 集成运行时的设置

错误消息:“由于出现错误,请求操作 guid 为 ... 的暂存任务失败:无法调度暂存操作,错误消息如下:Microsoft.SqlServer.IntegrationServices.AisAgentCore.AisAgentException:无法加载数据代理。 "

请确保 Azure-SSIS 集成运行时配置了自承载集成运行时。 有关更多详细信息,请参见在 ADF 中将自承载 IR 配置为 Azure-SSIS IR 的代理

错误消息:“暂存任务状态:已失败。 暂存任务错误:ErrorCode: 2010, ErrorMessage: 自承载集成运行时 ... 处于脱机状态”

请确保已安装并启动了自承载集成运行时。 有关更多详细信息,请参阅创建和配置自承载集成运行时

错误消息:““暂存任务错误: ErrorCode: 2906,ErrorMessage: 包执行失败。 输出: {"OperationErrorMessages":“错误:所请求的 OLE DB 提供程序 ... 未注册。 如果未安装 64 位驱动程序,则以 32 位模式运行包...”

请确保包中 OLE DB 连接器使用的相应提供程序已正确安装在自承载集成运行时计算机上。 有关更多详细信息,请参见在 ADF 中将自承载 IR 配置为 Azure-SSIS IR 的代理

错误消息:““暂存任务错误: ErrorCode: 2906,ErrorMessage: 包执行失败。 输出: {"OperationErrorMessages":“错误:未能加载文件或程序集“Microsoft.WindowsAzure.Storage, Version=..., Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。 找到的程序集清单定义与程序集引用 '...' 不匹配”

一个可能的原因是自承载集成运行时未正确安装或升级。 建议下载并重新安装最新的自承载集成运行时。 有关更多详细信息,请参阅创建和配置自承载集成运行时

错误消息:“暂存任务失败。 TaskStatus: 失败,ErrorCode: 2906,ErrorMessage: 包执行失败。 有关更多详细信息,请选择在同一行上运行的活动的输出,输出: {"OperationErrorMessages":“2021/4/14 上午 7:10:35 +00:00 : = 无法启动命名管道代理...”

检查安全策略是否正确分配给运行自承载 IR 服务的帐户。 如果在执行 SSIS 包活动上使用了 Windows 身份验证,或在 SSIS 目录 (SSISDB) 中设置了执行凭据,则必须将相同的安全策略分配给所使用的 Windows 帐户。 有关更多详细信息,请参见在 ADF 中将自承载 IR 配置为 Azure-SSIS IR 的代理

错误消息:“请求元数据时必须建立连接。 如果正在脱机工作,请取消选中 SSIS 菜单上的“脱机工作”,以启用该连接”

错误消息:“暂存任务状态:已失败。 错误消息:“暂存任务错误: ErrorCode: 2906,ErrorMessage: 包执行失败。 输出: {"OperationErrorMessages": "SSIS 执行代码: -1.\n", "LogLocation": "...\SSISTelemetry\ExecutionLog\...", "effectiveIntegrationRuntime": "...", "executionDuration": ..., "durationInQueue": { "integrationRuntimeQueue": ... }} "

请确保在自承载集成运行时计算机上安装了 Visual C++ 运行时。 有关更多详细信息,请参见在 ADF 中将自承载 IR 配置为 Azure-SSIS IR 的代理

错误消息:“从暂存读取时超时”

当使用 SHIR 作为数据代理的 SSIS-IR 无法成功从暂存 Blob 读取数据时,会发生此错误。 通常,这是由于 SHIR 未能将本地数据传输到暂存 Blob。 然后 SSIS-IR 读取暂存数据的尝试失败,并出现超时错误。 需要检查 C:\ProgramData\SSISTelemetry 文件夹中的 SHIR 日志以查看运行时日志并检查 C:\ProgramData\SSISTelemetry\ExecutionLog 文件夹中的执行日志,以进一步调查 SHIR 未成功将数据上传到暂存 Blob 的原因。

意外触发多个包执行

  • 可能的原因和建议的操作:
    • ADF 存储过程活动或 Lookup 活动用于触发 SSIS 包执行。 t-sql 命令可能会遇到暂时性问题,并触发重新运行,这将导致多个包执行。
    • 请改用 ExecuteSSISPackage 活动,以确保除非用户在活动中设置重试计数,否则包执行不会重新运行。 可在使用“执行 SSIS 包”活动运行 SSIS 包中找到详细信息。
    • 优化 t-sql 命令,以便能够通过检查是否已触发执行来重新运行

包执行时间太长

下面是可能的原因和建议的操作:

  • 在 SSIS Integration Runtime 中计划了过多的包执行。 所有这些执行将在队列中等待发生。
  • SSIS Integration Runtime 已停止或处于不正常状态。 若要了解如何检查 SSIS Integration Runtime 状态和错误,请参阅 Azure-SSIS Integration Runtime

我们还建议在“常规”选项卡上设置超时:

Set properties on the General tab

包的执行性能不佳

请尝试以下操作:

  • 确保 SSIS Integration Runtime 与数据源和目标位于同一区域。

  • 将包执行的日志记录级别设置为“性能”,以收集执行中每个组件的持续时间信息。 有关详细信息,请参阅 Integration Services (SSIS) 日志记录

  • 在 Azure 门户中检查 IR 节点性能:

    • 有关如何监视 SSIS Integration Runtime 的信息,请参阅 Azure-SSIS Integration Runtime
    • 可以查看 Azure 门户中数据工厂的指标来查找 SSIS Integration Runtime 的 CPU/内存历史记录。 Monitor metrics of the SSIS integration runtime