ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程

    今天使用PL/SQL Developer连接到一台新的测试服务器时,遇到ORA错误:ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程。对应的监听日志文件里面错误为TNS-12523: TNS:listener could not find instance appropriate for the client connection

 

首先使用oerr命令查看ORA-12523错误提示的详细内容

[oracle@DB-Server admin]$ oerr ora 12523
12523, 00000, "TNS:listener could not find instance appropriate for the client connection"
// *Cause:  The listener could not find any available (database) instances, 
// that are appropriate for the client connection.
// *Action: Run "lsnrctl services" to ensure that the instance(s) are
// registered with the listener, and have status READY.

 

按照提示信息,我首先运行"lsnrctl services" 查看数据库实例是否注册了监听服务,并且监听服务是否处于就绪状态。

[oracle@DB-Server admin]$ lsnrctl services
 
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 06-JAN-2015 14:24:23
 
Copyright (c) 1991, 2007, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.16.22)(PORT=1521)))
Services Summary...
Service "EPPS" has 1 instance(s).
  Instance "EPPS", status UNKNOWN, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0
         LOCAL SERVER
The command completed successfully

 

然后检查了一下本地的tnsnames.ora的配置情况,发现其使用共享服务器模式(SHARED)连接到数据库

TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.16.22)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = epps)
    )

检查查看测试服务器,确认其配置是否开启了共享服务器(Shared Server)模式,如下所示,数据库为开启共享服务器模式

SQL> show parameter shared_server
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     40
shared_server_sessions               integer
shared_servers                       integer     1
SQL> 
 
SQL> show parameter dispatchers
 
NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
dispatchers                          string                           (protocol=TCP)
max_dispatchers                      integer
SQL> 

但是为什么数据库启用了共享服务器模式,客户端无法以SHARED模式登陆数据库? 那么我先修改客户端的连接方式为专用(DEDICATED)模式

TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.16.22)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = epps)
    )
  )

此时以使用PL/SQL Developer登录数据库,发现OK,不会出现ORA-12523错误哦。查看当前会话,你可以通过下面SQL发现使用专用方式连接数据库。

SQL> select server from v$session where sid = (select sid from v$mystat where rownum < 2);
 
SERVER
---------
DEDICATED

当然,你可以用下面SQL语句查看,其中GET253194为本人计算机名称

COL USERNAME FOR A20
COL OSUSER FOR A10
COL MACHINE FOR A20
COL TERMINAL FOR A20;
SELECT SID, USERNAME, OSUSER, MACHINE,TERMINAL, SERVER 
FROM V$SESSION
WHERE TERMINAL='GET253194'; 

 

修改tnsnames.ora,将(SERVER = DEDICATED)删除(如下所示),依然可以连接到数据库,查看其连接方式,发现它会自己选择专用连接方式。也就是说默认为专用模式连接,除非指定为共享服务器模式

TEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.16.22)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = epps)
    )
  )

SQL> select server from v$session where sid = (select sid from v$mystat where rownum < 2);
 
SERVER
---------
DEDICATED

那么问题出在哪里呢?
很是纳闷,明明服务器为共享服务器模式,应该可以以共享服务连接方式连接数据库的。最后在折腾中发现,这台服务器本来是生产服务器,后来退下来被我当做测
试服务器,于是我将IP地址改为了192.168.16.22,
但是当时只是修改了/etc/sysconfig/network-scripts/ifcfg-eth0系统文件.
忘记修改/etc/hosts对应的IP地址。我将/etc/hosts中的IP地址修改过来后,发现ORA-12523错误不见了,问题完满解决。但是
本质的原因呢?看来还需要深入了解监听服务原理。多去学习、了解一些相关资料。留待后面补充。

时间: 2024-12-05 17:52:51

ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程的相关文章

oracle-ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程

问题描述 ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程 ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程 解决方案 这是要修改客户端配置tnnames.ora文件,你试一下如下的修改 demo = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 主机名)(PORT = 端口号)) ) (CONNECT_DATA = (SERVER = SHARED) (SID=de

紧急紧急-ora 12514 tns监听程序当前无法识别连接描述符中的请求

问题描述 ora 12514 tns监听程序当前无法识别连接描述符中的请求 解决方案 主机字符串不对,进net manager配置一下数据库连接. 解决方案二: 查看一下你的连接字符串,有参数没有配置正确 解决方案三: Oracle Clientm没有安装和配置

ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序

当你碰到ORA-12520错误时,如下所示: 英文: ORA-12520: TNS:listener could not find available handler for requested type of server 中文: ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序 一般你应该从下面两个方面考虑: 1:数据库是专用服务器,但是在tnsname.ora配置文件中设置的连接方式是shared,这种情况需要修改tnsname.ora配置文件,这种错误情况

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

环境:Oracle 11g R2 + PL SQL Developer + SQL Plus 问题:Oracle主服务和监听器服务已经启 动,使用SQL Plus能够正常连接,使用PL SQL Developer连接报次错误:ORA-12514: TNS: 监听程序当前无法 识别连接描述符中请求的服务.如图: 解决: 打开H:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN(不同机器目录可能不同 )目录下的listener.ora文件,发现此文件内容如下

c#-ORA-12504: TNS: 监听程序在CONNECT_DATA 中未获得SERVICE_NA

问题描述 ORA-12504: TNS: 监听程序在CONNECT_DATA 中未获得SERVICE_NA vs2015客户端C#连接服务器的Oracle数据库,提示ORA-12504: TNS: 监听程序在CONNECT_DATA 中未获得SERVICE_NA listener.ora文件内容: tnsnames.ora文件内容: 解决方案 先在system用户下查一下你的数据库实例名是否为"orcl"?: select value$ from sys.props$ where na

连接oracle数据库出现oracle ORA-12526: TNS: 监听程序: 所有适用例程都处于受限模式

服务器被重启之后连接出错,登陆服务器 sqlplus可以连接,但是jdbc以及sqldeveloper连接报错 ORA-12526 .   网上搜索到:   今天使用PL/SQL远程连接oracle数据库出现oracle ORA-12526: TNS: 监听程序: 所有适用例程都处于受限模式. 查了下原来之前改字符集时执行了:ALTER SYSTEM ENABLE RESTRICTED SESSION: 导致受限 解决办法:使用系统管理员身份运行以下一段代码 ALTER SYSTEM DISAB

sid-PL/SQL登陆报ORA-12505:TNS:监听程序当前无法识别连接描述符中所给出的SID

问题描述 PL/SQL登陆报ORA-12505:TNS:监听程序当前无法识别连接描述符中所给出的SID PL/SQL登陆报ORA-12505:TNS:监听程序当前无法识别连接描述符中所给出的SID应该如何修改啊 解决方案 进入oracle的配置和移植工具net manager检查一下数据链接建立的对不对.还有就是plsql加载的数据库存在不存在.

妖兽啦!oracle 10g 精简版 在cmd 报 ORA-12514: TNS: 监听程序。。。

问题描述 妖兽啦!oracle 10g 精简版 在cmd 报 ORA-12514: TNS: 监听程序... pl/sql 登陆 ok 但到了cmd 普通用户如scott就会报这个错误. 额, sys 用户 不报错. 服务跑着呢. 监听器文件没改, 改了没卵用. 有大侠遇过同样问题的么!!!!! 解决方案 http://www.2cto.com/database/201204/126126.html

Oracle无法启动2——监听程序当前无法识别连接描述符中请求的服务

一.发现问题 在连接oracle 10g数据库的时候老是连不上,服务也启动了,但一连接就弹出TNS:监听程序当前无法识别连接描述符中请求的服务, 昨天还好好的连着,今天怎么就突然不能用来,想想会不会是昨天改了配置文件的原因,对比了一下昨天备份的那个配置文件,发现有些地方不一样.检查了一下监听的配置文件,发现里面并没有配置注册对我想要连接的那个数据库服务的监听器,上网找了下配置的语句,只要在listener.ora配置 SID_LIST_LISTENER =   (SID_LIST =     (