代码之家  ›  专栏  ›  技术社区  ›  HLGEM

描述:组件“MyDataFlowOLEDBSourceComponent”(10250)在预执行阶段失败,返回错误代码0xC022009

  •  2
  • HLGEM  · 技术社区  · 11 年前

    我有一个SSIS包,它每天运行几个月都没有问题。突然间,它每天都在失败,并出现上面的错误。据我所知,没有对包或其运行的存储过程进行任何更改,也没有对数据库环境进行任何更改(包括拥有作业的服务帐户的权限)。

    这是一个连接到SQL Server 2008 R2数据库的SQL Server 2008包。通过ssisconfig表进行配置,并通过环境变量定义要使用的服务器。

    所讨论的组件使用的是存储过程。在该过程中,所有字段都被显式转换为数据所在表的同一数据类型。进程本身运行良好。它是一个相对复杂的过程,有两个表变量和一个CTE。

    我不能在我的本地prod上运行它,而且开发没有失败。如果在设置为作业所有者使用的环境变量时打开产品SSIS包,则不会收到此组件的验证错误。此组件的ValidateExternalMetadata设置为true。但对于整个包,延迟验证设置为True。我确实得到了一个验证错误,这是在使用一个在早期任务中动态设置的变量的任务中所预期的。然而,这个错误比它当前失败的步骤晚了很多很多步。

    通常在过去,当我们遇到这种不具体的错误时,我很容易看到导致突然失败的数据的问题。但proc结果集中的所有数据对于为该字段的暂存表定义的数据类型来说都不正确。所有必填字段也没有丢失数据。

    我不知道还能看什么。如果环境没有改变,实际代码没有改变,数据看起来正确,还有什么可以尝试的?

    1 回复  |  直到 11 年前
        1
  •  0
  •   Priyank Sheth    11 年前

    正如我对详细错误的评论,您可以尝试下面的Microsoft链接:

    Debug SSIS Package while calling from Agent

    链接中的一些信息:

    包可能失败的原因如下:

    • 用于在SQL Server代理下运行包的用户帐户与原始包作者不同。

    • 用户帐户没有建立连接或访问SSIS包外部资源所需的权限。

    包可能无法在以下情况下运行:

    • 当前用户无法解密包中的机密。如果当前帐户或执行帐户
      与原始包作者不同
      ProtectionLevel属性设置不允许当前用户
      解密包中的秘密。

    • 使用集成安全性的SQL Server连接失败,因为当前用户没有所需的权限。

    • 文件访问失败,因为当前用户没有写入连接的文件共享所需的权限 管理器访问。例如,此场景可以与文本一起出现 不使用登录名和密码的日志提供程序。这种情况 也可以发生在依赖于文件连接的任何任务中 管理器,例如SSIS文件系统任务。

    • 基于注册表的SSIS包配置使用HKEY_CURRENT_USER注册表项。HKEY_CURRENT_USER注册表项
      是用户特定的。 任务或连接管理器要求当前用户帐户具有正确的权限。

    方法1 :使用SQL Server Agent代理帐户创建SQL Server代理代理帐户。此代理帐户必须使用 允许SQL Server代理作为创建 包或作为具有所需权限的帐户。

    此方法用于解密机密并满足密钥 用户的要求。然而,这种方法的成功可能有限 因为SSIS包用户密钥涉及当前用户和 当前计算机。因此,如果您将包移动到另一个 计算机,即使作业步骤使用 正确的代理帐户。

    方法2 :将SSIS Package ProtectionLevel属性设置为ServerStorage将SSIS PackageProtectionLevel更改为 服务器存储。此设置将包存储在SQL Server中 数据库,并允许通过SQL Server数据库进行访问控制 角色。

    方法3 :将SSIS包ProtectionLevel属性设置为EncryptSenitiveWithPassword更改SSIS包保护级别 属性设置为EncryptSenitiveWithPassword。此设置使用密码 用于加密。然后可以修改SQL Server代理作业步骤 包含此密码的命令行。

    方法4 :使用SSIS包配置文件使用SSIS程序包配置文件存储敏感信息,然后存储 这些配置文件位于安全文件夹中。然后可以更改 将ProtectionLevel属性设置为DontSaveSensitive,以便包 未加密,并且不会尝试将机密保存到包中。什么时候 运行SSIS包时,将从 配置文件。确保配置文件 如果它们包含敏感信息,则受到充分保护。

    方法5 :创建程序包模板为实现长期解决方案,请创建使用不同保护级别的程序包模板 从默认设置。将来不会出现此问题 包装。

    上面的链接将帮助您完成日志记录和其他可能的SQL代理程序包失败场景。我怀疑您的代理用户已损坏。但这只是一个假设。首先通过以下链接启用SSIS日志记录:

    Enable SSIS Package Logging

    链接中的一些信息

    使用执行包设置包的日志记录级别 对话框

    • 在SQLServerManagementStudio中,导航到对象资源管理器中的包。

    • 右键单击包并选择执行。

    • 在“执行包”对话框中选择“高级”选项卡。

    • 在日志记录级别下,选择日志记录级别。有关可用值的说明,请参见下表。

    • 完成所有其他软件包配置,然后单击“确定”以运行软件包。

    希望这对你有帮助。如果没有,请告诉我。

    推荐文章