Linux下安装oracle数据库内核参数说明

在安装数据库时需要配置以下内核参数:

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

引用自:https://docs.oracle.com/cd/E11882_01/install.112/e47689/pre_install.htm#LADBI1187

信号量和共享内存是两组截然不同的操作系统资源。信号量是Oracle用于进程间通信的系统资源,它们占用相对较小的内存空间,而共享内存用于包含SGA并且可以占用大部分物理内存。

aio-max-nr:所有活动异步 I/O 上下文中可允许的最多事件数。默认值为 65536;
file-max:当前内核可以打开的最大的文件句柄数;
shmmax:以字节为单位规定内核可允许的最大共享内存段。64位默认值为 68719476736;32位默认值为 4294967295。注:但内核支持的值比这个值要多得多,oracle中最小配置为536870912,64位最大值为物理内存-1字节,32位最大值为小于4GB-1个字节的值或4294967295,推荐设置为物理内存大小的1/2;
shmall:以字节为单位规定一次在该系统中可以使用的共享内存总量。64位默认值为4294967296;32位默认值为 268435456。oracle推荐的最小值为:2097152,在内存较小时可以使用小于2097152的值,内存较大时(超过8G)需要通过以下公式进行计划:公式1:memtotal/pagesize。公式2:(SHMMAX/getpagesize()*(SHMMNI/16))。
shmmni:系统范围内最大共享内存段数量。在 64 位和 32 位架构机器中的默认值都是 4096
sem:即semaphores缩写。共有四个值与之对应,oracle建议的值为kernel.sem = 250 32000 100 128 ,分别对应:
SEMMSL | maximum number of semaphores in a semphore set   | 250   |定义每个Oracle数据库的最大信号量数。|取值范围1 – 65536
SEMMNS | maximum number of semphores in the system        | 32000 |定义系统上的最大信号量。            |取值范围1 – 2147483647  
SEMOPM | maximum number of operations per semop(P) call   | 100   |定义每个semop调用的最大操作数。     |取值范围100
SEMMNI | maximum number of semaphore sets in system       | 128   |定义整个系统中信号量集的最大数量    |取值范围1 – 32768
规则:
SEMMNI*SEMMSL>=SEMMNS,SEMMNS=系统中每个实例process+10之和+2*max(process)

操作系统与sysctl中kernel.sem参数的对应关系

$ ipcs -ls

------ Semaphore Limits --------
max number of arrays = 128      // SEMMNI
max semaphores per array = 250      // SEMMSL
max semaphores system wide = 32000     // SEMMNS
max ops per semop call = 100    // SEMOP
semaphore max value = 32767

与信号量相关的问题:
问题1:

SQL> startup nomount
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates

[root@prodb linux]# ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x00000000 0          root       600        1         
0x00000000 65537      root       600        1         
0x9a31ff94 1507331    oracle     640        154 
本例中154>max number of arrays = 128需要调整SEMMNI值为200及以上。

问题2:

Getting ORA-600 [OSDEP_INTERNAL] errors while starting up the database:

ORA-00600: internal error code, arguments: [OSDEP_INTERNAL],
[], [], [], [], [], [], []
ORA-27302: failure occurred at: skgpwreset1
ORA-27303: additional information: invalid shared ctx
ORA-27146: post/wait initialization failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpsemsper

semmns值太小,修改为:kernel.sem = 256 32768 100 228

信号量的删除

信号量或共享内存错误主要出现在实例启动时(特别是'startup nomount'阶段)。这是Oracle尝试获取实例的信号量和共享内存的唯一时间。在正常的数据库操作期间,很少出现与信号量或共享内存相关的错误。发生这些错误的最常见情况是在创建新数据库期间。但是,有时当Oracle实例崩溃时,操作系统可能无法释放共享内存段。这限制了实例可用于再次启动的共享内存总量。在这种情况下,您需要手动删除这些段。

[oracle@prodb ~]$ $ORACLE_HOME/bin/sysresv

IPC Resources for ORACLE_SID "PROD3" :
Shared Memory:
ID              KEY
1966083         0x00000000
1998852         0x00000000
2031621         0x4db7973c
Semaphores:
ID              KEY
1507331         0x9a31ff94
Oracle Instance alive for sid "PROD3"

Linux: 
% ipcrm shm 2031621 1998852 1966083

Other Unix: 
% ipcrm -m 12189717

猜你喜欢

转载自blog.51cto.com/hunt1574/2433245