在以前的
DTS
中,在包的开发、测试、发布迁移过程中
你必须手动的修改包中的所有连接参数及其变量的值,
幸运的是,现在在
SSIS
中提供了这种问题的解决方案,那就是“包配置”
却不能成功,错误如下:
包配置是一个动态改变你的
SSIS
对象和连接属性的一种机制
,
它把这些动态可以改变的信息保存在包的外部,在需要修改的时候,可以灵活地加以配置,再也不用进入到包的开发环境中去进行修改、编译、发布。
总共有下面几种方法存储这些值并将其传送到包中:
总共有下面几种方法存储这些值并将其传送到包中:
XML文件
环境变量
注册表键值
父包变量
但是在使用包配置的过程中,还不是一帆风顺的,有挫折、有苦恼,有郁闷,幸好,最后都统统化为了成功和喜悦,下面就请大家与我一起来分享我的挫折和喜悦:
一、数据库连接在包中配置完成后,但包却不能成功运行:
选择[SSIS菜单]-->[包配置]-->[启用包配置]-->[添加]-->选择[XML文件]-->[下一步],选择以下属性:
选择[SSIS菜单]-->[包配置]-->[启用包配置]-->[添加]-->选择[XML文件]-->[下一步],选择以下属性:
ConnectionString
InitialCatalog,
Name
Password
ServerName
UserName
如图:
如图:
一切都按缺省设置,至最后完成。点击
[
运行
],
出现如图所示错误
:
解决:从
windows
资源管理器中,找到配置文件(*.
dtsconfig
),原来是配置文件中的用户密码丢失了,手工补上,
[
保存
]
―>
[
运行
]
,仍然跳出以上错误,为什么啊?
解决:再打开配置文件,发现还有一个地方面,密码为空,补上:
[保存]―>[运行],一切OK。
[保存]―>[运行],一切OK。
分析:为什么配置了
ConnectionString
属性,还要配置
UserName
、
Password
呢,左思右想,不得其解,再试着修改一下
ConnectionString
属性(故意改错),
再 [ 运行 ], 还是能成功运行,这就有点怪了,难道 ConnectionString 属性没有什么用?带着这个疑问,我将下面的 InitialCatalog, 、 Name 、 Password 、 ServerName 、 Us
erName 全部删除,只剩下 ConnectionString 属性,又当如何,意外发生了,竟然成功了,后来查了一些资料,也没有得到准备的答案,个人猜想,如果 Connecti
onString 、 InitialCatalog, 、 Name 、 Password 、 ServerName 、 UserName 这些属性同时存在时,则以 InitialCatalog, 、 Name 、 Password 、 ServerName 、 UserName 配置
的属性优先,否则以 ConnectionString 属性为准。如果不对,请网友更正一下。
二、连接oracle 数据库出现的问题:
再 [ 运行 ], 还是能成功运行,这就有点怪了,难道 ConnectionString 属性没有什么用?带着这个疑问,我将下面的 InitialCatalog, 、 Name 、 Password 、 ServerName 、 Us
erName 全部删除,只剩下 ConnectionString 属性,又当如何,意外发生了,竟然成功了,后来查了一些资料,也没有得到准备的答案,个人猜想,如果 Connecti
onString 、 InitialCatalog, 、 Name 、 Password 、 ServerName 、 UserName 这些属性同时存在时,则以 InitialCatalog, 、 Name 、 Password 、 ServerName 、 UserName 配置
的属性优先,否则以 ConnectionString 属性为准。如果不对,请网友更正一下。
二、连接oracle 数据库出现的问题:
当配置文件中有
Oracle
数据库的连接配置时,按照上面的方法,配置了
ConnectionString
、
InitialCatalog,
、
Name
、
Password
、
ServerName
、
UserName
这些属
性, [ 运行 ],Error “ 可能是连接不正确,或者你没有访问该连接的适当权限 ” ,难道上面的结论有误?删除 ConnectionString 属性,仅剩下 InitialCatalog, 、
Name 、 Password 、 ServerName 、 UserName 这几个属性时, [ 运行 ] ,还是出错,这就怪了,再反过来,删除 InitialCatalog, 、 Name 、 Password 、 ServerName 、
UserName 属性,仅剩下 ConnectionString 属性, [ 运行 ] ,成功。
性, [ 运行 ],Error “ 可能是连接不正确,或者你没有访问该连接的适当权限 ” ,难道上面的结论有误?删除 ConnectionString 属性,仅剩下 InitialCatalog, 、
Name 、 Password 、 ServerName 、 UserName 这几个属性时, [ 运行 ] ,还是出错,这就怪了,再反过来,删除 InitialCatalog, 、 Name 、 Password 、 ServerName 、
UserName 属性,仅剩下 ConnectionString 属性, [ 运行 ] ,成功。
分析:在
[
包配置
]
的属性配置器上,没有驱动程序配置这一项,我们仅配置了
InitialCatalog,
、
Name
、
Password
、
ServerName
、
UserName
这几个属性,
所以SSIS 不知道,是要连接 Sql server 还是 Oracle ,缺省都是连接 SQL Server ,所以连接不正确,但是 ConnectionString 属性,却可以写入驱动程序,如图 :
所以SSIS 不知道,是要连接 Sql server 还是 Oracle ,缺省都是连接 SQL Server ,所以连接不正确,但是 ConnectionString 属性,却可以写入驱动程序,如图 :
三、SSIS包在开发环境下,[运行]
正常,但通过Job 任务,却运行出错?
SSIS包在开发环境下,或者直接双击包文件(前提:启用包配置),如图:
SSIS包在开发环境下,或者直接双击包文件(前提:启用包配置),如图:
[
执行]
成功,但是通过 Sql Server
代理(job )
来执行,如图
却不能成功,错误如下:
解决:去掉配置文件ConnectionString
属性的
Auto Translate=False;
就OK
了
分析:还没有找到原因,希望能和网友一起讨论。
总结:数据库连接字符串在SSIS
包中配置时,属性不能多,也不能少,仅ConnectionString
属性足已,修改容易,扩展好。
如图:
本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/236193,如需转载请自行联系原作者