ORA-12519: TNS:no appropriate service handler found 解决

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:

可能是数据库上当前的连接数目已经超过了它能够处理的最大值.

查询解决方法:

查看一下数据库现有的进程数,是否已经达到参数processes的大小。

select count(*) from v$process --当前的连接数

select value from v$parameter where name = 'processes' --数据库允许的最大连接数



修改最大连接数:

alter system set processes = 300 scope = spfile;



重启数据库:

shutdown immediate;

startup;



--查看当前有哪些用户正在使用数据

SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine 

from v$session a, v$sqlarea b

where a.sql_address =b.address order by cpu_time/executions desc;

根据Oracle文档,SESSIONS和TRANSACTIONS的初始化参数应该源于PROCESSES参数,根据默认设置SESSIONS = PROCESSES * 1.1 + 5。

但是目前SESSIONS的设置达到了600,而PROCESSES的设置没有改变,仍然为150,导致了过多的用户会话连接到Oracle上时,Oracle没有足够的后台进程来支持这些会话。

详细的问题描述可以参考metalink的文档:Doc ID: Note:240710.1。

解决方法很简单,直接设置合适的PROCESSES产生就可以了.

 

针对LINUX系统,修改process的值的方法:

先到ORACLE_BASE/admin/你的实例名/profile/目录下找到一个init.ora的文件,然后修改里面的process的值,然后将该文件拷贝到ORACLE_HOME/dbs目录下,并将文件重命名为initorcl.ora(其中的orcl为你的数据库实例名,我的数据库实例为orcl所以命名为 initorcl.ora)

用sys用户同时以sysoper身份登录sqlplus

即 sqlplus sys/sa as sysoper;

进入SQLPLUS后,先把数据库关闭,可以使用shutdown abort命令,也可以使用shutdown immediate命令,推荐使用shutdown abort命令。然后使用命令startup force即可,说白了就是重启数据库。

 

 

 

你可能感兴趣的:(ORA-12519)