通过部署升级的 SSIS 包

SSIS package upgraded by deployment

在我们包含多个 SQL 服务器的 QA 虚拟环境中,我想部署一个维护到 Visual Studio 2010 年的 SSIS 2012 包(ispac,项目部署)。目标 SSIS 服务器是 2012但是工作站上的客户端包含 SQL server 2014。通过在工作站上执行 ispac 包并指定部署在 SQL server 2012 上,部署没有任何错误。但是在 SSIS 服务器上执行包时,我们会收到

之类的错误

"Package Name" : Error: The version number in the package is not valid. The version number cannot be greater than current version
number.

"Package Name" : Error: Error loading value "8" from node "DTS:Property".

"Package Name" : Error: Package migration from version 8 to version 6 failed with error 0xC001700A "The version number in the package is not valid. The version number cannot be greater than current version number.".

我所有的包 (.dtsx) 都有

 <DTS:Property DTS:Name="PackageFormatVersion">6</DTS:Property>

以及清单

<SSIS:Property SSIS:Name="PackageFormatVersion">6</SSIS:Property>

看起来 SQL 2014 客户端或工作站将我的包升级到 V8,即使我的目标服务器是 V6。 当我直接从 SQL 2012 服务器(没有 SQL 2014)部署时,所有内容都已部署并且 运行 符合预期。 这是预期的结果吗?或者有问题

所以您遇到的是预期行为需要引用。当使用 APIs 打开 SSIS 包时,包将更新为该 APIs 版本。这允许 V-1 包在 Vcurrent 服务器上 运行。格式和内容发生了变化,因此 2005 年的包裹 可能不会 运行 出现在 2014 年的包装盒上是有原因的,但这就是目的。磁盘上的位保持不变,但内存中的版本会更新。

由于部署使用了 120 文件夹中的 ISDeploymentWizard (SQL Server 2014),所以当它看到 2012 版本的 .ispac 时,它做的第一件事就是将其转换为 2014 格式。因此,此 .ispac 的内存版本需要序列化到 SSISDB 中,并且那些 APIs 在 2012/2014 之间是相同的。 DeployProject/deploy_project 方法只接受一个二进制对象,它不会验证这些位是什么版本,只是它具有正确的形状。

但是,当你去执行包时,API 需要查看其中的实际位并发现,这是一个我不理解的版本。

API 在 How to deploy an existing package in SQL Server 2012

上的一些示例

我能够解决这个问题。我们遇到的问题是服务器同时安装了 SQL Server 2012 和 SQL Server 2014。我试图将包安装到 SQL 2012 实例,但即使您使用 VS 2010 Shell 开发 SSIS 包,当您 运行 文件系统中的 .ispac 文件时它从 C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\ 位置启动 ISDeploymentWizard.exe。这导致包自动升级到版本 8,因此每次您在 SQL 服务器上执行包时,您都会收到“从节点 "DTS:Property" 加载错误值“8”错误。

要解决只需执行以下操作: 如果您要将包部署到 SQL Server 2012 运行 此位置的可执行文件:C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\ISDeploymentWizard.exe

如果您要将包部署到 SQL Server 2014 运行 此位置的可执行文件:C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\ISDeploymentWizard.exe

然后按照正常的向导安装包。