2012年SSIS包的行为因环境而异

时间:2012-08-15 17:22:55

标签: ssis sql-server-2012

我们在开发虚拟机上开发了2012 SSIS软件包,该软件包在VS 2010和2012 Server上的Integration Services Catalog中成功端到端地运行。当我们在与我们的开发虚拟机具有相同映像的暂存虚拟机上运行相同的SSIS包时,它会在各种任务上失败。两个VM之间的唯一区别是我们在连接管理器中指向的服务器。但是,该问题与端点或数据无关,而是SSIS如何实际运行任务。在我们的一些数据流任务中,我们使用OLE DB Source组件并使用需要参数的Sql命令。在我们的所有查询中,我们都放置了评在我们的开发虚拟机上,这很好用......没问题。从暂存VM运行时,它无法解析查询以确定参数。另一个例子来自一个执行SQL组件,我们正在拉@@DBTS并将其转换为bigint(即SELECT CAST(@@DBTS AS bigint))。这被放入字符串类型的SSIS变量(CurrentTimeStamp)中。然后我们将它传递给另一个执行SQL组件,该组件调用存储过程,该存储过程接受变量(CurrentTimeStamp),但在参数映射中,我们将输入作为LONG数据类型传递。同样,这在我们的开发虚拟机中工作正常,但在暂存虚拟机中却没有。我们收到错误以下错误:“将结果提取到类型的变量(DBTYPE_I4)时发生错误”。可能的失败原因:查询问题。 “ResultSet”属性设置不正确,参数设置不正确或连接未正确建立。

我已经比较了安装的OS版本,补丁和软件。只有下面列出的差异:

  • Dev VM Staging VM
  • 缺少Microsoft Team Foundation Server 2010 - ENU v10.0.40219
  • Microsoft Visual C ++ 2008 Redistributable - x64 9.0.3.0729.4148缺少
  • Microsoft Visual C ++ 2008 Redistributable - x86 9.0.3.0729.4148缺少
  • 缺少Microsoft Visual C ++ 2008 Redistributable - x64 9.0.3.0729.4974

如果其他人经历过类似的任何指导,您可能会非常感谢。我们的下一步是与MS一起打开支持票,因为这只是一个令人头疼的问题。

提前致谢, 安东尼

编辑...此问题已得到解决。请参阅下面的摘要。

问题1:

++我们有一个Execute Sql Task,它返回一个DB Timestamp值,该值存储在Type LONG的变量中。该任务适用于DEV服务器,但在PROD服务器上失败。在PROD服务器中,如果我们将SSIS变量类型更改为ULONG,则任务成功。

我们发现在PROD中,返回值是一个很大的数字,导致LONG数据类型溢出。在DEV我们有一个较小的值,问题没有发生。我研究并检查了ULONG最大值可以归结为UInt64.MaxValue,这是非常巨大的,应该满足您的要求。 (最大值为:18,446,744,073,709,551,615)

http://msdn.microsoft.com/en-us/library/system.uint64.maxvalue.aspx

问题2:

++我们有一个激活Sql命令的OLE DB源。如果我们在查询之上放置注释,它可以在DEV Server上运行但在PROD服务器上解析时验证失败并出现错误: 无法从SQL命令中提取参数。提供程序可能无法帮助解析命令中的参数信息。在这种情况下,使用“来自变量的SQL命令”访问模式,其中整个SQL命令存储在变量中。


其他信息:

语法错误,权限冲突或其他非特定错误(Microsoft SQL Server Native Client 11.0)

我们发现注释解析能力实际上是在执行查询的后端查询引擎上,而不是SSIS特定的。在我们的DEV中,我们针对Sql 2012实例解析了查询(带有注释),并在其中进行了解析。在失败的PROD服务器中,查询是针对无法解析注释的Sql 2008 R2实例执行的。如果我们将PROD中的连接管理器更改为指向Sql 2012实例并使用注释激发相同的查询,则解析正常。

0 个答案:

没有答案