我有一个Master包,我在使用Execute包任务调用几个包。
子包和主包都没有任何配置,并且在连接管理器中使用硬编码的SQL身份验证连接连接OLEDB(SQL Server)。
此外,软件包还使用密码加密敏感。
看到奇怪的行为: 1.子程序包在从BIDS运行时成功运行,但在从具有“获取连接失败”的主程序包运行时失败
“对连接管理器的AcquireConnection方法调用失败,错误代码为0xC0202009”
有人可以帮忙解决这个问题吗?
答案 0 :(得分:3)
您的子包似乎没有从父包中获取连接字符串。您需要将连接字符串从Parent传递给子包。
选中此article
更新: -
当你有EncryptSensitiveWithPassword作为你的子包和父包的访问控制时,然后从父包执行子pkg
在执行期间,系统将提示您输入子包的密码。
有些情况甚至在运行时输入密码之后,由于获取连接错误,子pkg执行失败。由于子连接字符串(在执行包任务中),这可能仍然发生(我不确定)指向修改后尚未重建的旧子包。
我的建议是当你将Execute SQL Task
拖到控制流上时使用文件系统位置并指向放在bin文件夹(或部署路径)中的更新子包
并在任务中输入子包的密码
为了从Integration Service(MSDB)运行父包,您需要在运行时执行时如何传递子解密密钥。
编辑:
步骤1:为父SSIS包创建包配置。Execute Package Task
具有属性PackagePassword
。您需要在创建配置文件时选择此属性
Executables->ExecutePackageTask->PackagePassword
步骤2:创建XML文件后,打开它并搜索ConfiguredType =属性,并在配置的值中输入子包的密码
步骤3:在MSDB中导入父包后,在配置选项卡中选择配置文件
答案 1 :(得分:1)
64/32位错误?你有excel连接管理器作为源吗?
Dtexec同时拥有64位和32位应用程序。我假设当你从BIDS运行时,它使用32位dtexec,你是如何运行主服务器的?如果您双击它,可能是问题,因为DTExecUI(执行包实用程序)仅作为32位应用程序可用。如果您正在使用64位服务器并通过DTExecUI运行程序包,则程序包将以32位仿真模式运行。此外,如果使用的连接管理器不符合32位,则程序包可能会失败。
请务必注意,如果在32位环境中开发软件包并希望在64位环境中运行软件包,则连接管理器需要符合64位标准。某些连接管理器(如Excel)仅在32位环境中工作。
编辑: 尝试在此处设置密码: