天天看點

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及以上。           
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           
[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