SSIS包通过部署升级

Gil*_*che 5 sql-server deployment ssis

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

“包名称”:错误:包中的版本号无效。版本号不能大于当前版本
号。

“包名称”:错误:从节点“DTS:属性”加载值“8”时出错。

“包名称”:错误:从版本 8 到版本 6 的包迁移失败,错误为 0xC001700A“包中的版本号无效。版本号不能大于当前版本号。”。

我所有的包(.dtsx)都有

 <DTS:Property DTS:Name="PackageFormatVersion">6</DTS:Property>
Run Code Online (Sandbox Code Playgroud)

以及清单

<SSIS:Property SSIS:Name="PackageFormatVersion">6</SSIS:Property>
Run Code Online (Sandbox Code Playgroud)

看起来 SQL 2014 客户端或工作站将我的包升级到了 V8,即使我的目标服务器是 V6。当我直接从 SQL 2012 服务器(没有 SQL 2014)部署时,一切都按预期部署和运行。这是预期的结果吗?或有问题

bil*_*nkc 1

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

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

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

有关该 API 的一些示例,请参阅如何在 SQL Server 2012 中部署现有包