- PVSM.RU - https://www.pvsm.ru -

Установка Oracle 10g на CentOS 6.2 x64

На днях пришлось установить данный вид продукции на данную официально не поддерживаемую ораклом ось. CentOS для меня достаточно неизученный Linux, поэтому как устанавливать гуглил. Нашел несколько инструкций, к сожалению ни одна из них не была тем самым руководством, тупо следуя которому можно было бы выполнить это действо. Все требовали доработки, поиска недостающих библиотек и т.д. В итоге написал некое подобие HOWTO с учетом всех поправок. Может быть кому-то будет интересно.

П.С. Тру фанатов оракла прошу строго не судить, мне известно что установка этой БД на неподдерживаемы ОС чревата и т.д… Но поскольку имею практический опыт в эксплуатации данной СУБД в нескольких «несертифицированных» ОС и опыт разрешения весьма небольшого числа коллизий по ходу эксплуатации — до сих пор считаю требование к «сертифицированности» ОС сильно преувеличенным.

Подключаемся рутом, работаем в его окружении:

su -

Устанавливаем необходимые пакеты (все есть в стандартном репозитарии, немножко вперемежку):

yum install libXp gcc make setarch libaio glibc-devel
yum install glibc.i686 libXp.so.6 libXt.so.6 libXtst.so.6
yum install compat-libstdc++-33.x86_64 binutils elfutils-libelf elfutils-libelf-devel
yum install glibc glibc-common glibc-devel glibc-headers gcc gcc-c++ libaio-devel
yum install libaio libgcc libstdc++ libstdc++ make sysstat unixODBC unixODBC-devel
yum install unzip 
yum install glibc-devel.i686
yum install libgcc.i686
yum install binutils compat-db libstdc++ gdbm make ksh libaio-devel libXtst xorg-x11-utils
yum install openmotif openmotif.i686
yum install libaio.i686 libaio-devel.i686
yum install compat-glibc.x86_64

Создаем пользователей и группы:

groupadd oinstall
groupadd dba
useradd -d /opt/oracle -g oinstall -G dba -s /bin/bash -m oracle
passwd oracle
useradd nobody

Кофигурируем паарметры системы для совместимости. Правим /etc/sysctl.conf, вносим-изменяем следующие строки:

kernel.sem = 250 32000 100 128
fs.file-max = 6815744
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
fs.aio-max-nr = 1048576

и применяем конфиг:

sysctl -p

Корректируем лимиты на кол-во процессов-файлов для пользователя oracle (поскольку он будет владельцем процессов СУБД). Правим /etc/security/limits.conf, вносим-изменяем следующие строки:

oracle soft nproc  2047
oracle hard nproc  16384
oracle soft nofile 1024
oracle hard nofile 65536

Правим /etc/pam.d/login, вносим/изменяем:

session required /lib64/security/pam_limits.so
session required pam_limits.so

Еще создаем файл профиля (vi /etc/profile.d/custom.sh), вносим в него текст:

#!/bin/bash

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

Добавляем права на выполнение:

chmod +x /etc/profile.d/custom.sh

Временно меняем описание версии ОС, чтобы оракл при установке не ругался. Можно конечно воспользоваться и ключиком ignoreSysPrereqs при установке, на любителя.

cp /etc/redhat-release /etc/redhat-release.6
echo redhat-4 > /etc/redhat-release

Для того, чтобы у остальных пользователей ОС, владельцев процессов, которым возможно понадобится доступ к БД, не было с этим сложностей — добавим следующие строки в общий профайл (/etc/profile), в конец:

ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/database
ORACLE_SID=navdb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$PATH:.
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH CLASSPATH
export NLS_LANG=AMERICAN_AMERICA.UTF8

Все, доступ рута нам пока не понадобится, подключаемся пользователем oracle.

Выполняем установку в /opt/oracle/database

cd /opt/oracle
cpio -idmv < database_linux_x86_64.cpio
cd database
 ./runInstaller

Устанавливаем.
В процессе установки может возникнуть ошибка: ins_emdb (error invoking target 'collector' ...), игнорируем ее и жмякаем «Continue».
В процессе установки следуем инструкциям инсталятора, нужно быдет выполнить да скрипта из-под рута, выполняем их.

Ура? Еще нет.

Вспоминаем, что мы меняли описание релиза ОС, возвращаем старое описание обратно (из-под рута выполняем):

mv /etc/redhat-release.6 /etc/redhat-release

Входим oracle, пробуем создать БД через dbca, при созданиии получаем ошибку:

ORA-27125: unable to create shared memory segment

Лечим это досадное недоразумение. Выполняем

cd $ORACLE_HOME/bin
mv oracle oracle.bin

создаем файл $ORACLE_HOME/bin/oralce со следующим содержимым:

#!/bin/bash
 
export DISABLE_HUGETLBFS=1
exec $ORACLE_HOME/bin/oracle.bin $@

даем файлу права на выполнение:

chmod +x oracle

Теперь все у нас работает. Остается только оформить oracle и прослушиватель как демоны, для того чтобы они запускались при загрузке системы.

Для прослушивателя создаем скрипт (/etc/init.d/listener) со следующим содержанием:

#!/bin/bash
#
# chkconfig: 345 51 49
# description: startup and shutdown the Oracle 10g listener
#
echo "Oracle 10g listener start/stop/restart/status"
ORA_OWNER=oracle
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/database
ORACLE_SID=navdb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH:.
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH CLASSPATH
alias sqlplus='rlwrap sqlplus'
export NLS_LANG=AMERICAN_AMERICA.UTF8

case $1 in
start)
echo -n "Starting oracle listener: "
su - $ORA_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
echo
;;

stop)
echo -n "Shutting down oracle listener: "
su - $ORA_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
echo
;;

status)
echo -n "Status of oracle listener: "
su - $ORA_OWNER -c "$ORACLE_HOME/bin/lsnrctl status"
echo
;;

restart)
echo -n "Restarting oracle listener:"
$0 stop
$0 start
echo
;;
*)

echo "Usage: listener [ start | stop | restart | status ]"
exit 1
esac
exit 0

Корректируем права, добавляем в автозапуск

chmod 700 listener
chkconfig listener on

Для субд создаем скрипт (/etc/init.d/oracle) со следующим содержанием:

#!/bin/bash
#
# chkconfig: 345 51 49
# description: startup and shutdown the Oracle 10g instance
#
# Run-level Startup script for the Oracle Instance, Listener, and Web Interface

echo "Oracle 10g database start/stop/restart"
ORA_OWNER=oracle
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/database
ORACLE_SID=navdb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH:.
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH CLASSPATH
export NLS_LANG=AMERICAN_AMERICA.UTF8

# if the executables do not exist -- display error

if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
    echo "Oracle startup: cannot start"
    exit 1
fi

# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display

case "$1" in
    start)
        # Oracle listener and instance startup
        echo -n "Starting Oracle: "
        su $ORA_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
        su $ORA_OWNER -c $ORACLE_HOME/bin/dbstart
        touch /var/lock/oracle
#        su $ORA_OWNER -c "$ORACLE_HOME/bin/emctl start dbconsole"
        echo "OK"
        ;;
    stop)
        # Oracle listener and instance shutdown
        echo -n "Shutdown Oracle: "
        su $ORA_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
        su $ORA_OWNER -c $ORACLE_HOME/bin/dbshut
        rm -f /var/lock/oracle
#        su $ORA_OWNER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
        echo "OK"
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: `basename $0` start|stop|restart"
        exit 1
esac
exit 0

Корректируем права, добавляем в автозапуск

	chmod 700 oracle
	chkconfig oracle on

Для автоматического запуска нужных инстансов правим /etc/oratab, меняем

navdb:/opt/oracle/database:N

на

navdb:/opt/oracle/database:Y

Собственно все :)

Автор: vajadhava


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/8115