O valor “shmmax” é muito grande ao instalar o Oracle 11g no RHEL7

1

Estou tentando instalar Oracle Database 11g Release 2 on RHEL 7.2 . Executando runfixup.sh , ele gera:

# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.1.0_oracle/orarun.log
Setting Kernel Parameters...
/tmp/CVU_11.2.0.1.0_oracle/orarun.sh: line 244: [: 18446744073692774399: integer expression expected
The value for shmmax in response file is not greater than value of shmmax for current session. Hence not changing it.
/tmp/CVU_11.2.0.1.0_oracle/orarun.sh: line 335: [: 18446744073692774399: integer expression expected
The value for shmall in response file is not greater than value of shmall for current session. Hence not changing it.
The value for semmni in response file is not greater than value of semmni for current session. Hence not changing it.

Pegue shmmax como exemplo, o código em runfixup.sh é assim:

 239           #current value of shmmax - value in /proc/sys/kernel/shmmax
 240           cur_shmmax='/sbin/sysctl -n kernel.shmmax'
 241           #remove the extra spaces in the line.
 242           cur_shmmax='echo $cur_shmmax | sed 's/ //g''
 243           echo "shmmax for current session:$cur_shmmax" >> $log_file/orarun.log
 244           if [ $SHMMAX -gt $cur_shmmax ]
 245           then
 246               if  ! $SYSCTL_LOC -w kernel.shmmax="$SHMMAX"
 247               then
 248                 echo "$SYSCTL_LOC failed to set shmmax" |tee -a $log_file/orarun.log
 249               fi
 250            else
 251                  echo "The value for shmmax in response file is not greater than value of shmmax for current session. Hence not changi     ng it." |tee -a $log_file/orarun.log
 252            fi

Verifique a configuração de shmmax no sistema:

# /sbin/sysctl -a | grep shm
kernel.shm_next_id = -1
kernel.shm_rmid_forced = 0
kernel.shmall = 18446744073692774399
kernel.shmmax = 18446744073692774399
kernel.shmmni = 4096
vm.hugetlb_shm_group = 0

E o valor da configuração shmmax é o seguinte:

Minhas perguntas são:
(1) O if [ -gt ] em Bash só opera em inteiros? Como operar em um inteiro longo de 64 bits?
(2) Não há problema em modificar shmmax como o valor esperado de Oracle hint?

    
por Nan Xiao 15.01.2016 / 04:51

2 respostas

0

O Bash parece funcionar corretamente em números inteiros assinados de 64 bits. Se você precisar de ainda mais robustez, use bc, por exemplo nesses inteiros de 64 bits não assinados que o bash não pode manipular.

echo "18446744073709551615 * 2" | bc -l
36893488147419103230
echo "18446744073709551615 > 2" | bc -l
1
echo "18446744073709551615 < 2" | bc -l
0

De improviso, modifico o shmmax como o Oracle indica. Há várias páginas da Web explicando exatamente o que isso fará, caso você tenha alguma hesitação sobre mexer na distribuição de memória compartilhada.

    
por 16.01.2016 / 02:37
0

Mesmo problema para instalar um Oracle XE no RHEL7, os valores de shmmax e shmall eram os mesmos que você mostra. Mas a máquina tem apenas 3G de RAM, esses valores enormes não são necessários. Então, eu mudei os parâmetros para valores menores que isso em sysctl.conf, e a instalação foi adiante sem problemas.

Atenciosamente, Régis

    
por 06.06.2018 / 16:00