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

в 14:35, , рубрики: howto, linux, oracle, Администрирование баз данных, базы данных, метки: ,

На днях пришлось установить данный вид продукции на данную официально не поддерживаемую ораклом ось. 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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js