На днях мне пришлось установить на эту ось такой продукт, который официально не поддерживается Oracle. CentOS для меня — достаточно неизведанный Linux, поэтому я погуглил, как его установить.
Я нашел несколько инструкций, к сожалению, ни одна из них не была той самой инструкцией, которой можно было бы тупо следовать, чтобы совершить это действие.
Все требовало доработок, поиска недостающих библиотек и т.д. В итоге я написал что-то вроде HOWTO с учетом всех поправок.
Возможно, кому-то будет интересно.
P.S. Истинные поклонники Oracle, прошу не судить строго, я знаю, что установка этой базы на неподдерживаемые ОС чревата и т.д. Но так как у меня есть практический опыт работы с этой СУБД в нескольких "несертифицированных" ОС и опыт решения очень небольшого количества коллизий при работе - до сих пор считаю требование "сертификации" ОС сильно преувеличенным.
Подключаемся под root и работаем в его среде:
Установите необходимые пакеты (все есть в стандартном репозитории, с небольшими вкраплениями):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
Временно меняем описание версии ОС, чтобы Oracle не ругался при установке.
Можно, конечно, при установке использовать ключ 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
Всё, root-доступ нам пока не нужен, подключаемся как пользователь oracle.
Установить в /opt/oracle/database cd /opt/oracle
cpio -idmv < database_linux_x86_64.cpio
cd database
.
/runInstaller
Устанавливаем.
В процессе установки может возникнуть ошибка: ins_emdb (ошибка вызова целевого «сборщика»…), проигнорируйте ее и нажмите «Продолжить».
В процессе установки следуем инструкциям установщика, вам нужно будет выполнить два скрипта из-под рута, выполняем их.
Ура? Еще нет.
Помним, что мы изменили описание релиза ОС, возвращаем старое описание обратно (выполняем из-под рута): 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
Собственно это все :)
Теги: #базы данных #администрирование Linux #howto #oracle
-
Дзи-Ся
19 Oct, 24 -
Барометр
19 Oct, 24 -
Чижевский Александр Леонидович.
19 Oct, 24 -
Умный Дом На Базе Контроллера Amx Ni-3100
19 Oct, 24 -
10 Шагов К Yaml Zen
19 Oct, 24 -
Литература 2.0
19 Oct, 24