广州公司网站建设东莞网络公司排行榜
参见:
oracle查看允许的最大连接数和当前连接数等信息
两个参数间的关系:sessions=1.1*processes+5
ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄
ORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序
 
 出现ORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序,可能的原因如下:
 1)服务端的数据库是专用服务器,但是在客户端的tnsname.ora里配置中设置了连接方式为shared,这种情况下打开tnsname.ora, 
    把(server = shared) 改成 (server = dedicate) 。也就是说,如果遇到报错 
ora-12520: tns 监听程序无法找到需要的服务器类型的可用句柄,
那可能说明你的共享服务器配置是错误的,即如你的服务器是专有服务器模式的,而你的客户端正
 试图用共享连接你的数据库(server=shared),解决方法是:
 1.更改客户端的tnsnames.ora为专有模式(server=dedicated)
 2.把服务器配置成共享模式数据库
 
 
2)是由于参数process值不够引起的 
 
后来查看到v$process一直涨到140多,而我的数据库设置的是150.据此大致能断定process不够,用以下语句修改数据库的processes值 
 alter system set processes=500 scope=spfile(由于processes是静态参数,scope只能为spfile,在v$sgastate条件为'procesees'中可以看到会每个process会点4个字节), 
 重新启动数据库使新改的processes生效.再重新跑eclipse,就能正常启动了. 
 
 注释:
如果在hibernate中的hibernate.connection.provider_class选择的是c3p0的就会出这种情况,其它的好像不会.很奇怪为什么c3p0会打开那么多个processs, 在shared连势接方式下,shared_server即是一直连在数据库的process值,注意这点
当前的连接数 
 select count(*) from v$process; 
 
 设置的最大连接数(默认值为150) 
 select value from v$parameter where name = 'processes'; 
 
 修改最大连接数 
 alter system set processes = 300 scope = spfile; 
- 上一篇ORA-12519: TNS:no appropriate service handler found
 - 下一篇手动开关Tomcat的BAT代码
 
===============================================================================
 
 
 
Oracle错误:
ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄
导致该错误的其中一种原因是你的服务器是专有服务器模式的,而你的客户端正
 试图用共享连接你的数据库(server=shared)。
 
下面用实验来验证这个:
 专用服务器选择用共享连接方式,即修改(SERVER =SHARED)为(SERVER = DEDICATED)
配置共享模式:
找到初始化文件pfile,然后对其编辑或加入如下内容:
max_shared_servers=39   #数据库支持的最大的服务进程数
 shared_servers=3       #一般应该是数据库连接数的十分之一
 max_dispatchers=19      #调度进程的最大数量 = 数据库最大session数 /每个调度器服务的session数;
 dispatchers="(PROTOCOL=TCP)(SERVICE=orclXDB)(list=orcl)(con=30)(dispa=5)(sess=200)"
保存退出,reboot数据库,然后生成spfile
create spfile from pfile;
 查看共享服务器配置是否正确:
SQL> show parameter shared
NAME                                TYPE       VALUE
 ------------------------------------ -----------------------------------------
 hi_shared_memory_address            integer    0
 max_shared_servers                  integer    39
 shared_memory_address               integer    0
 shared_pool_reserved_size           big integer 5872025
 shared_pool_size                    big integer 117440512
 shared_server_sessions              integer    330
 shared_servers                      integer    3
 SQL>
 SQL> show parameter dispa
NAME                                TYPE       VALUE
 ------------------------------------ -----------------------------------------
 dispatchers                         string     (PROTOCOL=TCP)(SERVICE=orclXDB
                                                 )(list=orcl)
 max_dispatchers                     integer    19
 mts_dispatchers                     string     (PROTOCOL=TCP)(SERVICE=orclXDB
                                                 )(list=orcl)
 mts_max_dispatchers                 integer    19
 SQL>
 然后再客户端配置tnnames.ora
245 =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.245)(PORT =1521))
     )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = orcl)
      
     )
   )
然后用客户端连接数据库,总是报:
ora-12523 tns 监听程序未找到适用于客户机连接的例程
然后修改客户端配置tnnames.ora如下所示:
 245 =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.245)(PORT =1521))
     )
    (CONNECT_DATA =
      (SERVER = SHARED)
(SID=ORCL)
     )
   )
 在连接 ,就ok了
 如果遇到报错  ora-12520: tns 监听程序无法找到需要的服务器类型的可用句柄
那说明你的共享服务器配置错误,你的服务器还是专有服务器模式,而你的客户端正
 视图用共享连接你的数据库(server=shared),解决方法是:
 1.更改客户端的tnsnames.ora为专有模式(server=dedicated)
 2.把服务器配置成共享模式数据库
 如要把数据库配置成专有模式,要让如下参数都等于0
shared_servers=0
 但我改完之后还可以用共享模式连接,只要我的客户端tnsnames配置如下:
245 =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.245)(PORT =1521))
     )
    (CONNECT_DATA =
      (SERVER = SHARED)
(SID=ORCL)
     )
   )
但是如果客户端的tnsnames如果改为
 245 =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.245)(PORT =1521))
     )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = orcl)
      
     )
   )
就只能以专有模式连接
在改为专有模式时,很可能遇到ORA-12519错误。这个错误是因为客户端指定的SID
   与dedicated serverhandler匹配不上,这就需要用LOCAL_LISTENER参数来指定服务名
服务器的tnsname文件如下:
ORCL =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.245)(PORT =1521))
     )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = ORCL)
     )
   )
那么就需要执行
 SQL> alter system set local_listener='orcl'scope=both;
System altered.
现在你的客户端又可以正常连接了,以DEDICATED SERVER模式
注意:如果dispatchers中指定service, 那么在客户端默认连接是dedicate连接,
 如果不指定service,则是是shared server
alter system set dispatchers='(PROTOCOL=TCP)(SERVICE=orclXDB)';
查看你的服务器目前的连接是否是共享连接
select * from v$dispatcher
 select * from v$shared_server
 select * from v$shared_server_monitor
 select count(*) from v$dispatcher;
 select * from v$circuit
查看注册的服务
 lsnrctl services listener
