SSIS连接Oracle报错:ORA-12154: TNS:could not resolve the connect identifier specified。但在CMD里面是可以连接的,请问该如何解决?

0
RT
已邀请:
1

梁勇 - 天道酬勤、上善若水。爱好商业智能 2014-09-25 回答

问题 ORA-12154: TNS:could not resolve the connect identifier specified ,即无法解析指定的连接标识符。这说明缺少了一个环境变量,TNS_ADMIN 。

解决方法:右击 我的电脑 -> 属性 -> 高级 -> 环境变量 -> Administrator 的用户变量 -> 新建 ,
变量名为:TNS_ADMIN 变量值为:%ORACLE_HOME%/NETWORK/ADMIN/
其中 %ORACLE_HOME% 即 Orcale 的安装路径,其实,设置的该环境变量的值为 tnsnames.ora 文件所在路径,特别是重装后或其它操作,忘了设置TNS_ADMIN 变量,SSIS连接Oracle或者 PL/SQL 登陆就会报“无法解析指定的连接标识符”的错误 ,而设置TNS_ADMIN 变量是为了能够找到 tnsnames.ora 。如果本机上安装了ORACLE,并且设置了 ORACLE_HOME 环境变量,那么会自动在 %ORACLE_HOME%/NETWORK/ADMIN/ 位置查找 tnsnames.ora 文件。
1

lyll106 2014-09-25 回答

(1)谢谢梁总和高人--孟菲斯,
(2)我的环境:win7本机,oracle_win64就装在本机上, 安装了32和64位client(并且是先装32再装64),并且也装了微软自己的Microsoft Connectors v1.2 for Oracle and Teradata
http://www.microsoft.com/en-ca ... 29284,但这个问题没有得到解决,依然存在,
(3) 解决办法:在梁总指导下,重新增加了一个环境变量--变量名为:TNS_ADMIN 变量值为:%ORACLE_HOME%/NETWORK/ADMIN/,问题就迎刃而解了

(4)根据孟菲斯的详细步骤:我没有做7,8,9步,其余的我都做了,问题应该出在这里了。
0

孟菲斯 - 80后IT男... 2014-09-25 回答

楼主 你这问题 有问题啊 据我所知SSIS2008 64位 以上版本 都会报这个错 因为因为MSDE只支持32位的oracle的客户端 我猜测是你要用64位oracle客户端遇到的问题吧 如果32位的话 遇到这个问题最简单就是重装吧 如果是用oracle 64位客户端遇见ORA-12154: TNS:could not resolve the connect identifier specified 我有解决办法 并且已经验证过了!
0

孟菲斯 - 80后IT男... 2014-09-25 回答

解决上述问题办法1:
注意所用ssis为2012以下版本
用微软自己的Microsoft Connectors v2.0 for Oracle and Teradata来链接oracle下面是下载地址
http://www.microsoft.com/en-us ... 29283
0

孟菲斯 - 80后IT男... 2014-09-25 回答

解决方法2:适合ssis几乎所有的版本
SSIS 64位环境访问Oracle11g

SSIS 为了要能够在64位的机器上面让SSIS存取Oracle,当然需要安装64位的Oracle Provider,但是遇到最大的问题在于SSIS在执行的时候分成两种组件,分别是DTExec.exe(32位版)以及DTExec.exe(64位版),分别存在于Program Files(x86)以及Program Files目录之下。当SSIS在执行时候或者是在利用导入导出数据(64位版)时都不会有问题



但是最大的问题在于SSIS在设计阶段时利用的BIDS只有32位版,因此在开发时若是要测试连接,会找不到对应的32位提供程序,而发生初始化提供程序的问题(所以大家这时会质疑我明明已经装了,为什么他说找不到)


因此若是要解决方式就必须同时安装32位以及64位的Oracle Client。

以下说明,在64位Windows环境下安装Oracle Client & OLEDB组件的步骤(我的操作系统是Windows Server 2008 R2):

1、需要先准备32位以及64位两种版本的Oracle Client,建议使用11.1.0.7.0版,因为如果是使用10.2.0.1版本需要再安装两个Oracle补丁(#4547817 & #5383042) ,如果没有安装以上补丁会遇到ORA-12154: TNS:无法解析指定的连接ID的问题。

2、如果系统上有旧的Oracle clients,请复制备份tnsnames.ora以及sqlnet.ora档案。(位于%ORACLE_HOME%/network/ADMIN/目录下)

3、安装以及删除旧的Oracle client以及安装目录(需要重启计算机,才能够删除目录)。

4、在64位SQL Server的机器上面执行Oracle 11g Client的setup.exe,必须先安装32 位版本。

5、选择[管理员]模式全部安装(专业级人士可以自行选择模式)。



6、选择相应的语言下一步,然后根据需要修改路径


在此我将32位的路径文件夹改为client_1,

将64位的路径文件夹改为client_2.

7、安装完后重新将TNSNAMES.ORA替换新安装的client的%ORACLE_HOME%/network/admin文件夹中,32位和64位都要替换,否则在使用PLSQL或者BIDS创建Oracle数据源时会提示TNS错误。

P.S.如果在安装完2个client(32位和64位)之后使用自带的Net Manager配置服务命名时其配置的的都是64位的,即配置的ORA都存在64位的client目录的admin文件夹中,所以始终无法使用BIDS连接Oracle(除非使用IP\服务名方式)

8、重复以上步骤再安装一次64位Client



P.S.安装时会出现[OracleMTSRecoveryService 已存在]或者一些PATH路径值过多等的错误信息,请点选[忽略]继续安装即可,当然也可以找寻相应的解决方案解决更好,只是这些问题都不是非常严重的。

9、修改以下的注册表设定,然后重启电脑

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSDTC\MTxOCI

将值改为

OracleOciLib = oci.dll

OracleSqlLib = orasql11.dll (旧的值是: SQLLib80 .dll)

OracleXaLib = oraclient11.dll (旧的值是: xa80.dll)



此时就可以正常地在64位环境中的BIDS读取Oracle数据了。各位可以利用32位版以及64位版的导入导出数据进行测试。

但是要记得的是,使用BIDS时,它是根据32位的数据提供程序,因此在开发以及排错时还是利用32位的Oracle OLEDB来读取数据。但是当SSIS封装布署到64位SQL Server执行时,他就会改使用64位的Oracle OLEDB

参考博客:http://www.dotblogs.com.tw/all ... .aspx

要回复问题请先登录注册