/*
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 /f
更改当前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
如需启动时自动应用,可在/f增加或修改老配置为:
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公社网站(www.linuxidc) 原文链接:www.linuxidc/Linux/2011-11/48245.htm
上面的4个数据分别对应:SEMMSL、SEMMNS、SEMOPM、SEMMNI这四个核心参数,具体含义和配置如下。
SEMMSL :用于控制每个信号集的最大信号数量。
Oracle 建议将 SEMMSL
设置为 a 文件(用于 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公社网站(www.linuxidc) 原文链接:www.linuxidc/Linux/2011-11/48245.htm
*/
--5. RHEL的内核参数修改完成,并且执行sysctl -p 之后, 重启数据库
sqlplus /nolog
conn /as sysdba
shutdown immediate
linux系统安装oracle11gstart
数据库启动成功之后, 看上面修改的processes 和 sessions 参数是否生效了
show parameter processes
show parameter sessions
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论