修改Oracle的processes和sessions参数和Linux的信号量配置,可预防ORA-12516
/*
1.问题分析
oracle服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误'
问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小。
select count(*) from v$process; 取得数据库目前的进程数
select value from v$parameter where name = 'processes'; 取得进程数的上限。
select count(*) from v$session;
*/
--修改步骤
--1.查看当前正在运行的系统中的进程数和会话数
select count(*) from v$process;
select count(*) from v$session;
--2.查看数据库的配置的 processes值 和 sessions值
select value
from v$parameter where name = 'processes';
select value
from v$parameter where name = 'sessions';
或者在 sqlplus 中这么看:
show parameter processes
show parameter sessions
--3. 修改数据库的 processes 和 session
--原则上是进程数量控制了client的连接数量 ,会话数应该大于进程数 ,
oracle11g R2之前:推荐公式 session数=process数*1.1+5
oracle11g R2 推荐公式: 11gR2 Default value Derived: (1.5 * PROCESSES) + 22
对于oracle11g R2:
设置:
processes = 1000
则:sessions =1522;
select 1000*1.5+22 from dual;
--登录后台 sqlplus
alter system set processes=1000 scope=spfile;
alter system set sessions=1522 scope=spfile;
参数需求完成之后, 需要重启数据库才能生效, 此刻先不要重启, 等修改好操作系统内核中的信号量参数后再重启
--4. 修改操作系统中内核信号量参数
root登录
vi /etc/sysctl.conf
更改当前SEMAPHORES参数设置
[oracle@ebsse oracle]$ su
Password:
[root@ebsse oracle]# echo "5010 641280 5010 128" > /proc/sys/kernel/sem
[root@ebsse oracle]# cat /proc/sys/kernel/sem
5010 641280 5010 128
如需启动时自动应用,可在/etc/sysctl.conf增加或修改老配置为:
kernel.sem = 5010 641280 5010 128
修改好之后, 执行sysctl -p 使得内核参数生效
使用命令 # ipcs -ls 看设置的信号量参数是否生效
/*
说明:
kernel.sem = 250 32000 100 128
SEMMSL SEMMNS SEMOPM SEMMNI
如当oracle DB初始化参数文件中PROCESSES参数设置较大时,需要调整SEMAPHORES设置
SEMMSL应该设置为服务器中各个实例中最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。
SEMMNS参数应设置为SEMMSL*SEMMNI,接上例SEMMSL为5010,SEMMNS参数应为(5010*128)=641280。
SEMOPM参数应设置与SEMMSL参数相同,接上例此处应设置为5010
本篇文章来源于 Linux公社网站(http://doc.docsou.com) 原文链接:http://doc.docsou.com/Linux/2011-11/48245.htm
上面的4个数据分别对应:SEMMSL、SEMMNS、SEMOPM、SEMMNI这四个核心参数,具体含义和配置如下。
SEMMSL :用于控制每个信号集的最大信号数量。
Oracle 建议将 SEMMSL