установка СУБД Oracle 9i на nptl-based дистрибутивы linux на примере SUSE Linux Enterprise Server 9
Вышедший достаточно давно девятый релиз известной СУБД до сих пор весьма часто применяется на рабочих системах, несмотря на выход Oracle 10g. Вместе с тем, платформа Linux в последние несколько лет подверглась внутреннему обновлению, прежде всего связанному с переходом к использованию новой библиотеки работы с потоками (new posix thread library), что повлекло за собой изменения в GNU libc и ядре. Крупные коммерческие поставщики, такие, как RedHat и SUSE, провели переход достаточно давно, наложив на оригинальные исходные тексты GNU libc и ядра соответствующие патчи. Для приложений, разрабатываемых в рамках концепции free software, данный переход оказался практически безболезненным, в то же время у коммерческих производителей возникли определенные проблемы.
Вместе с тем, использование дистрибутивов Linux, выпущеных в то же время, что и Oracle 9i, не всегда представляется возможным, так как у них либо уже закончился (как, например, у RedHat Linux 7.3), либо окончится в недалеком будущем срок поддержки дистрибутива производителем. Виртуальная машина Java, входящая в состав СУБД Oracle 9i, не может корректно работать с nptl as-is, но в то же время основная часть СУБД поставляется в виде объектных файлов, которые собираются в исполнимые elf на конкретной системе, что позволяет избежать ряда проблем, но порождает несколько новых.
Описаный далее способ установки был проверен и использован при установке двух десятков production systems, успешно работающих в настоящее время. Установка производилась на серверы IBM eServer xSeries 236. Для инсталляции ОС Suse Linux Enterprise Server 9 (далее - SLES9) был сконфигурирован массив RAID 5+Hotspare. Использовался тип установки minimal с последующим добавлением недостающих пакетов из дистрибутива. При установке использовалась русская локаль (ru_RU.UTF8), часы установлены в локальное время.
Слеудет учесть, что при использовании механизмов репликации Oracle нелишним будет использование общего для всех систем сервера времени (не обязательно синхронизированного с внешним источником, но обеспечивающего минимальный разброс времени между реплицирующимися системами). Серьезные расхождения в показании системных часов могу вызвать трудно детектируемые ошибки в достаточно неожиданных местах. С учетом специфики создаваемого решения (многие системные администраторы заказчика не имели удовлетворительных навыков ни администрирования unix-подобных систем, ни Oracle) было решено хранить табличные пространства БД на файловых системах, а не на raw-разделх дискового массива (что, по моему мнению, было бы более предпочтительным в менее экстремальном случае). Для установки СУБД был создана файловая система ext3, монтируемая в режиме журналирования данных (data=journal, которая монтировалась в каталог /opt/oracle.
Установка СУБД проводилась с рабочей машины системного администратора с помощью ssh с включенным туннелированием X-протокола. В состав SUSE9 входит пакет orarun, который предоставляет неплохую инфраструктуру для развертывания Oracle (стартовые скрипты, профили пользователей и т.п.) Кроме этого пакета и его зависимостей необходимо установить пакеты gcc, compat, make, unzip из дистрибутива. Пакет orarun содержит досадную недоработку, вследствие которой созданый при его устаноке пользователь oracle попадает в группу disk (что необходимо для создания табличных пространств на разделах дискового массива), но не попадает в группу dba. Эту ошибку необходимо устранить до начала установки. Дистрибутив Oracle состоит из трех дисков, которые можно скачать с oracle.com, пройдя предварительно бесплатную регистрацию. На сегодняшний день для загрузки доступна версия 9.2.0.4, которая в принципе работоспобна на SLEL9. Вместе с тем, для работы на SLES9 рекомендуется версия 9.2.0.6, сущестующая только в виде патча, который зарегистрированные пользователи могут получить на metalink.oracle.com.
Установку необходимо проводить от имени прользователя oracle, поэтому необходимо разблокировать на время установки аккаунт (то есть назначить валидный shell, затем установить пароль либо поместить в /opt/oracle/.ssh/authorized_keys ваш публичный ключ для ssh). Зайдя на сервер с помощью ssh, необходимо распаковать архивы дистрибутива(gunzip, cpio -idmv <filename) в домашнем каталоге пользователя oracle (/opt/oracle) и запустить от имени пользователя root стартовый скрипт oracle (/etc/init.d/oracle start) который установит необходимые для работы oracle параметры системы и ядра. Более подробно о параметрах ядра и ОС написано в документации, идущей с дистибутивом и на metalink.oracle.com. Параметры ядра, указаные на metalink, отличаются от параметров по умолчанию orarun, какие из них использовать - это ваш выбор, но я бы рекомендовал все же доверять oracle. Перед запуском запуском установки необходимо экспортировать несколько перемнных окружения:
LD_PRELOAD=/usr/lib/libInternalSymbols.so
LD_ASSUME_KERNEL=2.4.21
Кроме того, необходимо, чтобы переменная DISPLAY указывала на существующий Xserver, который готов принимать соединения с сервера СУБД (в случае использования ssh -X устанавливается автоматически). Экспорт LD_PRELOAD и LD_ASSUME_KERNEL стоит занести сразу в ~/.profile.
Инсталлер находится в каталоге Disk1 рспакованного дистрибутива и запускается скриптом runInstaller. По ходу установки будет неоходимо запустить два скрипта от пользователя root. Я не рекомендую создавать БД сразу во время установки, т.к. это потребует выполнения ряда операци при наложении патча 9.2.0.6, т.е. тип установки - software only. Следует обратить внимание на список доступных oracle языков и не забыть указать нужный вам (естественно, английский удалять из этого списка не стоит) Сама процедура установки тривиальна и описана в дистрибутивной документации, поэтому повторять написанное там я не считаю необходимым.
После установки СУБД нужно установить патч. Для этого следует распактовать архив и запустить скрип runInstaller (обратите внимание, в архиве с патчем находится каталог Disk1, т.е. распаковывать его в тот же каталог, где лежит дистрибутив Oracle, не следует). При запуске runInstaller через ssh будет сообщение от невозможности определить праметры удаленного X-сервера, на которое можно смело отвечать “yes”. Установка патча проходит в два этапа - сначала установка Oracle Universal Installer 10, затем собствено установка самого патчсета. При установке следует убедиться, что указаны корректные Destination name и Destination path (по умолчанию оба компонента предлагается поставить в другие каталоги). Во время установки patchset 9.2.0.6 потребуется запустить скрипт от имени root, который завершится с сообщением о невозможности удалить файл /opt/oracle/product/9ir2/rdbms/filemap - причина этой ошибки мне не ясна, но после завершения работы скрипта root.sh его можно удалить руками. После успешного наложения патча следует прописать в стартовый скрипт oracle строчку
которая решает проблему с правми доступа к сегментам shared memory в ядре SLES9, и выполнить
Для автоматического запуска и остановки oracle необходимо отредактировать файл /etc/sysconfig/oracle, установив значение переменных, отвечающих за запуск различных компонент СУБД. Как минимум надо установить переменные START_ORACLE_DB="yes" и START_ORACLE_DB_LISTENER="yes".
Для успешного создания БД следует перед запуском dbca созать в каталоге /etc файл rac_on, который служит признаком существования в данной системе Application Cluster. Необходимость создания этого файла обусловлена особенностями работы java из поставки SLES9 - будучи запущенным с параметром -native jre в SLES9 не работоспособно несмотря на трюки с LD_ASSUME_KERNEL и LD_PRELOAD. В скрипте dbca вызов jre с соответсвующим параметром зависит от существования файла /etc/rac_on. При создании dbca следует обратить внимание на пароли – естественно, ничего кроме ASCII- символов в пароле быть не должно, более того, с некоторыми вполне печатными символами типа “~” dbca ругается на некорректный ввод пароля.
После создания БД необходимо отредактировать файлы /etc/oratab и /etc/profile.d/oracle.sh.
В /etc/profile.d/oracle.sh установить ORACLE_SID=_ВАШ_SID
В /etc/oratab разрешить запуск вашей БД (установить последнее поле соответсвующей строки в “Y”).
После этого необходимо создать файл с параметрами инициализации БД. За онснову можно взять файл /opt/oracle/product/9ir2/dbs/init.ora, скопировав его в /opt/oracle/product/9ir2/dbs/initВАШ_SID.ora.
Как минимум необходимо прописать значение переменной db_name=ВАШ_SID
После этого следует перезапустиь oracle командой /etc/init.d/oracle restart и проверить функционирование СУБД.
Богдан Рудас, системный администратор отделения интернет-технологий СП ЗАО "Международный деловой альянс" (IBA).
Вместе с тем, использование дистрибутивов Linux, выпущеных в то же время, что и Oracle 9i, не всегда представляется возможным, так как у них либо уже закончился (как, например, у RedHat Linux 7.3), либо окончится в недалеком будущем срок поддержки дистрибутива производителем. Виртуальная машина Java, входящая в состав СУБД Oracle 9i, не может корректно работать с nptl as-is, но в то же время основная часть СУБД поставляется в виде объектных файлов, которые собираются в исполнимые elf на конкретной системе, что позволяет избежать ряда проблем, но порождает несколько новых.
Описаный далее способ установки был проверен и использован при установке двух десятков production systems, успешно работающих в настоящее время. Установка производилась на серверы IBM eServer xSeries 236. Для инсталляции ОС Suse Linux Enterprise Server 9 (далее - SLES9) был сконфигурирован массив RAID 5+Hotspare. Использовался тип установки minimal с последующим добавлением недостающих пакетов из дистрибутива. При установке использовалась русская локаль (ru_RU.UTF8), часы установлены в локальное время.
Слеудет учесть, что при использовании механизмов репликации Oracle нелишним будет использование общего для всех систем сервера времени (не обязательно синхронизированного с внешним источником, но обеспечивающего минимальный разброс времени между реплицирующимися системами). Серьезные расхождения в показании системных часов могу вызвать трудно детектируемые ошибки в достаточно неожиданных местах. С учетом специфики создаваемого решения (многие системные администраторы заказчика не имели удовлетворительных навыков ни администрирования unix-подобных систем, ни Oracle) было решено хранить табличные пространства БД на файловых системах, а не на raw-разделх дискового массива (что, по моему мнению, было бы более предпочтительным в менее экстремальном случае). Для установки СУБД был создана файловая система ext3, монтируемая в режиме журналирования данных (data=journal, которая монтировалась в каталог /opt/oracle.
Установка СУБД проводилась с рабочей машины системного администратора с помощью ssh с включенным туннелированием X-протокола. В состав SUSE9 входит пакет orarun, который предоставляет неплохую инфраструктуру для развертывания Oracle (стартовые скрипты, профили пользователей и т.п.) Кроме этого пакета и его зависимостей необходимо установить пакеты gcc, compat, make, unzip из дистрибутива. Пакет orarun содержит досадную недоработку, вследствие которой созданый при его устаноке пользователь oracle попадает в группу disk (что необходимо для создания табличных пространств на разделах дискового массива), но не попадает в группу dba. Эту ошибку необходимо устранить до начала установки. Дистрибутив Oracle состоит из трех дисков, которые можно скачать с oracle.com, пройдя предварительно бесплатную регистрацию. На сегодняшний день для загрузки доступна версия 9.2.0.4, которая в принципе работоспобна на SLEL9. Вместе с тем, для работы на SLES9 рекомендуется версия 9.2.0.6, сущестующая только в виде патча, который зарегистрированные пользователи могут получить на metalink.oracle.com.
Установку необходимо проводить от имени прользователя oracle, поэтому необходимо разблокировать на время установки аккаунт (то есть назначить валидный shell, затем установить пароль либо поместить в /opt/oracle/.ssh/authorized_keys ваш публичный ключ для ssh). Зайдя на сервер с помощью ssh, необходимо распаковать архивы дистрибутива(gunzip, cpio -idmv <filename) в домашнем каталоге пользователя oracle (/opt/oracle) и запустить от имени пользователя root стартовый скрипт oracle (/etc/init.d/oracle start) который установит необходимые для работы oracle параметры системы и ядра. Более подробно о параметрах ядра и ОС написано в документации, идущей с дистибутивом и на metalink.oracle.com. Параметры ядра, указаные на metalink, отличаются от параметров по умолчанию orarun, какие из них использовать - это ваш выбор, но я бы рекомендовал все же доверять oracle. Перед запуском запуском установки необходимо экспортировать несколько перемнных окружения:
LD_PRELOAD=/usr/lib/libInternalSymbols.so
LD_ASSUME_KERNEL=2.4.21
Кроме того, необходимо, чтобы переменная DISPLAY указывала на существующий Xserver, который готов принимать соединения с сервера СУБД (в случае использования ssh -X устанавливается автоматически). Экспорт LD_PRELOAD и LD_ASSUME_KERNEL стоит занести сразу в ~/.profile.
Инсталлер находится в каталоге Disk1 рспакованного дистрибутива и запускается скриптом runInstaller. По ходу установки будет неоходимо запустить два скрипта от пользователя root. Я не рекомендую создавать БД сразу во время установки, т.к. это потребует выполнения ряда операци при наложении патча 9.2.0.6, т.е. тип установки - software only. Следует обратить внимание на список доступных oracle языков и не забыть указать нужный вам (естественно, английский удалять из этого списка не стоит) Сама процедура установки тривиальна и описана в дистрибутивной документации, поэтому повторять написанное там я не считаю необходимым.
После установки СУБД нужно установить патч. Для этого следует распактовать архив и запустить скрип runInstaller (обратите внимание, в архиве с патчем находится каталог Disk1, т.е. распаковывать его в тот же каталог, где лежит дистрибутив Oracle, не следует). При запуске runInstaller через ssh будет сообщение от невозможности определить праметры удаленного X-сервера, на которое можно смело отвечать “yes”. Установка патча проходит в два этапа - сначала установка Oracle Universal Installer 10, затем собствено установка самого патчсета. При установке следует убедиться, что указаны корректные Destination name и Destination path (по умолчанию оба компонента предлагается поставить в другие каталоги). Во время установки patchset 9.2.0.6 потребуется запустить скрипт от имени root, который завершится с сообщением о невозможности удалить файл /opt/oracle/product/9ir2/rdbms/filemap - причина этой ошибки мне не ясна, но после завершения работы скрипта root.sh его можно удалить руками. После успешного наложения патча следует прописать в стартовый скрипт oracle строчку
echo 1 > /proc/sys/vm/disable_cap_mlock
которая решает проблему с правми доступа к сегментам shared memory в ядре SLES9, и выполнить
/etc/init.d/oracle restart
Для автоматического запуска и остановки oracle необходимо отредактировать файл /etc/sysconfig/oracle, установив значение переменных, отвечающих за запуск различных компонент СУБД. Как минимум надо установить переменные START_ORACLE_DB="yes" и START_ORACLE_DB_LISTENER="yes".
Для успешного создания БД следует перед запуском dbca созать в каталоге /etc файл rac_on, который служит признаком существования в данной системе Application Cluster. Необходимость создания этого файла обусловлена особенностями работы java из поставки SLES9 - будучи запущенным с параметром -native jre в SLES9 не работоспособно несмотря на трюки с LD_ASSUME_KERNEL и LD_PRELOAD. В скрипте dbca вызов jre с соответсвующим параметром зависит от существования файла /etc/rac_on. При создании dbca следует обратить внимание на пароли – естественно, ничего кроме ASCII- символов в пароле быть не должно, более того, с некоторыми вполне печатными символами типа “~” dbca ругается на некорректный ввод пароля.
После создания БД необходимо отредактировать файлы /etc/oratab и /etc/profile.d/oracle.sh.
В /etc/profile.d/oracle.sh установить ORACLE_SID=_ВАШ_SID
В /etc/oratab разрешить запуск вашей БД (установить последнее поле соответсвующей строки в “Y”).
После этого необходимо создать файл с параметрами инициализации БД. За онснову можно взять файл /opt/oracle/product/9ir2/dbs/init.ora, скопировав его в /opt/oracle/product/9ir2/dbs/initВАШ_SID.ora.
Как минимум необходимо прописать значение переменной db_name=ВАШ_SID
После этого следует перезапустиь oracle командой /etc/init.d/oracle restart и проверить функционирование СУБД.
Богдан Рудас, системный администратор отделения интернет-технологий СП ЗАО "Международный деловой альянс" (IBA).
Сетевые решения. Статья была опубликована в номере 03 за 2005 год в рубрике sysadmin