搜档网
当前位置:搜档网 › __9_1--修改Oracle的processes和sessions参数和Linux的信号量配置,可预防ORA-12516

__9_1--修改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公社网站(https://www.sodocs.net/doc/129873602.html,) 原文链接:https://www.sodocs.net/doc/129873602.html,/Linux/2011-11/48245.htm

上面的4个数据分别对应:SEMMSL、SEMMNS、SEMOPM、SEMMNI这四个核心参数,具体含义和配置如下。
SEMMSL :用于控制每个信号集的最大信号数量。
Oracle 建议将 SEMMSL

设置为 init.ora 文件(用于 Linux 系统中的所有数据库)中的最大 PROCESS 实例参数的设置值再加上 10 。此外, Oracle 建议将 SEMMSL 的值设置为不少于 100 。
SEMMNS:用于控制整个 Linux 系统中信号(而不是信号集)的最大数。
Oracle 建议将 SEMMNS 设置为:系统中每个数据库的 PROCESSES 实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中 Oracle 数据库的数量,每个加 10 。
使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS 或 (SEMMSL * SEMMNI)

SEMOPM: 内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量。semop 系统调用(函数)提供了利用一个 semop 系统调用完成多项信号操作的功能。一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL 。
Oracle 建议将 SEMOPM 的值设置为不少于 100 。
SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议将 SEMMNI 的值设置为不少于 100 。

本篇文章来源于 Linux公社网站(https://www.sodocs.net/doc/129873602.html,) 原文链接:https://www.sodocs.net/doc/129873602.html,/Linux/2011-11/48245.htm


*/



--5. RHEL的内核参数修改完成,并且执行sysctl -p 之后, 重启数据库
sqlplus /nolog
conn /as sysdba
shutdown immediate
start

数据库启动成功之后, 看上面修改的processes 和 sessions 参数是否生效了
show parameter processes
show parameter sessions

相关主题