The "shmmax" value is too large when installing Oracle 11g on RHEL7

Я пытаюсь установить Oracle Database 11g Release 2 на RHEL 7.2, проведение runfixup.sh, это выводит:

# /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.

принимать shmmax as an example, the code in runfixup.sh это так:

 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

Проверьте shmmax configuration in system:

# /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

И shmmax configuration value is like this:

Мои вопросы:
(1) The if [ -gt ] в Bash only operates on integers? How to operate on 64-bit long integer?
(2) Is it OK to modify shmmax as the expected value of Oracle hint?

2 ответа

Bash, кажется, работает нормально на 64-разрядных целых числах со знаком. Если вам нужна еще большая надежность, используйте bc, например, для этих 64-битных целых без знака, которые bash не может обработать.

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

Я бы изменил shmmax, как указывает Oracle. Существует любое количество веб-страниц, объясняющих, что именно это будет делать, на случай, если у вас возникнут сомнения по поводу работы с распределенной памятью.

Та же проблема со мной при установке Oracle XE на RHEL7, значения shmmax и shmall были такими же, как вы показываете. Но у машины только 3G оперативной памяти, при этом огромные значения не нужны. Итак, я изменил параметры на значения меньше, чем это в sysctl.conf, и установка прошла без проблем.

С наилучшими пожеланиями, Режис

Другие вопросы по тегам