`

64位win7下PL/SQL Developer 报“ORA-12154: TNS:无法解析指定的连接标识符”问题的一个解决办法[转帖]

阅读更多

64位win7下PL/SQL Developer 报“ORA-12154: TNS:无法解析指定的连接标识符”问题的一个解决办法 
    接着上次的话题,在64位win7上装了32位oracle10g 以后又出现了新的问题:
    在使用oracle自带的sqlplus连接本机或者远程的oracle实例均能成功过,但使用 PL/SQL Developer (我装的是7.1版本) 连接任何一个实例在登录时均报“ORA-12154: TNS:无法解析指定的连接标识符”错误。
    冷静,先分析原因,既然sqlplus已经能够连接,说明oracle的安装(至少客户端的安装)是正常的,TNS的配置是正确的。问题应该出在PL/SQL Developer 自身。考虑到本次安装oracle的过程中有诺干次安装失败且变换过oracle home,是否是注册表中的信息有写垃圾未清理?!进入 PL/SQL Developer  的 preferences中发现可以设定oracle home。该选项为空是自动选择,也可以手工填入路径。但是设置后没有效果。之后又检查了注册表、oracle设置均无异常。
    无奈之下选择了重装PL/SQL Developer 。运行安装程序以后弹出一个警告框,这次仔细的看了一下,大概意思是安装目录中含有特殊字符可能导致oracle无法连接。该提示窗口按“确认”按钮后依然会继续安装。恍然大悟啊,64位win7会把32位应用程序默认的安装到Program Files (x86)目录下,那两个括号可能让oracle郁闷了。改变安装路径为一个比较“大众化”的路径,再次进行数据库连接,一切问题都解决了。
    经验总结:哥么以后打死也不往默认的32位 program files目录下装东西了。

 

本文来自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。

  易混淆术语介绍:
    Db_name:对一个数据库(Oracle database)的唯一标识,该数据库为第一章讲到的Oracle database。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负 担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和 Db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和 Db_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。 Db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。

    Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。

    Global_name:对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain>命令进行修改,然后修改相应参数。

    Service_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中, 一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库, 而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关 系,即不必Service name 必须与SID一样。

    Net service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。
分享到:
评论
3 楼 nirohappy 2014-04-16  
分析得非常好,帮到大忙了
2 楼 行到水穷 2014-02-21  
昨天搞了半天,原来答案就是这么坑 ,谢谢大神 
1 楼 wukele 2013-08-14  
及时雨,找了好久

相关推荐

    PL/SQL登录Oracle数据库报错ORA-12154:TNS:无法解析指定的连接标识符已解决(本地未安装Oracle需要连接服务器上的)

    ORA-12154:TNS:无法解析指定的连接标识符 ORA-12154:TNS:无监听程序 错误分析一、PL/SQL 客户端登录到数据库,如果配置错误会有以上错误,如下图。 这个错误主要是pl/sql客户端的tnsnames.ora配置错误,或者是输入 ...

    ORA-12154 TNS 无法解析指定的连接标识符

    在使用Oracle数据库时,经常会遇到一个常见的错误提示:“ORA-12154: TNS: 无法解析指定的连接标识符”。此错误通常发生在尝试从客户端连接到服务器端数据库时,表明客户端无法正确识别或解析连接字符串中的指定...

    64位win7下pl/sql无法连接oracle解决方法

    1、pl/sql无法连接本机的oracle(ORA 12154:TNS:无法解析指定的连接标识符) 解决方法:pl/sql不能安装在Program Files(x86)文件夹下,要安装在Program Files文件夹下 2、pl/sql无法连接远程oracle(ORA-12514: TNS: ...

    plsql连接oracle工具

    PL/SQL Developer是一款专业的Oracle数据库开发工具,常被称为PLSQL工具,它专为数据库管理员、开发者和分析师设计,用于高效地编写、测试和调试PL/SQL代码。在Oracle数据库环境中,PL/SQL是一种过程化语言,它将SQL...

    适用于W7-64位安装Oracle-11g-R2之后与PLsql连接的帮助文档

    在Windows 7 64位操作系统上安装Oracle 11g Release 2 (11g R2) 后,为了能够成功地通过PL/SQL Developer工具进行数据库连接,需要进行一系列配置步骤。以下是一个详细的过程指南: 1. **安装PL/SQL Developer**: ...

    plsql连接oracle数据库报ora 12154错误解决方法

    在尝试使用PL/SQL Developer连接Oracle数据库时,可能会遇到“ORA-12154: TNS: 无法解析指定的连接标识符”这一错误。此错误通常表明PL/SQL Developer在尝试与Oracle数据库建立连接时遇到了网络通信问题,具体原因...

    oracle PL/SQL

    总结来说,解决Oracle PL/SQL连接问题通常涉及检查和调整Oracle网络配置文件,尤其是`listener.ora`和`tnsnames.ora`。了解这些文件的结构和内容对于有效管理Oracle数据库连接至关重要。在开发和维护Oracle数据库...

    PLSQLDeveloper_解压版(64位),加入tnsname.ora的配置

    本资源"PLSQLDeveloper_解压版(64位)"提供了一个无需安装的版本,适合那些希望快速启动并运行PL/SQL开发工作的用户。64位版本确保了对大内存应用的良好支持,可以处理更复杂的数据库操作。 在使用PL/SQL Developer...

    oracle问题

    另一常见问题是64位Windows系统上的PL/SQL Developer在尝试连接Oracle数据库时提示“Could not load '...\bin\oci.dll'”。这是因为PL/SQL Developer默认仅支持32位操作系统下的Oracle客户端。 #### 解决步骤 1. *...

    Oracle 客户端PL sql Developer 免安装

    免安装版本的PL/SQL Developer通常是一个便携式版本,不需要在计算机上进行正式的安装过程,只需解压缩到指定目录并进行简单的配置即可使用。 在描述中提到的"红油桶客户端"可能指的是Oracle的图形化管理工具——...

    win7 旗舰版下使用64位oracle 11g和PLSQL developer的方法

    在Windows 7 旗舰版上安装和使用64位Oracle ...参考提供的文件"Oracle_11g_R2_for_Win7旗舰版(64位)的安装步骤.pdf"和"win7下使用64为PLSQL+developer.doc",可以更详细地了解每个步骤的细节和可能遇到的问题解决方案。

    window7 64位 Oracle11g x64 安装plsql

    在Windows 7 64位操作系统上安装Oracle 11g x64并配置PL/SQL Developer是一项技术性较强的任务,因为涉及到多个组件的安装和配置。以下将详细阐述整个过程,确保您能够成功地在64位环境下搭建Oracle数据库环境,并...

    oracle11g-plsql连接工具

    Oracle 11g PL/SQL连接工具是一款专为64位操作系统设计的数据库管理软件,它使得开发人员和DBA可以方便地与Oracle 11g数据库进行交互。这款工具无需安装,具备绿色便携的特点,可以快速启动并进行数据库管理工作。 ...

    Windows 7、8、10下使用 Oracle 即时客户端

    如果未设置此变量,使用PL/SQL Developer等工具尝试连接时可能会遇到`ORA-12154`错误,提示无法解析指定的连接标识符。 对于PL/SQL Developer的配置,打开“Tools”菜单,选择“Preferences”,然后设置以下两个...

    数据库配置

    特别是在重装系统或进行其他操作后,如果忘记设置`tns_admin`变量,使用PL/SQL Developer等工具登录数据库时可能会遇到“无法解析指定的连接标识符”的错误。 ##### 3.2 验证`tnsnames.ora`文件 - 检查`tnsnames....

    PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享

    对于TNS_ADMIN,该环境变量的值应该设置为tnsnames.ora文件的存放路径,这是因为tnsnames.ora文件中定义了数据库连接串信息,而PL/SQL Developer需要通过TNS_ADMIN找到这个文件才能正常解析连接标识符。 在配置环境...

    PLSQL Developer11远程连接oracle(二)

    在“PLSQL Developer11远程连接oracle(二)”这个主题中,我们将深入探讨如何使用该工具进行远程Oracle数据库的连接,以及可能遇到的问题和解决方案。 首先,安装PLSQL Developer 11是必要的第一步。下载并安装...

Global site tag (gtag.js) - Google Analytics