
Установка Oracle 10g на CentOS 6.2 x64
На днях пришлось установить данный вид продукции на данную официально не поддерживаемую ораклом ось. CentOS для меня достаточно неизученный Linux, поэтому как устанавливать гуглил. Нашел несколько инструкций, к сожалению ни одна из них не была тем самым руководством, тупо следуя которому можно было бы выполнить это действо. Все требовали доработки, поиска недостающих библиотек и т.д. В итоге написал некое подобие HOWTO с учетом всех поправок. Может быть кому-то будет интересно.
П.С. Тру фанатов оракла прошу строго не судить, мне известно что установка этой БД на неподдерживаемы ОС чревата и т.д… Но поскольку имею практический опыт в эксплуатации данной СУБД в нескольких «несертифицированных» ОС и опыт разрешения весьма небольшого числа коллизий по ходу эксплуатации — до сих пор считаю требование к «сертифицированности» ОС сильно преувеличенным.
Подключаемся рутом, работаем в его окружении:
Устанавливаем необходимые пакеты (все есть в стандартном репозитарии, немножко вперемежку):
Создаем пользователей и группы:
Конфигурируем параметры системы для совместимости. Правим /etc/sysctl.conf, вносим-изменяем следующие строки:
и применяем конфиг:
Корректируем лимиты на кол-во процессов-файлов для пользователя oracle (поскольку он будет владельцем процессов СУБД). Правим /etc/security/limits.conf, вносим-изменяем следующие строки:
Правим /etc/pam.d/login, вносим/изменяем:
Еще создаем файл профиля (vi /etc/profile.d/custom.sh), вносим в него текст:
Добавляем права на выполнение:
Временно меняем описание версии ОС, чтобы оракл при установке не ругался. Можно конечно воспользоваться и ключиком ignoreSysPrereqs при установке, на любителя.
Для того, чтобы у остальных пользователей ОС, владельцев процессов, которым возможно понадобится доступ к БД, не было с этим сложностей — добавим следующие строки в общий профайл (/etc/profile), в конец:
Все, доступ рута нам пока не понадобится, подключаемся пользователем oracle.
Выполняем установку в /opt/oracle/database
Устанавливаем.
В процессе установки может возникнуть ошибка: ins_emdb (error invoking target 'collector' ...), игнорируем ее и жмякаем «Continue».
В процессе установки следуем инструкциям инсталятора, нужно быдет выполнить два скрипта из-под рута, выполняем их.
Ура? Еще нет.
Вспоминаем, что мы меняли описание релиза ОС, возвращаем старое описание обратно (из-под рута выполняем):
Входим oracle, пробуем создать БД через dbca, при созданиии получаем ошибку:
Лечим это досадное недоразумение. Выполняем
создаем файл $ORACLE_HOME/bin/oralce со следующим содержимым:
даем файлу права на выполнение:
Теперь все у нас работает. Остается только оформить oracle и прослушиватель как демоны, для того чтобы они запускались при загрузке системы.
Для прослушивателя создаем скрипт (/etc/init.d/listener) со следующим содержанием:
Корректируем права, добавляем в автозапуск
Для субд создаем скрипт (/etc/init.d/oracle) со следующим содержанием:
Корректируем права, добавляем в автозапуск
Для автоматического запуска нужных инстансов правим /etc/oratab, меняем
на
Собственно все :)
П.С. Тру фанатов оракла прошу строго не судить, мне известно что установка этой БД на неподдерживаемы ОС чревата и т.д… Но поскольку имею практический опыт в эксплуатации данной СУБД в нескольких «несертифицированных» ОС и опыт разрешения весьма небольшого числа коллизий по ходу эксплуатации — до сих пор считаю требование к «сертифицированности» ОС сильно преувеличенным.
Подключаемся рутом, работаем в его окружении:
su -
Устанавливаем необходимые пакеты (все есть в стандартном репозитарии, немножко вперемежку):
yum install libXp gcc make setarch libaio glibc-devel glibc.i686 libXp.so.6 libXt.so.6 libXtst.so.6 compat-libstdc++-33.x86_64 binutils elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel glibc-headers gcc gcc-c++ libaio-devel libaio libgcc libstdc++ make sysstat unixODBC unixODBC-devel unzip glibc-devel.i686 libgcc.i686 binutils compat-db libstdc++ gdbm make ksh libaio-devel libXtst xorg-x11-utils openmotif openmotif.i686 libaio.i686 libaio-devel.i686 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
Собственно все :)
Comments 35
Only users with full accounts can post comments. Log in, please.