【问题标题】:SSIS C# script is not compatibleSSIS C# 脚本不兼容
【发布时间】:2015-12-13 00:11:52
【问题描述】:

我最近接管了一个基于 SSIS ETL 的流程,由于一些许可问题,我不得不从 Data Tools 2013 升级到 2015。 大部分项目在升级后幸存下来并且运行良好。 但是,在两个包中,我有一个非常简单的 C# 方法(脚本转换)来解析一些导致一些问题的数据。

目前部署是通过使用“build”(不是通过 SSIS 目录的较新开发方法)完成的,并且 SQL SERVER Job 的步骤直接指向 dtsx 文件。

作业是在 SQL SERVER 2014 中创建的,它分步调度 ETL。服务器具有 64 位配置。

我已尝试将 SSIS 项目属性“Run64BitRuntime”更改为 False,并强制失败的步骤使用 32 位运行时。 另外,我也试过用同样的配置重新创建组件,但都没有成功。

奇怪的是,当我从 SSIS 运行包时,它成功完成,但作业崩溃并抛出以下错误消息:

*“decode”是转换脚本组件的名称

消息 ...开始:晚上 11:32:30 错误:2015-12-12 23:32:31.26 代码:0xC0047062 来源:stg stg(解码 [2]) 描述:Microsoft.SqlServer.Dts.Pipeline.ComponentVersionMismatchException:版本of decode 与此版本的 DataFlow 不兼容。 [[指定组件的版本或管道版本或两者都高于当前版本。此包可能是在新版本的 DTS 或当前 PC 上安装的组件上创建的。]] 在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostCheckAndPerformUpgrade(IDTSManagedComponentWrapper100 wrapper, Int32 lPipelineVersion) End Error Error: 2015-12 -12 23:32:31.26 代码:0xC004801F 来源:stg stg (SSIS.Pipeline) 描述:“解码”的组件元数据无法升级到组件的较新版本。 PerformUpgrade 方法失败。结束错误错误:2015-12-12 23:32:31.28 代码:0xC004801F 源:stg SSIS.Pipeline 描述:“解码,clsid {33D831DE-5DCF-48F0-B431-4D327B9E785D}”的组件元数据无法升级到组件的较新版本。 PerformUpgrade 方法失败。 End Error 错误:2015-12-12 23:32:31.28 代码:0xC0048021 来源:stg decode [2] 描述:组件丢失、未注册、不可升级或缺少所需的接口。该组件的联系信息是“包含并运行自定义脚本代码。例如,应用业务规则限制“收入”列中的有效值范围或将两列中的值相加并计算总和的平均值。 Microsoft Corporation;Microsoft SQL Server;Microsoft Corporation;保留所有权利;http://www.microsoft.com/sql/support;9"。结束错误错误:2015-12-12 23:32:31.28 代码:0xC0047017 来源:stg SSIS.Pipeline 描述:解码验证失败并返回错误代码 0xC0048021。结束错误错误:2015-12-12 23:32:31.28 代码:0xC004700C 源:stg SSIS.Pipeline 描述:一个或多个组件验证失败。 End Error 错误:2015-12-12 23:32:31.28 代码:0xC0024107 来源:stg 描述:任务验证过程中出现错误......

【问题讨论】:

  • 看起来您的本地环境具有与 VS2013 和 VS2015 兼容的两个版本的 .NET 框架。部署环境中不存在相同的内容。
  • 由于 SQL Server 是我唯一没有升级的元素(2014 年),也许它与此有关。

标签: c# sql-server ssis


【解决方案1】:

我遇到了同样的问题“错误代码:0xC0048021”并解决了。

我从这里https://msdn.microsoft.com/en-us/mt429383安装了这个版本的SSDT

然后,在 SSDT 解决方案资源管理器中右键单击项目,转到属性 --> 配置属性 --> TargetServerVersion = SQL SERVER 2014

然后,在 SSDT 解决方案资源管理器中右键单击项目,转到属性 --> 配置属性 --> 调试 --> Run64BitRuntime = False

参考What's New for SSIS 2016 RC0?

【讨论】:

【解决方案2】:

在我的情况下,将 SSIS 包更改为 32/64 位,并且设置目标 SQL 版本无效。

如果即使您将 SQL 目标版本设置为 2016 也有此问题,请确保您使用的是正确版本的 SQL Server 部署向导。 如果您尝试在 SQL2016 上部署包,请确保您有 ISDeploymentWizard:

C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn Server\130\DTS\Binn\ISDeploymentWizard.exe

如果没有,您必须安装专用于 SQL Server 2016 (download link) 的 SSMS,这将安装 ISDeploymentWizard。在更高版本的 SSMS 中向后兼容不会安装 ISDeploymentWizard。

可能更高版本的ISDeploymentWizard将SSIS包升级到更高版本,SQL Server无法降级。

【讨论】:

  • 谢谢,你的回答完全不同,效率很高
【解决方案3】:

我尝试更新我没有触及的唯一元素 - SQL Server 2014,但没有任何影响。最终我决定完全拥有流程的所有权,并通过将逻辑下推到数据库来解决它。

【讨论】:

    【解决方案4】:

    如果您更改项目的 目标服务器版本,如其他答案中所述,请确保检查您是否已针对您正在部署的适用配置(开发,测试,生产)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 2017-01-17
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多