Установка Oraсle 10g в пакетном режиме
Предисловие
В предисловии к этому разделу хочу описать свой личный жизненный опыт: я работал в одной приличной компании, расположенной географически в Академгородке. Контора писала некую серьёзную софтину для заказчиков из Мск. Железо заказчика располагалось на М9, на входе перед серверами стоял пакетный фильтр, ака фаервол.
Необходимо было развернуть новую серверную инфраструктуру, смигрировать на неё и отключить старую. Всё это, разумеется, с минимальным временем простоя. Как это и бывает в реальной жизни, на время развёртывания новая-красивая-стройная система была, мягко говоря, доступна не так удобно, как того хотелось. А если говорить откровенно, то необходимо было выполнить два транзитных входа по SSH, и только после этого можно было попасть на машину, приговорённую к роли ораклового сервера. Разумеется, ни о каком туннелировании иксового трафика речи быть не могло.
Именно для таких ситуаций и предназначен режим инсталляции silent-mode. Для выполнения такой инсталляции необходимо подготовить несколько response-файлов, содержащих всю информацию, которая требуется инсталлятору для вылонения его работы.
В заключении моей success story хотелось бы сказать, что при расширении бизнеса, у заказчика появились площадки в Дойчландии, Индии, Малазии и Сингапуре. Благодаря раз и навсегда заготовленному набору response-файлов и небольшой «склеротичке», с описанием, что и где надо поправить, среднее время установки Оракла «с нуля» занимало около 15-30 минут. Самое главное, с гарантией какчества! :)
Шаг 0. Проверка готовности ОС принять Oracle.
Данный шаг (имеется ввиду проверка требований, прописанных в документации на Оракл) ни в коем случае нельзя пропускать! Самое неприятное состоит в том, что, скорее всего, Оракл у Вас нормально встанет и даже взлетит,.. вот только летать он будет нестабильно и падать в самый не подходящий момент. Оно надо?..
Итак, проверяем, что в /etc/sysctl.conf есть такие строки:
- sysctl.conf
kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default = 262144 net.core.rmem_max = 262144 net.core.wmem_default = 262144 net.core.wmem_max = 262144
Значения могут отличаться в большую сторону. После чего, надо применить указанные настройки к системе, и убедиться, что они будут восстанавливаться при каждой перезагрузке:
/sbin/sysctl -p /etc/sysctl.conf
Кроме того, необходимо создать группы и пользователя, от имени которых будет работать СУБД:
groupadd -g 200 oinstall groupadd -g 201 dba useradd -g oinstall -u 200 -G dba -c 'Oracle Software Owner' -m oracle passwd oracle
Предполагается, что директорией, в которую будет ставиться Oracle, будет /ora.
chown oracle:oinstall /ora
В зависимости от версии и архитектуры ОС, версии самого Оракла, в системе должен быть проставлен определённый набор пакетов. Для RHEL4U2 x86_64 и Oracle 10.2.0.1.0 для 64-битных архитектур этот набор выглядит так:
binutils-2.15.92.0.2-24.x86_64 compat-db-4.1.25-9.i386 compat-db-4.1.25-9.x86_64 compat-gcc-32-3.2.3-47.3.x86_64 compat-gcc-32-c++-3.2.3-47.3.x86_64 compat-libcom_err-1.0-5.i386 compat-libcom_err-1.0-5.x86_64 compat-libgcc-296-2.96-132.7.2.i386 compat-libstdc++-296-2.96-132.7.2.i386 compat-libstdc++-33-3.2.3-47.3.i386 compat-libstdc++-33-3.2.3-47.3.x86_64 compat-openldap-2.1.30-8.el4_6.4.i386 gcc-3.4.6-9.x86_64 gcc-c++-3.4.6-9.x86_64 gcc-g77-3.4.6-9.x86_64 gcc-java-3.4.6-9.x86_64 glibc-2.3.4-2.39.i686 glibc-2.3.4-2.39.x86_64 glibc-common-2.3.4-2.39.x86_64 glibc-devel-2.3.4-2.39.i386 glibc-devel-2.3.4-2.39.x86_64 glibc-headers-2.3.4-2.39.x86_64 glibc-kernheaders-2.4-9.1.100.EL.x86_64 java-1.4.2-gcj-compat-1.4.2.0-27jpp.noarch libaio-0.3.105-2.i386 libaio-0.3.105-2.x86_64 libaio-devel-0.3.105-2.x86_64 libgcc-3.4.6-9.i386 libgcc-3.4.6-9.x86_64 libstdc++-3.4.6-9.i386 libstdc++-3.4.6-9.x86_64 libstdc++-devel-3.4.6-9.x86_64 make-3.80-6.EL4.x86_64 pdksh-5.2.14-30.6.x86_64 sysstat-5.0.5-16.rhel4.x86_64
Список указанных пакетов можно получить командой
rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}\n'|egrep 'compat|glibc|gcc|libst|binu|make|pdksh|sysstat|libaio'|sort
Наиболее простой способ установить все недостающие пакеты ‑ выполнить следующие команды:
up2date -v --nox --arch x86_64 --download binutils compat-db compat-gcc-32 compat-gcc-32-c++ compat-libcom_err compat-libstdc++ gcc gcc-c++ gcc-g77 gcc-java glibc glibc-common glibc-devel glibc-headers glibc-kernheaders libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat up2date -v --nox --arch x86_64 binutils compat-db compat-gcc-32 compat-gcc-32-c++ compat-libcom_err compat-libstdc++ gcc gcc-c++ gcc-g77 gcc-java glibc glibc-common glibc-devel glibc-headers glibc-kernheaders libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat up2date -v --nox --arch i386 --download compat-db compat-libcom_err compat-libgcc compat-libstdc++ compat-libstdc++ compat-openldap glibc-devel libaio libgcc libstdc++ up2date -v --nox --arch i386 compat-db compat-libcom_err compat-libgcc compat-libstdc++ compat-libstdc++ compat-openldap glibc-devel libaio libgcc libstdc++ up2date -v --nox --arch i686 glibc up2date -v --nox --arch noarch java-1.4.2-gcj-compat
При этом решающее значение имеет не конкретная версия пакета, а наличие данного пакета под указанную архитектуру: x86_64, i386 и т.п. Обсуждая список требуемых пакетов, надо упомянуть очень приятные грабли, на которые можно легко наступить, особенно, если ОС на сервере устанавливалась другим человеком (а ещё хлеще - сторонней организацией). Дело в том, что этот список размазан по нескольким документам с одной стороны, при этом один документ исправляет написанное в другом… А с другой стороны, нет никакой уверенности, что полученный из документации список будет полным. Это особенно актуально для 64-битной архитектуры. Представленный выше список, вообще говоря, является избыточным, но он гарантировано содержит все необходимые пакеты.
Шаг 1. Установка СУБД Oracle 10g.
Установка СУБД происходит в пакетном режиме, все действия выполняются от имени пользователя oracle. После распаковки архива с дистрибутивом Oracle, необходимо убедиться, что дистрибутив расположен в директории /home/oracle/database.
cd /home/oracle/database gzip -d 10201_database_linux_x86_64.cpio.gz cpio -idmv < 10201_database_linux_x86_64.cpio
В директории /home/oracle распаковывается файл response_files10g.tar.bz2, переходим в директорию с response-файлами, редактируем файлы, указывая новые правильные значения параметров (содержимое файлов указано в приложении):
tar jxf response_files10g.tar.bz2 cd response_files/database nano environment nano 00-enterprise.rsp nano 01-netca.rsp nano 02-dbca.rsp
В файле environment необходимо исправить параметры:
- ORACLE_HOSTNAME
- ORACLE_BASE
- ORACLE_SID.
В файле 00-enterprise.rsp необходимо исправить параметры:
- ORACLE_HOME
- REMOVE_HOMES
- ORACLE_HOSTNAME
- s_globalDBName
- s_dbSid
- s_dlgRBOPassword
- s_superAdminSamePasswd
- s_superAdminSamePasswdAgain.
В файле 01-netca.rsp ничего менять не надо.
В файле 02-dbca.rsp необходимо исправить параметры в секции CREATEDATABASE:
- GDBNAME
- SID
- SYSPASSWORD
- SYSTEMPASSWORD
- SYSMANPASSWORD
- DBSNMPPASSWORD
- HOSTUSERPASSWORD
- SMTPSERVER
- EMAILADDRESS
Файл runAll.sh содержит команды, которые должны быть выполнены, для успешной установки СУБД. Каждая команда должна выполняться отдельно, для этого все остальные команды должны быть закомментированы. Первая строка, импортирующая файл environment, комментироваться не должна. После выполнения команды ~/database/runInstaller необходимо от имени root'а запустить два скрипта:
/ora/oraInventory/orainstRoot.sh /ora/product/10.2.0.1.0/root.sh
При выполнении всех предварительных условий, выполнение команд из файла runAll.sh успешно завершится, и будут запущены: сетевая служба Oracle (listner), процессы базы данных, Oracle Enterprise manager.
Шаг 2. Послеустановочные действия
По завершению установки Oracle, надо убедиться, что база в состоянии нормально останавливаться и запускаться. Для этого выполняется следующий набор команд:
${ORACLE_HOME}/bin/emctl stop dbconsole sqlplus "/ as sysdba" << EOT SHUTDOWN NORMAL EXIT EOT ${ORACLE_HOME}/bin/lsnrctl stop
В результате, ps x должен показать только два либо три процесса, принадлежащие пользователю oracle: ps, bash, sshd (если вход в систему выполнялся по SSH) Следующие команды запускают экземпляр базы данных:
${ORACLE_HOME}/bin/lsnrctl start sqlplus "/ as sysdba" << EOT STARTUP EXIT EOT ${ORACLE_HOME}/bin/emctl start dbconsole
После удачного старта базы, надо отредактировать файл /etc/oratab, заменив в нем N на Y в последней строке. От имени пользователя root копируем файл response_files/database/environment с настройками окружения и редактируем его согласно внутренним комментариям:
cp ~oracle/response_files/database/environment /etc/profile.d/zz-oracle-environment.sh nano /etc/profile.d/zz-oracle-environment.sh
Опционально создаем файл /etc/profile.d/zz-local-environment-tuning.sh с указанием прочих переменных окружения для повышения комфортности работы. Для автоматического запуска Oracle при рестарте системы необходимо создать файл /etc/init.d/oracle, разрешить его исполнение и создать символические ссылки из директорий /etc/rc3.d и /etc/rc5.d с именами S89oracle. Также, необходимо создать символические ссылки в директориях /etc/rc0.d и /etc/rc6.d с именами K01oracle:
nano /etc/init.d/oracle chmod +x /etc/init.d/oracle cd /etc/rc3.d; ln -s ../init.d/oracle S99oracle cd /etc/rc5.d; ln -s ../init.d/oracle S99oracle cd /etc/rc0.d; ln -s ../init.d/oracle K01oracle cd /etc/rc6.d; ln -s ../init.d/oracle K01oracle
Возможные проблемы.
При установке может возникнуть необходимость удалить результат предыдущей неудачной попытки установки Oracle. Наиболее простой вариант для этого:
- убедиться, что серверные процессы Oracle остановлены (см выше)
- выполнить команду:
rm -rf /ora/{admin,flash_recovery_area,oraInventory,product} /etc/{oraInst.loc,oratab} /usr/local/bin/{coraenv,dbhome,oraenv}
- в файле /etc/oratab удалить соответствующие строки
Проблема: При рестарте системы процессы Oracle не запускаются
Решение: Проверить существование файла /etc/init.d/oracle, права доступа к этому файлу, существование символических ссылок на данный файл. (см. раздел Послеустановочные действия.)
Проблема: При рестарте системы, либо при ручном запуске команды dbstart, запускается TNS listner, но экземпляр Oracle не создаётся.
Решение: Отредактировать файл /etc/oratab
— Andrew A. Sabitov 2010-11-20 16:00