在Integration Services目录环境中对与DB2的SSIS连接表达式进行参数化

时间:2018-10-01 11:17:16

标签: sql-server ssis db2

我有一个简单的程序包,它将数据从DB2提取到SQL Server数据库。 DB2连接将Microsoft OLE DB提供程序用于DB2驱动程序。将数据库连接字符串表示为表达式,因为必须将解决方案部署到进行不同配置的Integration Services目录(其他ICS)的不同环境中。例如,在TEST环境中,将TestUser配置为连接到DB2测试数据库,以此类推,在Acceptance和Prod环境中。

解决方案的ProtectionLevel设置为 DontSaveSensitive
用于连接的解决方案变量在项目参数中声明。密码设置为敏感,因此值不会存储在程序包中,而必须由ICS环境属性提供,密码值也存储为敏感

连接的表达式:

"Data Source=" + @[$Project::DB2DataSource] + ";User ID=" + @[$Project::DB2UserId]+ ";Initial Catalog=" + @[$Project::DB2InitialCatalog] + ";Provider=DB2OLEDB.1;Persist Security Info=True;Network Address=" + @[$Project::DB2NetworkAddress] + ";Network Port=" + @[$Project::DB2NetworkPort] + ";Package Collection=NULLID;"

评估为:

Data Source=DB2test;User ID=myUser;Initial Catalog=​DB2test;Provider=DB2OLEDB.1;Persist Security Info=True;Network Address=DB2test;Network Port=99999;Package Collection=NULLID;

密码在DB2 Connections属性中作为密码表达式单独提供。我将其与ConnectionString分开了,因为密码设置为 Sensitive ,所以ConnectionString表达式无法求值,如图: DB2 Connection properties 好吧,至少我希望它能那样工作。在开发过程中,我将密码更改为“不敏感”,因此我可以通过Visual Studio测试流程,并且可以正常工作。部署到ICS时,我将密码更改为Sensitive,因为ICS环境密码变量设置为Sensitive,并且软件包和ICS环境中的状态都必须匹配。

在ICS流程不起作用的情况下,我总是遇到一些连接错误。 ICS env中的DB2连接变量与解决方案属性中的相同,因此值不是失败的原因。一种运行错误的示例:

  

错误:SSIS错误代码   DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。的   对连接管理器“ DB2_user”的AcquireConnection方法调用   失败,错误代码为0xC0202009。可能发布了错误消息   在此之前,详细了解为什么AcquireConnection方法   通话失败。

     

Extract_DB2_Db2PasyIsoExtract:Error:SSIS错误代码DTS_E_OLEDBERROR。   发生OLE DB错误。错误代码:0x80040E73。 OLE DB记录   可用。来源:“ Microsoft OLE DB服务组件”结果:   0x80040E73说明:“初始化字符串的格式不正确   符合OLE DB规范。”。

所以看起来好像有一些连接字符串。也许密码未正确通过?我找不到合适的方法来通过ICS调试生成的ConnectionString。
也许我应该注意一些安全设置?由于特定的部署过程,无法使用其他ProtectionLevel选项。欢迎任何意见或方法建议!

2 个答案:

答案 0 :(得分:1)

我能够找出问题所在,简短的回答是,由于Microsoft OLE DB Provider for DB2驱动程序版本之间的环境差异,SSIS包失败了。

我的工作站和TEST环境具有用于DB2版本4.0的Microsoft OLE DB提供程序。 SYST和PROD具有较旧的版本,它们不支持SQL脚本任务中的参数。例如,较旧版本的驱动程序不支持SELECT * FROM dbo.Customers WHERE Id > ?

我怀疑动态连接字符串,但是它们按预期工作。
这个问题很简单,但是花了很长时间才发现驱动程序不同,这会引起问题。

答案 1 :(得分:0)

建议:对于正确的连接字符串,请使用Microsoft数据访问工具。 它与DB2OLEDBV6_x64.msi一起安装,它是SQL SERVER 2016 SP2 Feature Pack的一部分