Oracle的连接时ORA-12519错误
oracle登录命令业务系统试运⾏期间,后台⼀直报12519异常,详情参见下图:
问题:系统在运⾏时出现了ORA-12519的错误,⽆法连接数据库(并不是Oracle数据库、或者监听连接不了),客户端连接间歇性失败,报错ORA-12519。
  报错:OERR: ORA-12519 TNS:no appropriate service handler found => 没有到合适的服务处理程序。
  有时候连得上数据库,有时候⼜连不上;可能是数据库上当前的连接数⽬已经超过了它能够处理的最⼤值。(注意:尽管可能并没有多少⼈使⽤系统)解决:修改Oracle最⼤连接数。
1、检查process和session使⽤情况
⾸先检查process和session的使⽤情况,在sqlplus⾥⾯查看。
processes的官⽅解析:
PROCESSES specifies the maximum number of operating system user processes that can simultaneously connect to Oracle. Its valu
e should allow for all background processes such as locks, job queue processes, and parallel execution processes.
The default values of the SESSIONS and TRANSACTIONS parameters are derived from this parameter. Therefore, if you change the
value of PROCESSES, you should evaluate whether to adjust the values of those derived parameters.
processes指定了可以同时连接到oracle的最⼤操作系统⽤户数,os层⾯。它的值应该⼤于或等于所有的后台进程例如锁、作业、并⾏处理程
序的总数。其中sessions和transactions参数的默认值都是由这个参数所派⽣出来的。所以,你要改变processes的时候,要考虑⼀下派⽣出
来的值是否需要调整。
processes和sessions的数量关系:sessions>=(processes值+后台process数量)*1.4~1.5
sessions:
session指定了在系统中可以建⽴的session的最⼤数⽬。因为每个登陆都需要请求⼀个session,这个参数影响了在系统中的最⼤并发⽤户
数。然后后⾯就是建议怎么设置session数的问题了。数量=(可能的连接数+后台进程数)*1.1。
  个⼈的见解:由于session 由 process所建⽴,所以process相当于session的基础,⽽处理多少session的能⼒要看process,即process决定了session,所以当⽇常⽤户的并发数为120的时候,此时应当设置相应的process的值为120以确保当并发⽤户数达到或者超过session上限时,有⾜够的process可以处理session。
show parameter processes;
show parameter session;
-- 查看当前进程数(当前的数据库连接数)
select count(*) from v$process;
-- 查看当前会话数
select count(*) from v$session;
-- 查看进程最⼤值(数据库允许的最⼤连接数)
select value from v$parameter where name ='processes';
-- 查看会话最⼤值
select value from v$parameter where name ='sessions';
-- 并发连接数
Select count(*) from v$session where status='ACTIVE';
-- 最重要的脚本:分别查看进程,会话的历史最⼤数和最⼤数:
select resource_name,max_utilization,limit_value from v$resource_limit where resource_name in('processes','sessions');
2、以sysdba权限登录:
SQL> show parameter processes;
NAME
------------------------------------
TYPE                                        VALUE
-------------------------------------------- ------------------------------
aq_tm_processes
integer1
db_writer_processes
integer2
gcs_server_processes
integer0
global_txn_processes
integer1
job_queue_processes
NAME
------------------------------------
TYPE                                        VALUE
-------------------------------------------- ------------------------------
integer10
log_archive_max_processes
integer4
processes
integer300
-- 数据库允许的最⼤连接数(我已修改)
SQL>select value from v$parameter where name ='processes';
VALUE
--------------------------------------------------------------------------------
300
-- 当前的数据库连接数
SQL>select count(*) from v$process;
COUNT(*)
----------
49
SQL>
3、修改最⼤连接数
SQL>alter system set processes =300 scope = spfile;
alter system set processes =300 scope = spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use
在执⾏该命令时出现下列错误;解决:
-- 查看spfile
SQL> show parameter spfile;
NAME
------------------------------------
TYPE                                        VALUE
-------------------------------------------- ------------------------------
spfile
string
-- 创建spfile
SQL>create spfile from pfile;
File created.
-- 关闭/重启数据库
SQL>shutdown immediate;
SQL> startup;
-- 查看spfile
SQL> show parameter spfile;
NAME
------------------------------------
TYPE                                        VALUE
-------------------------------------------- ------------------------------
spfile
string                                      /u01/app/oracle/product/12.1.0
/dbhome_1/a
再次执⾏命令: alter system set processes = 300 scope = spfile; --修改最⼤连接数:通常完成以上操作后即可完成最⼤连接数的修改。注意⼀定要重启数据库。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。