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

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

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



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

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


Собственно все :)
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 35

    0
    yum install — для удобства все пакеты после слова install можно перечислить через пробел в одну строку.
      0
      поправил.
        +2
        Кстати, вы намеренно добавляли .x86_64 и подобные окончания у пакетов? Вообще-то это не обязательно, yum установит их и так.
          +1
          Не намеренно, так исторически сложилось :)

            0
            Тогда, наверное, лучше убрать :)
              0
              Если не секрет, чем лучше?
                0
                Ну, гм… А что, на x32 CentOS я не могу установить Oracle? А у вас там везде i686 фигурирует…
                  0
                  У меня вообще ничего нигде не фигурирует. Я мимо шёл.
                  А вообще да, на x86 вы Oracle по этой инструкции не установите, ибо она рассказывает об установке на x64.
                    +2
                    Дорогой сэр!

                    Окончания .x86_64 можно убрать, поскольку дистрибутив указанный мной в статье — x64 и yum подставит эти окончания если их не указывать. С другой стороны часть библиотек оракла при установке линкуется с библиотеками системы, и часть библиотек оракла имеет 32-битную архитектуру, поэтому в системе необходимы библиотеки некоторые библиотеки в 32-битной для корректной линковки либо их compat-версии.

                    Посему окончания .x86_64 можно убрать, в то время как окончания i686 убирать не в коем случае не следует.
        +5
        На дворе 2012 год и на днях уже 12-я версия выйдет, а вы все про десятку рассказываете. Видимо по этой причине вы и не знаете, что есть например замечательный пакет oracle_validated который значительно упрощает процесс установки: он ставит нужные пакеты, конфигурит нужные параметры ядра, создает пользователя oracle. — это все не надо делать ручками.
        Пользуясь случаем пропиарю свои заметки по теме установки и настройки оракла в разных ипостасиях, смотреть тут
          0
          Ну вот, я статью такую классную написал, а вы сразу обзываться :)

          Пакет oracle_validated удобен, но:
          1. В стандартный репозиторий CentOS входит ли?
          2. На всех ли дистрибутивах ставится корректно?

          По моему так немножко нагляднее и понятнее что и в каких файлах настроено, какие библиотеки используются и т.д. А поскольку понятнее — чуть меньше проблем будет при установке на другой дистрибутив.

          12-я версия — штука хорошая, но продукты от оракл требуют некоей… выдержки во времени, поэтому все еще да, про 10-ку :)

          А заметки у вас хорошие, с удовольствием читаю.

            +1
            wget 'http://oss.oracle.com/el5/oracle-validated/oracle-validated-1.1.0-7.el5.src.rpm'
            rpmbuild --rebuild oracle-validated-1.1.0-7.el5.src.rpm
              +1
              В стандартный репозиторий CentOS входит ли?

              Если пакет не входит в стандартный репозитарий CentOS не значит ведь, что нужно устраивать танцы с бубнами, лишь бы без него обойтись. Тем более, что он ставится двумя командами, как показали ниже.
                +2
                Описан вполне себе стандартный способ установки, вполне себе стандартные команды, никаких бубнов.

                Что конкретно вызывает у вас затруднение в понимании причинно-следственных связей? Задавайте вопросы — я вам с удовольствием отвечу. Просто если вы чего-то не поняли мне кажется это не повод называть это танцами с бубном…

                Кстати, oracle-validated делает примерно то же самое, по зависимостям доставляет необходимые пакеты, изменяет настройки системы, и т.д. Никакой мистики :)
                  0
                  Причем тут причинно-следственные связи? :) Что проще — проделать все, что вы описали, или установить пакет, не входящий в официальный репозитарий CentOS, который все автоматом конфигурирует?
                    0
                    Понятие «танцы с бубном» как бы подразумевает отсутствие причинно-следственных связей? :)
                      0
                      Не нужно отклоняться от темы разговора :)
                        0
                        Имхо, все эти шаги хотя бы один раз обязательно следует сделать вручную, чтобы понимать, что к чему и откуда ноги растут. А запустить oracle-validated и сказать «я умею тюнить систему под оракл» — это то же самое, что осилить установку убунты и заявить «я разбираюсь в линукс».
                        Нет, раз на третий уже, конечно, все эти тупые действия будут утомлять и тут как раз пригодится этот чудесный пакет. Но я бы прям в обязательном порядке требовал хоть раз поднять систему вручную.
                          0
                          Все так, но… я не вижу причины создавать себе трудности, а затем гордо заявлять, что ты их преодолел. Если есть более простой способ сделать что-то, лучше пользоваться им. В мире достаточно сложных вещей, над которыми придется задуматься и про которые можно написать статьи.
                0
                Ну да, в стандартный репозиторий не входит, но собственно а должен ли? У оракла специально место это так и называется: Free and Open Source Software, он же oss.oracle.com, поэтому его можно без проблем подключить и использовать.
                Кстати, при установке этот пакет все проделанные действия пишет в лог, который потом, если интересно, можно посмотреть и увидеть все сделанные изменения. Но зато время он экономит существенно.
                А по вопросу — на всех или не на всех — на всех RHEL-подобных — точно работает. Да и там ведь нет никаких бинарников скомпилированных, там всего лишь правильные скрипты.

                Нуу выдержка — это да, как говорится «до первого апдейта нельзя»…

                Про заметки спасибо, записываем по возможности :)
              –4
              >Тру фанатов оракла
              У оракла существуют фанаты?
                +1
                Исправьте, пожалуйста, ошибки:

                В процессе установки следуем инструкциям инсталятора, нужно быдет выполнить да скрипта из-под рута, выполняем их.

                Вероятно, имеются ввиду «будет» и «два скрипта»?
                  0
                  Исправил.
                  0
                  Любопытно чем автора не устроил Oracle Linux
                    +1
                    Скажем так выбора ОС у меня не было, к сожалению…

                    Если чисто теоретически посравнивать — CentOS бесплатен, в т.ч. доступ к бинарным пакетам. По этим же причинам доступен в виде образов на VPS/VDS площадках к примеру.

                    Да и Oracle Linux не сильно дружелюбнее к Oracle Database, увы… Взять хотя бы тот факт что OL6 и RHEL6 сертифицировали на поддержку Oracle Database только в конце марта этого года.
                      +1
                      >>CentOS бесплатен, в т.ч. доступ к бинарным пакетам
                      http://public-yum.oracle.com/

                      >>Да и Oracle Linux не сильно дружелюбнее к Oracle Database
                      У Oracle Linux есть одно большое преимущество — новое ядро.
                      Отсюда такие плюшки как ext4 без бэкпорта и прочее.
                      Плюс, оракл говорит о неких оптимизациях ядра(про детали не в курсе) специально для Oracle DB, которые положительно сказываются на производительности системы…
                    +1
                    Да уж, видать, автор глубоко разбирается в оракле и линуксе, раз отключает HUGETLBFS и прописывает лимиты шелла самодельными скриптами вместо /etc/security/limits.conf.

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

                    Пишите «имею скромный опыт работы с ораклом, серьезных проблем с официальной техподдержкой и металинком не решал», не путайте людей.
                      0
                      Вообще-то в /etc/security/limits.conf вписаны лимиты (читайте выше). То что ручками в профайле ветка для ksh не должно вас расстраивать, да и это не «вместо».

                      HUGETLBFS — внятно сможете объяснить для каких конкретно целей 10g использует? С удовольствием послушаю.

                        0
                        Why Do You Need HugePages?

                        HugePages is crucial for faster Oracle database performance on Linux if you have a large RAM and SGA. If your combined database SGAs is large (like more than 8GB, can even be important for smaller), you will need HugePages configured. Note that the size of the SGA matters.

                        Вот что пишет сам Oracle, например
                          0
                          Ну круто, че.

                          Если у кого нет доступа на металинку, тут копия, можно почитать, поразмыслить нужно или нет.
                            0
                            В целом, можно и без них жить. SGA даже в 8гб не часто нужно. SGA в 20гб большая часть ораклового саппорта считает потолком. При SGA в 100+ГБ вылазят интересны косяки, вроде внезапно замёрзшей на полчаса базе.
                              +1
                              SGA в 100+ГБ — хорошая железка наверное у вас, завидую! :)
                                0
                                252ГБ на ноду, две ноды. Вообще, не самое удачное архитектурное решение, особенно учитывая, что BI ломится на эти же ноды. Ну да кастомер хозяин, будем с этим жить.
                                  0
                                  252гб памяти, сга чуть больше 100, баффер кэш 100.

                                  Ну почему на хабре комментарии нельзя комментировать, а ещё почему с утра хочется спать и страдает внимательность :) Но это вековечные проблемы.
                      +1
                      Автор, вводит сервер в эксплуатацию? Я бы не рисковал, у меня на машине FC16 стоят клиенты от 9 до 11 и БД 10, но это не сервер и работа 24*7 персоналке не нужна.
                      Зачем использовать Centos 6, если беcплатно скачивается сертифицированый OEL 5 и его репозитории открыты? По крайней мере при покупку БД можно в поддержку обратиться. Смысл в статье установка БД описана в readme дистрибутива, не плохо описана у Пушица. А вообще для установки вполне достаточно Note 169706.1. Кстати под RHEL 6 не сертифицирован даже 11.2.0.2 цитирую с металинк:
                      Red Hat Enterprise Linux 6 — Database 11.2.0.3 and higher
                      Kernel 2.6.32-71.el6.x86_64 or later (compatible with Red Hat Enterprise kernel)
                      Oracle Unbreakable Enterprise Kernel 2.6.32-100.28.5.el6.x86_64 or higher

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое