同事反馈他连接一个新搭建的测试数据库时,报“ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序”错误,在解决他这个问题时,顺便分析、总结一下ORA-12520错误。下面重现一下这个场景:

Oracle Client段的tnsnames.ora的配置如下:

MY_TEST=

        (DESCRIPTION=

                (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.5.37)(PORT=49161))

            (CONNECT_DATA=

           (SERVER = SHARED)

                  (SERVICE_NAME = XE)

            )

        )

客户端SQL*PLUS访问数据库报错:

C:\Users>sqlplus test/test123456@MY_TEST

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 1月 8 23:30:47 2019

 

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

 

ERROR:

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

 

 

请输入用户名:

 

 

请输入用户名:

在服务器检查是否开启了shared server模式(注意,如果配置正确,但是没有开启共享服务器模式,也会报这个错误)

SQL> show parameter shared_servers

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

max_shared_servers                   integer     10

shared_servers                       integer     10

SQL> 

在服务器检查SERVICE_NAME的信息:

SQL> show parameter service_name;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      XE

SQL> !

oracle@3c939f31e44b:~$ lsnrctl services

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 08-JAN-2019 15:33:45

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0

LOCAL SERVER

Service "XE" has 1 instance(s).

Instance "XE", status READY, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:102 refused:0 state:ready

LOCAL SERVER

Service "XEXDB" has 1 instance(s).

Instance "XE", status READY, has 1 handler(s) for this service...

Handler(s):

"D000" established:4 refused:0 current:0 max:1022 state:ready

DISPATCHER <machine: 3c939f31e44b, pid: 5980>

(ADDRESS=(PROTOCOL=tcp)(HOST=3c939f31e44b)(PORT=41385))

Service "XE_XPT" has 1 instance(s).

Instance "XE", status READY, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:102 refused:0 state:ready

LOCAL SERVER

The command completed successfully

我们知道如果共享服务器模式连接数据库,是需要通过DISPATCHER的,那么要看看参数dispatchers是如何配置的。如下所示,dispatchers里面设置的是SERVIE_NAME为XEXDB,不是XE,难怪会出这个错误。

那么我们修改一下DISPATCHERS参数配置,将SERVICE_NAME改为XE:

SQL> show parameter dispatcher;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

dispatchers                          string      (PROTOCOL=TCP) (SERVICE=XEXDB)

max_dispatchers                      integer

 

SQL> ALTER SYSTEM SET DISPATCHERS ='(PROTOCOL=TCP) (SERVICE=XE)';

 

System altered.

 

SQL> show parameter dispatcher;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

dispatchers                          string      (PROTOCOL=TCP) (SERVICE=XE)

max_dispatchers                      integer

SQL> 

OK,如下所示,问题解决。此时客户端可以顺利访问数据库了。

说到这里,那么我们就不得不说一下SERVICE_NAME,服务名(SERVICE_NAME):指listener提供的对外的服务名,客户端可以通过配置tnsnmaes.ora连进行连接,tnsnmaes.ora文件中的service_name要等于服务器端listener所注册的服务名,服务名可以通过输入lsnrctl后,在输入service查看,一般的service_name在listener.ora文件中配置(静态注册),或者当没有listener.ora文件时,在初始化文件中配置instance_name和service_names这2个参数进行动态注册。但是无论采用那种注册方式,都可以通过lsnrctl-sevice来检查。上面案例中,配置都没有错,而是在于共享连接的分派器(DISPATCHER)的设置问题,因为共享连接的分派器(DISPATCHER)指定SERVICE_NAME为XEXDB,那么客户端访问数据库使用服务名XE的话,就只能使用专用连接服务器模式。

 

 

另外,我们看看如果数据库实例配置不改动的情况下,需要如何修改客户端的tnsnames.ora的条目(entry)需要如何修改。

注意: 下面所谓正确、错误配置,仅仅指服务器配置不改动的情况下,正确配置仅仅指客户端这种配置方式不会报错。而错误配置仅仅指这种配置方式报错。

我们先复原数据库实例的配置,如下所示,然后测试一下其它

 

错误的配置:

MY_TEST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.5.37)(PORT=49161))

(CONNECT_DATA=

(SERVER = SHARED)

(SERVICE_NAME = XE)

)

)

 

正确的配置

1:不指定共享连接服务器模式,那么默认使用专用连接服务器模式,那么也没有问题。

MY_TEST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.5.37)(PORT=49161))

(CONNECT_DATA=

(SERVICE_NAME = XE)

)

2:使用专用连接服务器模式访问数据库

MY_TEST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.5.37)(PORT=49161))

(CONNECT_DATA=

(SERVER = DEDICATED)

(SERVICE_NAME = XE)

)

)

3:将SERVICE_NAME改为XEXDB,也可以解决问题。

MY_TEST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.5.37)(PORT=49161))

(CONNECT_DATA=

(SERVER = SHARED)

(SERVICE_NAME = XEXDB)

)

)

)

4:将SERVICE_NAME改为改为ISD,也可以解决问题。

MY_TEST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.5.37)(PORT=49161))

(CONNECT_DATA=

(SERVER = DEDICATED)

(SID = XE)

)

)

另外,这个问题问题,我们稍微展开下,其实我们清楚,在下面情况下会关闭数据库实例的共享服务连接,

1 设置SHARED_SERVERS=0;

2 关闭DISPATCH进程

ALTER SYSTEM SET DISPATCHERS = '';

设置SHARED_SERVERS=0

如下所示,SHARED_SERVERS=0的情况下:

客户端访问数据库也会报ORA-12520错误

C:\Users>sqlplus test/test123456@MY_TEST

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 1月 10 22:55:18 2019

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:

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

请输入用户名:

关闭DISPATCH进程

SQL> alter system set shared_servers=10 scope=both;

System altered.

#此时,客户端访问数据库正常

SQL> ALTER SYSTEM SET DISPATCHERS = '';

System altered.

SQL>

#此时,客户端访问数据库报ORA-12520错误。

另外,需要注意的是在共享服务器模式下,local naming,tnsnames.ora也可以配置成专用模式,需要注意的是如果使用参数DEDICATED,ORACLE将单独派生进程进行客户端处理,也就是专用模式。其实如果你看懂了上面案例,那么我们再来看看官方文档对ORA-12520的描述,是否有茅塞顿开的感觉呢!

 

ORA-12520: Listener Could Not Find Available Handler for Requested Type of Server

This message indicates that the type of service handler requested by the client is incorrect or not registered for the requested SERVICE_NAME/INSTANCE_NAME parameters, or the database instance is not registered with the listener.

If you suspect the problem is the wrong type of service handler, then perform the following steps:

If (server=value) is set in the connect descriptor, then ensure that the value is set to the appropriate service handler type for the database, that is, dedicated for dedicated server or shared for dispatchers. You can use the Listener Control utility SERVICES command to see what service handlers are currently registered with the listener.

If the USE_DEDICATED_SERVER parameter is set to ON in the sqlnet.ora file, then ensure the database is configured to use dedicated servers. If it is not, then set this parameter to OFF.

Ensure that the database instance is running. If the instance not running, then start it so that it can register with the listener.

另外,如果运行正常的数据库服务器,突然报ORA-12520错误,一般是因为process不够引起的。需要增大processes参数的值。网上有许多资料,这里不做展开!在此略过。

 

ORA-12520 TroubleShooting的更多相关文章

  1. Configuring and troubleshooting a Schema Provider

    原文:https://codesmith.atlassian.net/wiki/display/Generator/Configuring+and+troubleshooting+a+Schema+P ...

  2. FNDCPASS Troubleshooting Guide For Login and Changing Applications Passwords

    In this Document   Goal   Solution   1. Error Starting Application Services After Changing APPS Pass ...

  3. Gathering Initial Troubleshooting Information for Analysis of ORA-4031 Errors on the Shared Pool

    In this Document   Purpose   Troubleshooting Steps   References APPLIES TO: Oracle Database - Enterp ...

  4. Troubleshooting ORA-12547 TNS: Lost Contact (Doc ID 555565.1)

    Troubleshooting ORA-12547 TNS: Lost Contact (Doc ID 555565.1) This error can occur in following scen ...

  5. Troubleshooting Scheduler Autotask Issues (Doc ID 1561498.1)

    In this Document   Purpose   Troubleshooting Steps   References APPLIES TO: Oracle Database - Enterp ...

  6. Tips about Troubleshooting RAC

    Installation Log Filessoftware installation log files inside the logs directory of Oracle central in ...

  7. OERR: ORA-1410 "invalid ROWID" Master Note / Troubleshooting, Diagnostic and Solution (文档ID 1410.1)

    OERR: ORA-1410 "invalid ROWID" Master Note / Troubleshooting, Diagnostic and Solution (文档I ...

  8. Master Note: Troubleshooting ORA-1548 error (Doc ID 1577988.1)

    APPLIES TO: Oracle Database Cloud Schema Service - Version N/A and laterOracle Database Exadata Clou ...

  9. ORA-12541:TNS:no listener 客户端tnsnames.ora配置,以及服务端listener.ora配置

    需求:客户端(192.168.25.1)需要访问服务端(192.168.7.215)的Oracle库ORCL. 步骤一:配置客户端tnsnames.ora 步骤二:配置服务端listener.ora ...

  10. Oracle的tnsnames.ora配置(PLSQL Developer)

    首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...

随机推荐

  1. 5.3Role和Claims授权「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. Role授权 这是一种Asp.Net常用的传统的授权方法,当我们在 ...

  2. ASP .NET SignalR起步

    在网站开发中,时常需要使用消息推送功能,http协议是无状态连接,我们需要一个类似桌面程序中socket保持服务器和客户端连接的技术.signalr就是这样一个技术,他能保持网站页面和服务器的一个长连 ...

  3. VBC#代码互转工具

    VBCSHARP代码互转工具,适用于VB.NET和C#代码相互转换翻译,可代码段转换和批量文件转换.于2019年3月5日制作完成,允许各群随意分发和使用. 下载地址:下载链接 欢迎使用 下载地址:下载 ...

  4. 全球第一免费开源ERP Odoo工业互联网生产制造功能模块术语解析

    物料清单 物料清单(BoM)用于描述物料.每种物料的数量.以及制造某一产品所需的步骤.由于行业和成品性质的不同,同一个文件可能有不同的命名.例如,在制药行业中,可以使用术语“处方”. 周期 产品周期是 ...

  5. mssql sqlserver 给已存在表添加新的字段及字段备注的方法

    转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...

  6. 解决Maven无法下载fastdfs-client-java依赖,Dependency 'org.csource:fastdfs-client-java:1.27-SNAPSHOT' not found.

    因为fastdfs-client-java-1.27-SNAPSHOT.jar这个依赖包在maven中央仓库是没有的, 需要自己编译源码成jar本地安装到maven 的本地仓库,安装完以后就能正常引用 ...

  7. .NET 基金会完成第一次全面改选

    .NET基金会是一个独立的组织,支持.NET社区和开源,旨在拓宽和加强.NET生态系统和社区.这可以通过多种方式完成,包括项目指导,指导,法律和营销帮助,技术和财务支持设置等,2014年微软组织成立. ...

  8. 微信小程序中转义字符的处理

    在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理 ...

  9. Php如何返回json数据,前后端分离的基本解决方案

    php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...

  10. GBDT和XGBOOST算法原理

    GBDT 以多分类问题为例介绍GBDT的算法,针对多分类问题,每次迭代都需要生成K个树(K为分类的个数),记为\(F_{mk}(x)\),其中m为迭代次数,k为分类. 针对每个训练样本,使用的损失函数 ...