我在本机装了客户端,虚拟机装了服务端,但从客户端连接服务端出错,提示用tnsping能ping通,客户端tnsnames.ora配置:# tnsnames.ora Network Configuration File: e:\oracle\product\10.2.0\client_1\network\admin\tnsnames.ora# Generated by Oracle configuration tools.IPCC = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.108)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = IPCC) ) )
到oracle 的安装目录下面如C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN中找到listner.ora文件,SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) --在原始的文件中加入下面内容,即将你创建的数据库的SID描述告知给监听器。--- (SID_DESC = (GLOBAL_DBANAME = testDB) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (SID_NAME = testDB) ) ---------------------------- )
先说原理:关于12514的问题一般来说看2个文件:tnsname.ora和sqlnet.ora。其中tnsname里的叫做connection string, 包含的有host的名字或者IP,还有Port (你问题中也给出了)sqlnet说的是用户密码检验的方式,本地及安装Oracle时不需要管, 而远程时就必须要看一下。---------------------------------------------------------------------------------------------------------下面是你的问题:你Ping成功了, 说明, 连接是有的。 那么要检查你的TNSNAME是否完全正确,常见错误如少括号之类的。 就你的例子来看,应该没错。tnsname无错误且Ping的连接也成功,就意味着你的 PL/SQL DEVELOPER是可以将密码通过TNSNAME的连接送到指定服务器的。那你就要看下sqlnet: 请查一下里面的内容, 看看这句是否可以改成(None)数值。SQLNET.AUTHENTICATION_SERVICES= (NONE)