您的位置:首页 > 产品设计 > UI/UE

ORA-12520 TNS:Listener count not find available handler for requested type of server错误解决办法

2012-01-07 10:54 543 查看


专有服务器进程是与客户端进程是一对一映射,即时生成,即时消失。用户会话数据和游标状态放在PGA里

共享服务器进程是已经存在的,分为2部分,一种是dispatch进程,一种是共享服务器进程。

dispatch进程与user进程建立连接,把用户请求放入SGA的请求队列里,共享进程取出请求进行处理,处理完后放入SGA响应队列,dispatch进程取出处理结果给用户进程。一个dispatch可以和250或300个客户端进程进行连接。一个请求队列,多个响应队列。用户会话数据和游标状态放在SGA里。

ORA-12520错误可能的原因和解决方法 

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

1,数据库是专用服务器,但是在tnsname.ora配置中设置了连接方式为shared,这种情况下打开tnsname.ora, 

   把(server = shared) 改成 (server = dedicate)
 2,数据库设置为了shared模式,但是参数dispatchers='(PROTOCOL=TCP) (SERVICE=orcl)‘配置的service和本地tns中指定的SERVICE_NAME不同,这里的SERVICE=orcl表示通过orcl服务连接到数据库的时候,dispatch到某个共享服务器进程。
如配置一个与之对应的tns这可以用shared模式连接到数据库。
ORCLS =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = PC-6753184)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SERVER = SHARED)

      (SERVICE_NAME = orcl)

    )

  )
假设数据库同时有别的service(可以通过lsnrct status查看)如下面的ORCLA,ORCLB都是service名称,这些service都是可以被用在tns配置中的,但不是可以设置为shared模式连接的。意味着数据库中的连接有的是专用模式,有的是共享模式。如果用共享模式连接,还有就是SERVICE_NAME指定的service只能用动态注册的服务名。
Services Summary...

Service "ORCLA" has 1 instance(s).

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

Service "ORCLB" has 1 instance(s).

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

如果这时候配置一个tns如下:
ORCLA =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = PC-6753184)(PORT = 1522))

    )

    (CONNECT_DATA =

    (SERVER = SHARED)

      (SERVICE_NAME = orcla)

    )

  )

这时候因为dispatchers='(PROTOCOL=TCP)
(SERVICE=orcl)‘配置和这里的SERVICE_NAME不同,用sqlplus test/test@orcla 连接就会得到ORA-12520错误。
解决办法是修改SERVICE_NAME
= orcl,或者修改dispatchers='(PROTOCOL=TCP)‘所有的连接都已shared模式,推荐用前者。
(这样的话,可以对某一种业务配置的tns连接使用共享模式,如OLTA类型的,对有的业务用专用模式连接)
连接上数据库后,通过查看
select
* from v$session where sid in(select distinct(sid) from v$mystat)

server的值如果是DEDICATED表示为专用模式,shared为共享模式。

3)是由于process不够引起的 

查看当前的连接数 

select count(*) from v$process;
设置的最大连接数(默认值为150) 

select value from v$parameter where name = 'processes';
修改最大连接数 

alter system set processes = 300 scope = spfile
重新启动
select * from v$shared_server 查看共享进程的信息,正在执行,等待请求等。

select * from  v$dispatcher查看共享调度器的信息,dispatchers=如果配置了(dispatchers=数量),可以看到数量条数据。

select * from v$circuit
查看那个session连接到了那个dispatcher,那个服务器进程在为其服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐