转贴天址:http://shanxmxj.iteye.com/blog/1837489>
64位win7下PL/SQL Developer
报“ORA-12154:
TNS:没法解析指定的连接标识符”成绩的一个措置方法
本文去自CSDN专客,转载请标明出处:http://blog.csdn.net/chewinggum/archive/2010/07/18/5744465.aspx>
其他相干文档
1.搜检注册表,HKey_LocalMachineSoftwareOracle下里的Oracle_Home,若分歧错误,修改成切确的; 2.卸载ODP for .Net (或者卸载ODT for .Net, ODT中包含ODP, ODT 是VS.Net的一个集成插件,用于连接战赏识oracle数据库,并且供给对oracle数据库的拖拽操做,近似VS.Net对于SQL Server的本钱操持器); 3.假设ODT for .Net的目录依然存正在,删除或者重定名此目录; 然后重起系统,从头连接ASP.Net法度,假设还有一样的错误,看着办吧,我倡议重拆Oracle吧。 解析原因:系统原去拆的是ORACLE 10G 10.1.0,卸载后还出重启就拆上10.2.0,功能先是监听器起不去,竟然还是指背10.1.0的位置,监听器当然不克不及启动了。 措置过程: 1、查找注册表,将监听器指背新的位置,重启服务,OK; 2、PL/SQL DEVELOPER还是连接不了,另外体例皆一样平居。将原本安拆正在另外逻辑盘的ODP for .Net 卸载重拆到取ORACLE 10.2.0统一位置。重启系统,DEVELOPER还是报错,不过些时报错提示信息为空。 3、因为DEVELOPER设置有更改后,进进菜单TOOLS》PREFERENCES...设置,正在ORACLE下的CONNECTION中,将ORACLE HOME战OCI LIBIARY设为空即主动检测。连接一样平居,成绩措置。 两、使用法度中报错: 一个很易想到的惹起ORA-12154的原因 使用OracleClient.OracleConnection时(我连的是Oracle 9i,其他版本未知),假设你的执止目录太少或者有括号等(未考查有些甚么符号),那么纵然你的服务名是对的,也会惹起ORA-12154成绩“TNS: 没法措置服务名”,当出现阿谁成绩时,请也思索阿谁原因。 B.进止适当的配置 如何切确配置tnsname.ora文件: 可以或许正在客户端机器上使用oracle Net Configuration Assistant或oracle Net Manager图形配置东西对客户端进止配置,该配置东西真际上修改tnsnames.ora文件。所以我们可以或许曲接修改tnsnames.ora文件,下里以曲接修改tnsnames.ora文件为例: 该文件的位置为: …networkadmintnsnames.ora (for windows) …/network/admin/tnsnames.ora (for unix) 此处,假设服务器名为testserver,服务名为orcl.testserver.com,使用的侦听端口为1521,则tnsnams.ora文件中的一个test网络服务名(数据库别名)为: test = (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)) ) (CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com) ) ) 此处的笑容为)。 白色的内容为必要凭据真际状态修改的内容,现解释以下: PROTOCOL:客户端取服务器端通讯的协议,一样平居为TCP,该内容一样平居不消改。 HOST:数据库侦听所正在的机器的机器名或IP天址,数据库侦听一样平居取数据库正在统一个机器上,所以当我说数据库侦听所正在的机器一样平居也是指数据库所正在的机 器。正在UNIX或WINDOWS下,可以或许经由过程正在数据库侦听所正在的机器的呼吁提示符下使用hostname呼吁获得机器名,或经由过程ipconfig(for WINDOWS) or ifconfig(for UNIX)呼吁获得IP天址。必要属意的是,不管用机器名或IP天址,正在客户端必然要用ping呼吁ping通数据库侦听所正在的机器的机器名,否则必要正在 hosts文件中插手数据库侦听所正在的机器的机器名的解析。 PORT:数据库侦听正正在侦听的端口,可以或许察看服务器真个listener.ora文件或正在数据库侦听所正在的机器的呼吁提示符下经由过程lnsrctl status [listener name]呼吁察看。此处Port的值必然要取数据库侦听正正在侦听的端口一样。 SERVICE_NAME:正在服务器端,用system用户上岸后,sqlplus> show parameter service_name呼吁察看。 如何操做配置的网络服务名连接到数据库: 用sqlplus法度经由过程test网络服务名进止测试,如sqlplus system/manager@test。假设不克不及连接到数据库,则正在tnsname.ora文件中的test网络服务名(net service)后里减上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处我的参数值为testserver.com,将其减到网络服务名后里,修改后的tnsname.ora中关于该网络服务名的内容为: 甚么状态下会惹起oracle主动设置NAMES.DEFAULT_DOMAIN参数? 出现那种状态的典型景象为windows的客户真个‘我得电脑à属性à计较机名à更改à另外…à此计较机的主DNS后缀’中设置了‘primary dns suffix’,因为正在那种状态下安拆客户端时,会正在sqlnet.ora文件中主动设置NAMES.DEFAULT_DOMAIN参数,或许当把计较机插手域中安拆oracle客户端时也会出现那种状态,有前提的话人人可以或许试一下。 我正在设置oracle的客户端时一样平居足工修改tnsnames.ora文件,但是还有很多人喜好用图形东西配置,该图形东西最终还是修改tnsnames.ora文件,但是它有时会惹起另外的成绩: 正在用oracle的图形配置硬件"net assistant"或‘Net Configuration Assistant’配置网络服务名时,假设已经设置了‘primary dns suffix’,但是正在图形配置硬件中写的网络服务名的名字中出有‘primary dns suffix’,如只是写了test,则图形配置硬件会主动正在后里减上‘primary dns suffix’,使之变成test.testserver.com,并存正在tnsnames.ora中,而不管你的sqlnet.ora文件中是不是有 NAMES.DEFAULT_DOMAIN参数。此时,用图形东西进止测试连接是经由过程的,但是假设此时sqlnet.ora文件中出有 NAMES.DEFAULT_DOMAIN参数,则你正在使用网络服务名时该当使用正在tnsnames.ora中的 test.testserver.com,而不是你正在图形配置硬件中键进的test。措置的方法为: <1>可以或许正在sqlnet.ora文件中设置NAMES.DEFAULT_DOMAIN= testserver.com,当时你可以或许用test或test.testserver.com连接数据库 <2>正在sqlnet.ora文件中不设置NAMES.DEFAULT_DOMAIN参数,正在tnsnames.ora文件中将test.testserver.com中的.testserver.com去失落,当时你可以或许用test连接数据库。 关于为什们正在网络服务名后里减db_domain参数,必要了解sql*plus连接数据库的道理,我正在后里措置12154常见阻碍中给出了详细的申明。 假设上里的招数还不奏效的话,只好用一下坤坤年夜挪移了。 将客户真个网络服务名部分 test.testserver.com = (DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)) ) (CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com) ) ) 此处的笑容为)。 拷贝到服务器的tnsnames.ora文件中。然后再服务器端用sqlplus system/manager@test.testserver.com连接到数据库。 假设能连接胜利,申明你的客户端取服务器真个网络有成绩。 假设连接不胜利,用前里的部分搜检网络服务名部分部分是不是切确,假设确信网络服务名部分切确而且通盘的客户端皆连不上数据库则可能为系统TCP/IP或Oracle系统有成绩,倡议从头安拆数据库。 常见阻碍措置方法: TNS-12154 (ORA-12154):TNS:could not resolve service name 该错误暗示用于连接的网络服务名正在tnsnames.ora文件中不存正在,如上里的tnsnames.ora中的网络服务名只有test,假设用户正在连接时用sqlplus system/manager@test1则就会给出TNS-12154错误。 要属意的是,有时纵然正在tnsnames.ora文件中有相应的网络服务名,可是用该网络服务名连接时还会出错,出现那种状态的典型配置以下(正在客户真个机器上): sqlnet.ora文件: NAMES.DIRECTORY_PATH = (TNSNAMES, ….) NAMES.DEFAULT_DOMAIN = server.com tnsnames.ora文件: test = (DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)) ) (CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com) ) ) 此处的笑容为)。 sql*plus运止根基机理: 正在用户输进sqlplus system/manager@test后,sqlplus法度会主动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假 如该参数存正在,则将该参数中的值取出,减到网络服务名的后里,即此例中你的输进由sqlplus system/manager@test主动变成sqlplus system/manager@test.server.com ,然后再到tnsnames.ora文件中找test.server.com网络服务名,那当然找不到了,因为该文件中只有test网络服务名,所以报 错。措置的方法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释失落便可,如 #NAMES.DEFAULT_DOMAIN = server.com。假设NAMES.DEFAULT_DOMAIN参数不存正在,则sqlplus法度会曲接到tnsnames.ora文件中找 test网络服务名,然后取出个中的host,port,tcp,service_name,操做那些信息将连接乞请收送到切确的数据库服务器上。 另外原则上tnsnames.ora中的配置不辨别年夜小写,但是我的确遇到辨别年夜小写的状态,所以最好将使用的网络服务取tnsnames.ora中配置的完全一样。 ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor. 该错误暗示能正在tnsnames.ora中找到网络服务名,但是正在tnsnames.ora中指定的SERVICE_NAME取服务器真个SERVICE_NAME不一致。措置的方法是修改tnsnames.ora中的SERVICE_NAME。 易k皆邮跤锵热荩
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22700723/viewspace-1113960/ ,如需转载,请注明出处,否则将追究法律责任。