通过部署升级SSIS包 [英] SSIS package upgraded by deployment

查看:254
本文介绍了通过部署升级SSIS包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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


包名称:错误:包中的版本号为不是
有效。版本号不能大于当前版本

号。



包名称:错误:从节点
DTS:Property加载值8时出错。



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


我的所有包(.dtsx)都有

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

除了清单

 < SSIS:属性SSIS:Name =PackageFormatVersion> 6< / SSIS:Property> 

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

解决方案

所以你所遇到的是预期的行为。使用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是需要查看那里的实际位置并发现的,这是一个我不明白的版本。



如何在SQL Server 2012中部署现有软件包该API的样例


In our QA virtual environment, which contains multiple SQL server, i wanted to deploy an SSIS 2012 package (ispac, project deployment) maintained through Visual Studio 2010. The destination SSIS server was 2012 but the client on the workstation included SQL server 2014. By executing the ispac package on the workstation and specifying to deploy on the SQL server 2012, the deployment went without any errors. But when executing the package on the SSIS server we get errors such as

"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.".

All my package (.dtsx) have

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

As well as the manifest

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

It looks like the SQL 2014 client or the workstation upgraded my package to V8 even though my destination server was V6. When I deployed directly from the SQL 2012 server (which didn't have SQL 2014) everything deployed and ran as expected. Is This the expected result ? or a problem

解决方案

So what you're experiencing is expected behaviour citation needed. When an SSIS package is opened using the APIs, the package is updated to that APIs version. This allows a V-1 package to run on a Vcurrent server. There were changes to the formats and stuff so there are reasons a 2005 package may not run on a 2014 box but that's the intent. The bits on disk remain unaltered but the in-memory version is what gets updated.

Since the deployment used the ISDeploymentWizard in the 120 folder (SQL Server 2014), the first thing it did when it saw the 2012 version of the .ispac is convert it to a 2014 format. So, the in-memory version of this .ispac needs to get serialized into the SSISDB and those APIs are the same between 2012/2014. The DeployProject/deploy_project method just takes a binary object, it doesn't do any validation of what version those bits are, just that it has the right shape.

But, when you go to execute the package, that's when the API needs to look at the actual bits in there and discovers, this is a version I don't understand.

Some examples of what that API looks like on How to deploy an existing package in SQL Server 2012

这篇关于通过部署升级SSIS包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆