Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Oracle即时客户端时出现ORA-12154错误_Oracle_Odbc_Connectivity_Tnsnames - Fatal编程技术网

使用Oracle即时客户端时出现ORA-12154错误

使用Oracle即时客户端时出现ORA-12154错误,oracle,odbc,connectivity,tnsnames,Oracle,Odbc,Connectivity,Tnsnames,我在Windows 7 32位上尝试使用Oracle Instant client设置在ODBC DSN上进行测试连接时遇到此错误。我让它在另一台32位Vista的机器上工作 信息: 1.目录结构是:c:\oracle\instantclient\u 11\u 2。instantclient_11_2目录中的基本客户端和即时客户端文件,与工作机器上的一样。 2.系统路径中的c:\oracle和c:\oracle\instantclient\u 11\u 2 3.将TNS_ADMIN添加到系统路径

我在Windows 7 32位上尝试使用Oracle Instant client设置在ODBC DSN上进行测试连接时遇到此错误。我让它在另一台32位Vista的机器上工作

信息:
1.目录结构是:c:\oracle\instantclient\u 11\u 2。instantclient_11_2目录中的基本客户端和即时客户端文件,与工作机器上的一样。
2.系统路径中的c:\oracle和c:\oracle\instantclient\u 11\u 2
3.将TNS_ADMIN添加到系统路径并指向c:\oracle
4.tnsnames.ora是从工作机器和c:\oracle中复制的
5.sqlnet.ora位于c:\oracle中。工作副本只是将“TCP.CONNECT\u TIMEOUT=5”作为一个条目,但当它不工作时,我尝试添加:NAMES.DIRECTORY\u PATH=(LDAP、TNSNAMES、HOSTNAME)
6.我可以远程登录到oracle服务器和1521端口(在tnsnames.ora中定义)


还有什么要检查的吗?

如果您的tnsnames.ora如您在评论中所说,那么您在DSN中使用了错误的值。您需要在DSN中使用TNS别名,即
ABCDM
。您不能直接引用服务名称,除非您碰巧也将其用作别名。

我们发现,当调用该名称的应用程序安装在Program Files(x86)目录中时,会返回该错误。在该文件夹外重新安装程序将清除错误。不确定为什么Oracle Instant Client不能很好地使用安装在那里的程序。

您用于DSN的连接标识符是什么;例如,它是TNS别名还是Easy Connect字符串?
sqlnet.ora
现在是否与工作机器上的匹配?-我只是在ODBC管理员中设置一个DSN,在tnsnames.ora中指定TNS服务名称。sqlnet.ora是一样的——正如我在上面所说的,正在工作的一个只有一行。下面是tnsnames.ora文件的内容,我在DSN中指定了MIADM:
ABCDM=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.99.99.99)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MIADM))
OK,行了。奇怪的是,我用的是“SERVICE NAME”在旧机器上——MIADM。我在旧机器上检查了tnsnames.ora的其他副本,以防我丢失了一些东西。没有任何意义。为什么会这样?@user2281976-我不是真的使用ODBC,但你确定两台机器对DSN使用相同的驱动程序,并且旧机器实际上使用的是TNS别名-它没有指定直接连接的主机和端口,在这种情况下,它将使用服务名称
MIADM
?我想知道设置该名称的人是否也有类似的问题,并最终绕过了
tnsnames.ora
。否则,我恐怕不知道*8-)我是设置另一个的人…不要绕过tnsnames.ora。我通常使用JDBC,但在这种情况下必须使用ODBC…:-(