【问题标题】:BIDS 2008 SSIS Package Data Flow Task fails validation and returns "VS_ISBROKEN" ErrorBIDS 2008 SSIS 包数据流任务验证失败并返回“VS_ISBROKEN”错误
【发布时间】:2014-08-14 19:35:15
【问题描述】:

我正在使用的 BIDS 2008 SSIS 包在到达包中的任何数据流任务时验证失败。我可以在本地计算机上运行 BIDS 2008 中的 SSIS 包。当我通过 SQL 代理作业运行 SSIS 包时,包失败并显示以下错误消息。我通过谷歌搜索研究了错误代码0x80004005和错误代码0xC004706B,但没有找到任何有用的东西。

有问题的 SSIS 包是在同一个 SQL 代理作业中一起运行的多个 SSIS 包之一。原始 SQL 代理作业中的其他 SSIS 包都能够成功运行。这使我相信 SQL 代理服务帐户和代理帐户配置了适当的权限。 DBA 能够确认服务帐户和代理帐户确实具有适当的权限。

SQL 代理作业使用操作系统 (CmdExec) 类型运行 SSIS 包,并且 SSIS 包的 Run64BitRuntime 设置为 FALSE,因此 SSIS 包在 32 位运行时下运行。

出于调试目的,我在原始 SSIS 包的新 SSIS 包中重新创建了数据流任务、数据库连接以及相关的源和目标任务。调试 SSIS 包能够在我的计算机上本地运行,但当我尝试使用与原始 SQL 代理作业完全相同的新 SQL 代理作业设置运行时失败。

我还使用了不同的数据库连接,例如 Native OLE DB\SQL Server Native Client 10.0、10.1、11.1 和 Native OLE DB\Microsoft OLE DB Provider for SQL Server。我测试调试SSIS包的时候都失败了

我已验证 OLE DB 源和目标的元数据与 SQL Server 数据库表中的数据类型和长度相匹配。我已验证数据流任务中的 OLE DB 源任务使用的存储过程在 SQL Server Management Studio 上运行时可以正常工作,并且服务帐户有权运行该存储过程。

我认为这是我在解决此问题时能回忆起的所有信息。

以前有没有其他人遇到过这个错误?有什么可能的解决方案可以尝试吗?

欢迎任何帮助!

错误信息:

以用户身份执行:域\SQLAgentServiceAccount。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 10.50.2500.0
版权所有 (C) Microsoft Corporation 2010。保留所有权利。

开始时间:下午 1:37:09

错误:2014-08-14 13:37:09.94 代码:0xC0202009 源:数据流任务 - OLEDB 源 [1]
说明:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。

错误代码:0x80004005。 OLE DB 记录可用。来源:“Microsoft OLE DB Provider for SQL Server”Hresult:0x80004005
说明:“语法错误或访问冲突”。
结束错误

错误:2014-08-14 13:37:09.94 代码:0xC004706B 来源:数据流任务 SSIS.Pipeline
说明:“组件“OLEDB Source”(1)”验证失败,返回验证状态“VS_ISBROKEN”。
结束错误

错误:2014-08-14 13:37:09.94 代码:0xC004700C 来源:数据流任务 SSIS.Pipeline
说明:一个或多个组件验证失败。
结束错误

错误:2014-08-14 13:37:09.94 代码:0xC0024107 来源:数据流任务
说明:任务验证期间出现错误。
结束错误

DTExec:包执行返回 DTSER_FAILURE (1)。

开始时间:下午 1:37:09 结束时间:下午 1:37:09 经过时间:0.219 秒。处理退出代码 1。

步骤失败。

【问题讨论】:

  • 当您将一个包从一台机器迁移到另一台机器并出现验证错误时,这很可能是由您的连接管理器的配置或它实际连接到的数据库中的差异引起的。如果您的服务帐户有问题,您会收到登录失败消息。但是,您有“语法错误或访问冲突”。 OLEDB 源中的命令是变量中的表达式吗?这是 SSIS 2008r2 或更低版本还是 ssis 2012 及更高版本?您是否使用包配置或参数来设置连接字符串?
  • OLEDB 源中的命令是一个嵌入式存储过程,它接受两个参数并返回一个数据集以移动到另一个数据库中的表。 SSIS 包是在 BIDS 2008 中开发的,并通过 SQL Server 2008 R2 上的 SQL 作业运行。使用配置文件获取 SQL Server 名称。
  • 当您在本地进行测试时,您是否连接到与通过 SQL 代理运行它时相同的服务器?如果不是,两个地方的过程是否相同?
  • 是的,我正在连接到通过 SQL 代理运行包的同一台服务器。
  • 两种情况下两个参数的设置方式一样吗?另外,您提到了 64 位与 32 位,这对您要连接的内容很重要吗?根据您发布的错误消息,您正在 64 位下执行。

标签: sql-server ssis sql-server-2008-r2 bids sql-agent-job


【解决方案1】:

我找到了这个解决方案:

确保连接管理器中的连接字符串有"Provider=SQLNCLI11.1; Persist Security Info=True; Auto Translate=False;"

我做到了,它在超大规模/SQL Server 上对我有用。

【讨论】:

    【解决方案2】:

    这是我不久前遇到的一种奇怪的错误,我使用以下方法解决了问题:

    以管理员身份运行命令提示符 键入以下命令并按 Enter:regsvr32 jscript.dll 键入以下命令并按 Enter:regsvr32 vbscript.dll

    【讨论】:

    • 我假设 .dll 文件已注册,因为服务器上的其他 SSIS 包能够成功运行。由于我自己的用户帐户无权登录服务器或对系统文件进行任何更改,因此我无法知道这一点。虽然,注销然后重新注册 .dll 文件可能是一种解决方案。我必须由 DBA 运行它,看看这是否可行。
    • 如果是这种情况,如何创建一个批处理文件并通过 SQL 代理调用它。它应该可以正常工作。
    【解决方案3】:

    问题的解决方案是运行 SQL 代理作业的服务帐户对通过数据流任务执行的存储过程没有执行权限。授予服务帐户执行权限,SSIS 包能够成功执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多