Установка Oracle8i 8.1.7.4 на FreeBSD шаг за шагомВячеслав Иванченко
<ivi@dhs.net.ru>
$FreeBSD: doc/ru_RU.KOI8-R/articles/oracle/article.sgml,v 1.36 2003/07/14 03:12:47 ivi EXP $
Чтобы сделать этот документ максимально информативным и правильным, присылайте свои комментарии и пожелания мне на электронный адрес ivi@dhs.net.ru.
Отдельно благодарю Стаса Корниенко за его труд, так как львиная доля этой статьи основана на его материале.
1. Введение
Эта статья содержит описание пошаговой установки Oracle8i для linux (8.1.7.4) на FreeBSD. Перед тем, как написать эту статью, я внимательно перечитал материал Стаса Корниенко "Установка Oracle 8.1.x на FreeBSD 4.x". И все меня вроде устраивало в статье Стаса, да только не давала спокойно спать мысль - почему же установщик Oracle8i (Oracle Universal Installer) на последней стадии своей работы зависает, из-за чего заканчивать установку приходилось вручную. Поэтому я поставил перед собой цель - произвести установку Oracle8i так, чтобы все неприятные ситуации, связанные с зависанием не возникали при установке.
Тщательно проанализировав различную документацию по установке Oracle8i на различных дистрибутивах Linux и проведя различные эксперименты над установкой Oracle8i, как на FreeBSD, так и на Linux, я пришел к выводу, что Oracle8i все же можно установить на FreeBSD так, чтобы он не зависал во время установки. Также на FreeBSD возможно использование GUI-утилит, которые будут доступны после установки. У меня это получилось, чего желаю и Вам! :-)
Предполагается, что установлена FreeBSD-4.x или FreeBSD-5.x на базе i686 вместе с настроенной и готовой к работе XFree86 / X Window System.
Предполагается, что если у Вас нет неразмеченного места на дисках Вашей машины, не меньше 2 ГБ, то в файловой системе примонтированной в директорию /usr имеется 3,5 ГБ свободного места. Также необходимо, чтобы общий размер своп-разделов был равен 1 ГБ, если общий размер своп-разделов не удовлетворяет указанным требованиям и у Вас отсутствует дополнительное неразмеченное место для создания еще одного своп-раздела, то Вам понадобится еще 1 ГБ сводного места, в любой имеющейся на дисках Вашей машины файловой системе UFS. Конфигурация машины, на которую устанавливается Oracle8i, должна удовлетворять следующим параметрам CPU PIII-500 МГц и выше, RAM 256 МБ и более.
Предполагается, что в качестве командного интерпретатора у суперпользователя установлен csh, и суперпользователь находится в группе wheel, GID которой равен 0.
Предполагается, что все команды начинающиеся с символа # выполняются от имени суперпользователя, а с символа % - от имени пользователя oracle, которого Вам еще предстоит создать в соответствии с рекомендациями из этой статьи. Будьте внимательны, выполнять команды необходимо именно с тем UID, который рекомендуется в статье!
Не стоит выполнять команды, которые должен выполнять пользователь oracle, от имени суперпользователя, в большинстве случаев это приведет к различным проблемам при инсталляции Oracle8i.
Предполагается, что исходные тексты системы доступны в директории /usr/src, а коллекция портов находится в директории /usr/ports.
Предполагается, что будет использоваться обновленная с помощью cvsup коллекция портов, в связи с тем, что старые версии FreeBSD, содержат в портах emulators/linux_base-6 и devel/linux_devtools-6 ссылки на уязвимые версии пакетов. Об обновлении коллекции портов при помощи cvsup можно прочесть в "FreeBSD Handbook".
Предполагается, что в системе установлены bzip2 и unzip. Если у Вас одна из последних версий FreeBSD-4.x, или FreeBSD-5.x, то bzip2 уже есть в системе, если нет, то необходимо установить его из коллекции портов, выполнив следующее:
# cd /usr/ports/archivers/bzip2 && make install clean && rehash
Для установки unzip выполните следующие команды:
# cd /usr/ports/archivers/unzip && make install clean && rehash
Предполагается, что в корневой директории существует символическая ссылка /compat, указывающая на директорию /usr/compat. Проверьте это командой,
# ls -l /compat
Если выдается что-то вроде
lrwxr-xr-x 1 root wheel 11 6 Dec 13:18 /compat -> /usr/compat
значит, все нормально, если команда выдала
``ls: /compat: No sUCh file or Directory''
то создайте ссылку, следующим образом,
# ln -s /usr/compat /compat
2. Закачаем все необходимые файлы для установки Oracle8i
Закачаем все необходимые файлы для установки Oracle8i и положим их в директорию /usr/oinstall, которую необходимо создать.
# mkdir /usr/oinstall
# cd /usr/oinstall
Итак, нужны следующие файлы:
linux81701.tar (549867520 Б) - дистрибутив Oracle8i EnterPRise Edition Release 3 (8.1.7.0.1) for Linux (Intel). http://otn.oracle.com/software/products/oracle8i/content.Html
procps-2.0.4-2.i386.rpm (134767 Б) - содержит некоторые системные утилиты необходимые Oracle8i. FTP://ftp.redhat.com/pub/redhat/linux/6.1/en/os/i386/RedHat/RPMS/procps-2.0.4-2.i386.rpm
jre118_v3-glibc-2.1.3.tar.bz2 (7156122 Б) - дистрибутив JRE версии 1.1.8 от blackdown.org. Список FTP-серверов, откуда можно закачать дистрибутив, находится на http://blackdown.org/
p2376472_8174_LINUX.zip (134488247 Б) - кумулятивный патч, устраняющий довольно большое количество различных ошибок в Oracle8i (8.1.7.0) и поднимающий Oracle8i до версии 8.1.7.4. На текущий момент это патч доступен http://metalink.oracle.com/, доступ на этот ресурс является платным. Но при желании найти этот файл в Internet не составит труда. Ведь у Вас "карты в руках" - имя файла. ;-) В крайнем случае, можно поднять Oracle8i до версии 8.1.7.3, этот кумулятивный патч доступен на официальном FTP-сервере Oracle Corporation и на текущий момент бесплатный. Файл p2189751_8173_LINUX.zip (121801951 Б) можно загрузить по ссылке на директорию с FTP-сервера ftp://oracle-ftp.oracle.com/server/patchsets/unix/LINUX/817patchsets/. О выходе новых кумулятивных патчей всегда можно узнать на странице http://otn.oracle.com/support/patches.htm
3. Устанавливаем своп размером в 1 ГБ
Если своп равен 1 ГБ или больше, то не выполняйте этот пункт.
Если же размер свопа меньше 1 ГБ и на дисках Вашей машины нет неразмеченного места для его создания, то с помощью команды df определите, в какой файловой системе у Вас есть 1 ГБ свободного места, и создайте файл swap. Например, для размещения файла swap в директории /usr, выполним следующие команды:
# cd /dev
# sh ./MAKEDEV vn0
# dd if=/dev/zero of=/usr/swap bs=1024k count=1024
# chmod 0600 /usr/swap
# echo 'swapfile="/usr/swap"' >> /etc/rc.conf
Примечание: Если Вы производите установку на FreeBSD-5.x, то команды cd /dev и sh ./MAKEDEV vn0 выполнять не надо.
Реально для работы лучше делать своп не в файле, а так, как это положено - выделить для этого раздел на диске. Поэтому в будущем решите этот вопрос, но до момента, когда у Вас появится дополнительный диск, можно использовать и этот вариант.
4. Инсталлируем emulators/linux_base-6 и devel/linux_devtools-6
Порты emulators/linux_base-6 и devel/linux_devtools-6 должны установить пакеты от дистрибутива Linux Red Hat 6.1 и частично от 6.2.
# cd /usr/ports/emulators/linux_base-6
# make install clean && rehash
# cd /usr/ports/devel/linux_devtools-6
# make install clean && rehash
Будьте внимательны!
В коллекции портов имеются порты, устанавливающие пакеты от Linux Red Hat 7.1 emulators/linux_base и devel/linux_devtool-7 - эти пакеты не подойдут! Oracle8i для Linux собран с glibc-2.1.3, именно эта версия glibc имеется в портах на момент написания этой статьи.
$FreeBSD: ports/emulators/linux_base-6/Makefile,v 1.70 2003/04/08 21:47:06 trevor Exp $
$FreeBSD: ports/devel/linux_devtools-6/Makefile,v 1.34 2003/02/20 17:06:51 knu Exp $
5. Дополнительно устанавливаем пакет procps-2.0.4-2.i386.rpm
Дополнительно к эмуляции Linux устанавливаем пакет procps-2.0.4-2.i386.rpm. Без него у Вас на FreeBSD, установщик Oracle8i не сможет нормально завершить свою работу - он попросту зависнет при попытке создания базы данных. А происходит это из-за того, что во время инсталляции вызывается утилита dbassist, которая без пакета procps-2.0.4-2.i386.rpm на FreeBSD работать не хочет. Вот чтобы этого не произошло, Вы и установите пакет procps-2.0.4-2.i386.rpm, который до этого должны были положить в директорию /usr/oinstall.
# cd /usr/oinstall
# rpm -U --ignoreos --root /compat/linux --dbpath /var/lib/rpm --nodeps --replacepkgs procps-2.0.4-2.i386.rpm
6. Включаем поддержку совместимости с Linux.
Включаем поддержку совместимости с Linux. В файле /etc/rc.conf нужно добавить строку linux_enable="YES"
# echo 'linux_enable="YES"' >> /etc/rc.conf
7. Создаем символическую ссылку /compat/linux/etc/mtab
Создаем символическую ссылку, которая будет необходима Oracle8i для получения информации о Вашем (-их) диске (-ах).
# ln -s /etc/fstab /compat/linux/etc/mtab
8. Вносим изменения в /etc/fstab
В файле /etc/fstab после строки, где описывается proc, добавьте в текстовом редакторе строку
linproc /compat/linux/proc linprocfs rw 0 0
и сохраните файл.
9. Создаем утилиту arch
Создаем утилиту arch, которая в Linux используется для вывода информации об архитектуре машины.
# echo 'echo i686' > /compat/linux/bin/arch
# chown root:wheel /compat/linux/bin/arch
# chmod 0755 /compat/linux/bin/arch
10. Устанавливаем JRE от blackdown.org
Устанавливаем JRE от blackdown.org в /compat/linux/usr/local
# cd /compat/linux/usr
# mkdir local
# cd local
# tar --bzip2 -xvf /usr/oinstall/jre118_v3-glibc-2.1.3.tar.bz2
# cd jre118_v3
# ln -s . linux
# cd bin
# ln -s i686 linux
# cd ../lib
# ln -s i686 linux
Такое количество символических ссылок объясняется тем, что некоторые утилиты Oracle8i используют эти пути, а раз используют, значит, они должны быть для того, чтобы обеспечить нормальную работу этих утилит.
11. Устанавливаем JDK 1.2.2 от Sun Microsystems, Inc.
Устанавливаем JDK 1.2.2 для Linux от Sun Microsystems, Inc. Дистрибутив JDK придется загрузить самостоятельно и положить в директорию /usr/ports/distfiles. Чтобы узнать, откуда его можно загрузить, зайдите в директорию порта java/linux-sun-jdk12 и выполните команду make с целью fetch, в ответ Вы получите сообщение, разъясняющее, откуда можно загрузить дистрибутив. После загрузки установка происходит обычным для коллекции портов способом.
# cd /usr/ports/java/linux-sun-jdk12 && make install clean && rehash
Oracle8i будет видеть JDK как /usr/local/java, но мы устанавливаем дистрибутив Oracle8i под Linux, поэтому необходимо создать путь /compat/linux/usr/local/java
# cd /compat/linux/usr/local
# ln -s /usr/local/linux-sun-jdk1.2.2 java
12. Распаковываем дистрибутив Oracle8i
Распаковываем дистрибутив Oracle8i и проводим над ним небольшие манипуляции.
# cd /usr/oinstall
# tar -xfv linux81701.tar
# cd Disk1
# mv * /usr/oinstall
# cd ..
# rm -rf Disk1
В результате данных действий получили распакованный дистрибутив Oracle8i в директории /usr/oinstall/Disk1, а чтобы в будущем нажимать меньше клавиш, содержимое Disk1 перенесли прямо в /usr/oinstall, а директорию Disk1 удалили.
13. Вносим изменения в дистрибутив Oracle8i
Вносим в дистрибутив Oracle8i исправления, при этом делая копию оригинальных файлов.
Необходимо, чтобы в файле /usr/oinstall/runInstaller переменной THREADS_FLAG было присвоено значение green, а не native.
# cd /usr/oinstall
# sed -i .orig -e "sTHREADS_FLAG=nativeTHREADS_FLAG=greeng" runInstaller
Теперь отредактируем файл /usr/oinstall/install/oraparam.ini, заменив строку JRE_LOCATION=../stage/Components/oracle.swd.jre/1.1.8/1/DataFiles/Expanded/linux на JRE_LOCATION=/usr/local/jre118_v3/linux
# cd install
# sed -i .orig -e "s/././stage/Components/oracle/.swd/.jre/1/.1/.8/1/DataFiles/Expanded/linux/usr/local/jre118_v3/linuxg" oraparam.ini
Конечно, не обязательно применять для изменения строк sed, Вы можете исправить файлы в любом удобном для Вас текстовом редакторе.
14. Распаковываем кумулятивный патч
Распаковываем в директорию /usr/oinstall/patch, которая появилась после распаковки дистрибутива Oracle8i, кумулятивный патч, находящийся в файле p2376472_8174_LINUX.zip. Файл zip-архива содержит в себе два файла: lnx32_8174_patchset.tar и README.html.
# cd /usr/oinstall
# unzip p2376472_8174_LINUX.zip
# cd patch
# tar -xvf ../lnx32_8174_patchset.tar
# rm ../lnx32_8174_patchset.tar
Прочтите файл README.html, чтобы быть в курсе того, что исправляет данный патч.
15. Создаем группы dba и oinstall
Создаем группы dba c GID 94 и oinstall c GID 95.
# pw groupadd -n dba -g 94
# pw groupadd -n oinstall -g 95
16. Создаем пользователя oracle и назначаем ему пароль
Создаем пользователя oracle c UID 94 и помещаем его в группы dba, oinstall и wheel, а командный интерпретатор дадим /compat/linux/bin/bash.
# pw useradd -n oracle -u 94 -c "Oracle Daemon" -d /usr/oracle -s /compat/linux/bin/bash -g dba -G oinstall,wheel
В группу wheel мы помещаем пользователя oracle, чтобы обеспечить небольшой комфорт при инсталляции. Во время установки будут периодически требоваться права суперпользователя, поэтому надо разрешить пользователю oracle выполнять команду su для получения прав суперпользователя. Получать права суперпользователя с помощью команды su, могут только члены группы wheel, поэтому нам и необходимо сделать на время инсталляции, пользователя oracle членом этой группы.
Можно конечно выполнять команды, требующие прав суперпользователя, непосредственно войдя в систему суперпользователем с другой консоли, но на мой взгляд, команда su выполненная в окне xterm более комфортна, так как все на одном экране в X Window System и все под рукой, а это значит меньше шансов сделать неверные действия. :-)
Когда установка будет закончена, мы уберем пользователя oracle из группы wheel. А пока назначаем пароль для пользователя oracle. Не стоит пренебрегать мерами безопасности, поэтому не надо вводить пустой или легко подбираемый пароль пользователю oracle.
# passwd oracle
17. Создаем директорию для установки Oracle8i.
Мы будем устанавливать Oracle8i в соответствии с рекомендациями Optimal Flexible Architecture (OFA). Я думаю не стоит игнорировать эти рекомендации, практика эксплуатации продуктов Oracle показывает, что в будущем это позволит эффективно использовать и обновлять их, а также гибко управлять постоянно растущими объемами информации. Если Вы еще не знаете, что такое OFA, то документация, идущая вместе с дистрибутивом Oracle8i, поможет Вам в этом разобраться.
Согласно рекомендации желательно, чтобы установка производилась на отдельную файловую систему, к тому же желательно, чтобы эта файловая система была расположена на отдельном диске и примонтирована в точку монтирования, расположенную в корне. Вот мы сейчас и создадим эту точку монтирования.
# mkdir /m01
# chmod 0775 /m01
# chown oracle:oinstall /m01
Дальше в этом пункте статьи пути тех, у кого есть возможность создания отдельной файловой системы и тех, у кого такой возможности пока нет, на время разойдутся.
Если у Вас есть неразмеченное место, то создайте новую файловую систему UFS, размером не меньше 2 ГБ. Описание процесса создания новой файловой системы выходит за рамки этой статьи, Вы должны выполнить это самостоятельно. После создания файловой системы запишем информацию о новой файловой системе в файл /etc/fstab, с точкой монтирования /m01.
# echo "/dev/device /m01 ufs rw 2 2" >> /etc/fstab
На место /dev/device, Вы должны подставить файл устройства партиции новой файловой системы!
Теперь надо примонтировать новую файловую систему и создать в ней директорию app.
# mount /m01
# mkdir /m01/app
# chmod 0775 /m01/app
# chown oracle:oinstall /m01/app
Вот и все, можете переходить к следующему пункту статьи, дальше будут рекомендации для тех, у кого нет возможности создания дополнительной файловой системы.
Если возможности для создания новой файловой системы нет, в связи с отсутствием неразмеченного места на дисках, то придется пойти другим путем, смонтируем директорию /compat/linux/m01 в директорию /m01, в этом нам поможет замечательная команда mount_null на FreeBSD-4.x или команда mount_nullfs на FreeBSD-5.x.
На FreeBSD-4.x выполняем:
# echo "/compat/linux/m01 /m01 null rw 0 0" >> /etc/fstab
На FreeBSD-5.x выполняем:
# echo "/compat/linux/m01 /m01 nullfs rw 0 0" >> /etc/fstab
Остальные команды будут одинаковы, как для FreeBSD-4.x, так и для FreeBSD-5.x.
# mkdir /compat/linux/m01 /compat/linux/m01/app
# chmod -R 0775 /compat/linux/m01
# chown -R oracle:oinstall /compat/linux/m01
# mount /m01
Сделайте именно так, как рекомендовано, смонтируйте директорию /compat/linux/m01 в директорию /m01. Не делайте /m01 символической ссылкой на директорию /compat/linux/m01. Если Вас интересует почему, то рекомендую почитать, как и почему работают Linux-приложения на FreeBSD, а потом посмотреть, какой размер корневой файловой системы у Вашей FreeBSD. Вероятно, если Вы устанавливали FreeBSD в здравом уме, то это 192 МБ? Ну максимум 256 МБ? Этого очень мало для установки Oracle8i. :-) Установщик Oracle8i получит именно эту информацию, о файловой системе в которой расположена директория /m01, и откажется устанавливать туда что-либо. Поэтому мы и смонтировали директорию в директорию. Теперь для Вашей системы в директории /m01 отдельная файловая система.
Потом, когда Вы обзаведетесь дополнительным диском и создадите на нем отдельную файловую систему, будет достаточно соответствующе отредактировать /etc/fstab, смонтировать эту файловую систему в /m01 и перенести содержимое /compat/linux/m01 в /m01, а директорию /compat/linux/m01 удалить. Возможно, при этом Вы первый раз испытаете преимущество OFA. ;-)
18. Создаем домашнюю директорию для пользователя oracle
Создаем домашнюю директорию для пользователя oracle.
# mkdir /usr/oracle
# cd /usr/oracle
В любом текстовом редакторе наберите БЕЗ ОШИБОК текстовый файл с содержимым приведенным ниже, и сохраните этот файл как /usr/oracle/.profile
ORACLE_BASE=/m01/appORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7ORACLE_DOC=$ORACLE_HOME/docORACLE_SID=OSIDexport ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOCNLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1#NLS_LANG=AMERICAN_CIS.UTF8#NLS_LANG=AMERICAN_CIS.CL8ISO8859P5#NLS_LANG=AMERICAN_CIS.CL8MACCYRILLIC#NLS_LANG=AMERICAN_CIS.CL8MSWIN1251#NLS_LANG=AMERICAN_CIS.CL8KOI8RORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/dataORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataLD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/libexport NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATHJRE_LOCATION=/usr/local/jre118_v3PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503TMPDIR=/var/tmpPATH=$PATH:$ORACLE_HOME/binexport JRE_LOCATION PERL5LIB TMPDIR PATHumask 022unset LANGunset LC_ALL
Если Вы собираетесь использовать систему управления реляционной базой данных (СУРБД) Oracle8i на территории России, то трудность в понимании этого файла, видимо, вызовет только значение $NLS_LANG. Уж в чем "повезло" русским, так это с количеством различных наборов символов. :-) Поэтому маленькое разъяснение не помешает.
Переменная окружения $NLS_LANG принимает значения LANGUAGE_TERRITORY.CHARACTERSET, где LANGUAGE - указывает на язык сообщений; TERRITORY - указывает, как нужно представлять даты, разделители и т. п., а также определяет сортировку по умолчанию; CHARACTERSET - указывает язык, в котором работает клиент и желает видеть и вводить данные.
Для того чтобы СУРБД Oracle8i выдавала сообщения на русском языке можно определить значение LANGUAGE равным RUSSIAN.
Значение TERRITORY для стран СНГ равно CIS. Сортировку по умолчанию можно переопределить, с помощью переменной окружения $NLS_SORT.
Значение CHARACTERSET для русских кодировок может принимать значения: CL8ISO8859P5, RU8PC866, RU8BESTA, RU8PC855, CL8MACCYRILLIC, CL8MACCYRILLICS, CL8MSWIN1251, CL8KOI8R, UTF8.
Примечание: В случае если Вы собираетесь использовать Oracle Internet Directory (OID), то Ваш выбор должен обязательно остановиться на UTF8.
19. Создаем файл /usr/oracle/root
В текстовом редакторе наберите текст, приведенный ниже, и сохраните его как файл /usr/oracle/root.
#!
/bin/sh# Переходим в директорию $ORACLE_HOME и делаем копию файла root.shcd $ORACLE_HOMEcp root.sh root.sh.orig# Вносим исправления в файл root.shsed -e 's/bin/chown/usr/sbin/chowng' root.sh.orig / sed -e 's/usr/bin/test/bin/testg' / sed -e 's/bin/awk/usr/bin/awkg' / sed -e 's/bin/grep/usr/bin/grepg' / sed -e 's/usr/local/bin/sed/usr/bin/sedg' / sed -e 'sRMF=/bin/rm -fRMF="/bin/rm -f"g' / sed -e "s) '{print /$1}/`) '{print /$1}'/`g" > root.sh# Удаляем файл root.sh.origrm root.sh.orig# Переходим в $ORACLE_HOME/bin и вносим изменения в netasst и в netcacd $ORACLE_HOME/bincp -p netasst netasst.origcp -p netca netca.origsed -e 's/$JRE -classpath/$JRE -native -classpathg' netasst.orig > netasstsed -e 's/$JRE -classpath/$JRE -native -classpathg' netca.orig > netca# Вносим исправления во все файлы сообщений СУРБД Oracle8i отвечающих за сообщения на русском языкеecho 'echo $1cp -p $1 $1.origprintf "/003/014/043/011/023/017/043/043/040/044/020/040/000/000/000/000" > $1dd if=$1.orig of=$1 bs=16 seek=1 skip=1' > /tmp/$$.ru.msb.shfind $ORACLE_HOME -follow -name "*ru.msb" -exec /bin/sh /tmp/$$.ru.msb.sh {} ";"rm /tmp/$$.ru.msb.sh
Этот файл, как и пакет procps-2.0.4-2.i386.rpm, очень сильно повлияет на установщик Oracle8i, чтобы обеспечить его нормальную работу.
Во время установки Oracle Universal Installer будет просить Вас запустить файл $ORACLE_HOME/root.sh, который содержит неправильные пути к командам с точки зрения FreeBSD, и две синтаксические ошибки с точки зрения командного интерпретатора sh. Вот перед запуском $ORACLE_HOME/root.sh, Вы и запустите /usr/oinstall/root, который исправит все эти ошибки.
Не путайте скрипт $ORACLE_HOME/orainstRoot.sh, который Вам тоже еще предстоит запускать, и скрипт $ORACLE_HOME/root.sh, это два разных файла!
Изменения в netasst и в netca, которые также вносит /usr/oracle/root, делаются для того, чтобы обеспечить нормальную работу Net8 Configuration Assistant на FreeBSD. Скрипты netasst и netca во время установки, запуская JRE без ключа -native, приводят к неверной работе Net8 Configuration Assistant, что влечет за собой зависание установщика Oracle8i. Следовательно, необходимо позаботиться, чтобы этого не произошло, что и сделает /usr/oinstall/root.
В файлах с расширением *.msb сохранены сообщения от различных компонентов СУРБД Oracle8i, которые будут выдаваться во время работы с СУРБД. Изменения в файлы *ru.msb вносятся для того, чтобы сообщения на русском языке, выдаваемые СУРБД Oracle8i во время ее работы, правильно перекодировались на стороне клиента. То есть, если Вы решите назначить переменную окружения $NLS_LANG c LANGUAGE равной RUSSIAN, то СУРБД будет разговаривать на русском языке, но без изменения файлов *ru.msb, эти сообщения будут в неверной кодировке. СУРБД Oracle8i может разговаривать на самых различных языках, достигается это за счет того, что СУРБД в зависимости от значения LANGUAGE в переменной окружения $NLS_LANG использует для сообщений те msb-файлы, которые предназначены для этого языка. Если на какой-то компонент СУРБД Oracle8i отсутствуют msb-файлы с требуемым языком, то СУРБД игнорирует значение LANGUAGE в переменной окружения $NLS_LANG и использует для выдачи сообщений msb-файлы для английского языка. Первые 16 байт каждого msb-файла несут информацию о кодировке в которой сохранены сообщения в самом msb-файле, и файлы *ru.msb отвечающие за сообщения на русском языке, здесь не исключение. Да вот беда, набор символов в России не один, и даже не два... :-) И вот с русскими msb-файлами, приключилась неприятная история в недрах корпорации Oracle. В файлах, *ru.msb первые 16 байт, должны иметь следующую последовательность:
для CP1251
03 0C 23 0D 13 17 09 0E 1C 1D 20 1C 00 00 00 00
для ISO8859-5
03 0C 23 09 13 0F 23 23 20 24 10 20 00 00 00 00
для CP866
12 15 23 10 03 23 21 21 00 00 00 00 00 00 00 00
Сообщения перекодируются из кодировки msb-файла в кодировку, указанную в части CHARACTERSET, переменной окружения $NLS_LANG, и если заголовок msb-файла неверный, то вместо нужного текста идет "китайская грамота". Именно это и произошло с файлами *ru.msb, сообщения в этих файлах сохранены в кодировке ISO8859-5, а первые 16 байт говорят, что сообщения в CP1251. Поэтому скрипт /usr/oracle/root и предусматривает изменение в файлах *ru.msb первых 16 байт, записывая в начало каждого русского msb-файла правильную последовательность байт, которые информируют СУРБД Oracle8i, что исходные сообщения в кодировке ISO8859-5. Даже если Вы не собираетесь устанавливать поддержку русского языка, то как минимум один msb-файл для каждого языка все равно будет установлен в директорию $ORACLE_HOME/oracore/mesg, в том числе и один неправильный msb-файл русских сообщений.
Однако до момента, когда будет нужно запустить /usr/oinstall/root, придется еще поработать, поэтому пока забудем про этот файл.
20. Передадим директорию /usr/oracle пользователю oracle
Передаем директорию /usr/oracle и все ее содержимое в распоряжение пользователю oracle.
# chmod 0755 /usr/oracle
# chmod 0644 /usr/oracle/.profile
# chmod 0644 /usr/oracle/root
# chown -R oracle:dba /usr/oracle
21. Создаем конфигурацию нового ядра
Создаем конфигурацию нового ядра с поддержкой System V. Необходимо, чтобы в новой конфигурации обязательно присутствовали следующие параметры:
maxusers 512options NBUF=2048options MAXDSIZ="(1024*1024*1024)"options MAXSSIZ="(1024*1024*1024)"options DFLDSIZ="(1024*1024*1024)"# System V shared memory and tunable parametersoptions SYSVSHM # include support for shared memoryoptions SHMMAXPGS=65536 # max amount of shared memory pages (4k on i386)options SHMMIN=2 # min shared memory segment size (bytes)options SHMMNI=256 # max number of shared memory identifiersoptions SHMSEG=256 # max shared memory segments per process# System V semaphores and tunable parametersoptions SYSVSEM # include support for semaphoresoptions SEMMAP=512 # amount of entries in semaphore mapoptions SEMMNI=512 # number of semaphore identifiers in the systemoptions SEMUME=512 # max number of undo entries per processoptions SEMMNS=1024 # number of semaphores in the systemoptions SEMMNU=512 # number of undo structures in the systemoptions SEMMSL=256 # max number of semaphores per idoptions SEMOPM=256 # max number of Operations per semop call# System V message queues and tunable parametersoptions SYSVMSG # include support for message queuesoptions MSGMNB=8192 # max characters per message queueoptions MSGMNI=256 # max number of message queue identifiersoptions MSGSEG=8192 # max number of message segments in the systemoptions MSGSSZ=16 # size of a message segment MUST be power of 2options MSGTQL=128 # max amount of messages in the system
Примечание: На FreeBSD-5.x опциям MAXDSIZ, MAXSSIZ и DFLDSIZ необходимо присвоить значения следующим образом:
options MAXDSIZ=(1024UL*1024*1024)options MAXSSIZ=(1024UL*1024*1024)options DFLDSIZ=(1024UL*1024*1024)
Для названия конфигурации ядра выберем букву "K", от слова "kernel", и текущую дату в формате год, месяц, день (YYYYMMDD):
# cd /usr/src/sys/i386/conf
# cp GENERIC K20021204
Правим конфигурацию /usr/src/sys/i386/conf/K20021204 в любом удобном для Вас редакторе, добавляя нужное и удаляя все не нужное. Но опции, приведенные выше, должны присутствовать обязательно!
СУРБД Oracle требовательна к количеству разделяемой системной памяти, значение которой задается опцией ядра SHMMAX. Совокупность процессов СУРБД Oracle и структур данных, размещенных в разделяемой системной области, называется экземпляром. Согласно рекомендациям по использованию СУРБД Oracle8i, в ядре необходимо выставить опцию ядра SHMMAX в байтах в размере общего объема физической оперативной памяти, умноженной на коэффициент, равный 0.5. Если значение SHMMAX будет не достаточно, то экземпляр Oracle8i просто не будет создан! Но в ядре FreeBSD данная опция ядра зависит от опции SHMMAXPGS по формуле:
SHMMAX = SHMMAXPGS * PAGE_SIZE + 1
Где PAGE_SIZE равно 4096 Б для i386, поэтому, чтобы сделать как рекомендовано в документации по Oracle8i, необходимо значение SHMMAXPGS вычислить по формуле,
SHMMAXPGS = k * RAM * 1024 / PAGE_SIZE
Где RAM - физическая оперативная память в МБ; k - коэффициент, равный 0.5; PAGE_SIZE - размер одной страницы в КБ, PAGE_SIZE = 4 КБ для i386.
Например, для машины с памятью 512 МБ, SHMMAXPGS = 0.5 * 512 * 1024 / 4 = 65536.
В случае, если предполагается, что СУРБД Oracle, будет работать на специально выделенном для этого сервере, и кроме нее никаких других серьезных сервисов запущено не будет, то коэффициент k, можно увеличивать до 0.75, это 3/4 от физической оперативной памяти.
Для того, чтобы понять какое влияние оказывают некоторые значения опций ядра на работу СУРБД Oracle, обязательно ознакомьтесь с документацией, которая идет вместе с дистрибутивом Oracle8i.
22. Компилируем ядро с новой конфигурацией
Компилируем ядро с новой конфигурацией (K20021204). Если что-то не пойдет при сборке ядра, внимательно изучите файл /usr/src/buildkernel.log и после этого ищите ошибки в Вашей конфигурации ядра.
# cd /usr/src
# make buildkernel KERNCONF=K20021204 & tee buildkernel.log
23. Устанавливаем новое ядро
Устанавливаем новое ядро. Результат установки будет сохранен в файле /usr/src/installkernel.log
# cd /usr/src
# make installkernel KERNCONF=K20021204 & tee installkernel.log
24. Удаляем файлы buildkernel.log и installkernel.log
Если компиляция и установка ядра выполнены успешно, то файлы buildkernel.log и installkernel.log можно удалить.
# rm /usr/src/buildkernel.log
# rm /usr/src/installkernel.log
25. Директории /tmp, /usr/tmp, /var/tmp
Сделаем так, чтобы /tmp и /usr/tmp указывали на /var/tmp. Перед тем, как начать манипуляции с директорией /tmp, завершите все процессы в системе, которые создали в ней свои временные файлы. То же самое касается и /usr/tmp. Как правило, /tmp это отдельная файловая система с весьма ограниченным размером, если у Вас именно так, то размонтируйте ее, удалите директорию /tmp и закомментируйте файловую систему /tmp в файле /etc/fstab или укажите другую точку монтирования для освободившейся файловой системы. ОБЯЗАТЕЛЬНО ОТРЕДАКТИРУЙТЕ /etc/fstab!
Если у Вас это обычная директория, то команду umount выполнять не надо и править /etc/fstab, естественно вам не придется.
# umount /tmp
Удаляем /tmp и /usr/tmp
# rm -rf /tmp
# rm -rf /usr/tmp
Создаем символические ссылки на /var/tmp
# ln -s /var/tmp /tmp
# ln -s /var/tmp /usr/tmp
Гарантируем права 0777 на директорию /var/tmp, а владельцем этой директории назначим суперпользователя и группу wheel.
# chmod 0777 /var/tmp
# chown root:wheel /var/tmp
26. Перезагрузка системы
Итак, Вы подготовили систему для установки Oracle8i - установили все необходимые программы и подготовили дистрибутив Oracle8i, внесли изменения в некоторые конфигурационные файлы системы, установили новое ядро, следовательно, необходимо перегрузиться.
# reboot
В случае, если Ваше новое ядро откажется загружаться, обратитесь к "FreeBSD Handbook", чтобы выяснить как восстановить и загрузить старое ядро, там это подробно расписано. Затем ищите ошибки в своей конфигурации ядра, исправляйте их и собирайте ядро заново (см. п. 21, п. 22 и п. 23).
Если Ваша система загрузилась с новым ядром, то можете поздравить себя - половину пути Вы уже прошли.
Новые опции ядра можно посмотреть, используя команду sysctl.
# sysctl -a grep kern.ipc more
27. Останавливаем веб-сервер Apache
Если у Вас установлен и запущен веб-сервер Apache, лучше его пока остановить!
# [ -r /var/run/httpd.pid ] && /usr/local/sbin/apachectl stop
Возможно, Ваш apachectl находится в другой директории, а файл процесса находится в другом месте, выясните это сами и остановите Apache.
Сразу оговорюсь, если Вы в дальнейшем собираетесь использовать веб-сервер поставляемый с Oracle8i, то тот Apache которой у Вас уже есть в системе лучше не запускать, когда работает веб-сервер Oracle8i. Или убирайте из своей системы Ваш Apache вообще, или сделайте так, чтобы он не мог стартовать автоматически при перезагрузке системы. То же самое относится и к OpenLDAP в случае использования Oracle Internet Directory (OID).
28. Запускаем X Window System
Теперь необходимо войти в X Window System под пользователем oracle. В качестве оконного менеджера для пользователя oracle сойдет twm. К тому же, twm потребляет очень мало системных ресурсов, которые очень сильно пригодятся при установке Oracle8i.
В своей системе я использую xdm для входа в X Window System на 8-ой виртуальной консоли, поэтому мне было достаточно нажать Alt+F9, а затем ввести логин и пароль пользователя oracle.
29. Читаем переменные окружения пользователя oracle
Запустите xterm, если он не запустился у Вас автоматически, и выполните в нем команду bash с ключем -login.
% bash -login
После выполнения данной команды приглашение в командной строке должно смениться, показывая пользователя oracle, имя хоста и текущую директорию. Чтобы удостовериться, что все переменные окружения прочитаны из файла /usr/oracle/.profile, выполните в этом же окне xterm команду set и убедитесь, что все корректно.
% set more
30. Откроем окно xterm для суперпользователя
Запускаем еще одно окно xterm, из того, где мы выполняли bash -login. Запуск именно из этого окна необходим для того, чтобы суперпользователю достались все переменные окружения пользователя oracle. Наличие этих переменных в окружении суперпользователя, в свою очередь избавит Вас от утомительного набирания путей к командам, выполнение которых будет требовать установщик Oracle8i. :-)
% xterm &
Теперь в новом окне xterm выполним команду su. Вам будет предложено ввести пароль суперпользователя, после ввода которого Вы получите командный интерпретатор на правах суперпользователя.
% su
Мы создали этот сеанс суперпользователя вовсе не из праздных целей, он нам еще очень сильно пригодится во время установки Oracle8i. Теперь на время забудем про это окно xterm и переключимся обратно в окно xterm пользователя oracle.
31. Запускаем установщик Oracle8i
% cd /usr/oinstall
% ./runInstaller
Запуск установщика Oracle8i на FreeBSD сравним, пожалуй, с запуском двигателя машины, когда температура окружающей среды минус 30 градусов по Цельсию и ниже. С первого раза может и не завестись. ;-) Даже если все рекомендации, предложенные выше, выполнены правильно, то иногда, хотя и очень редко, установщик Oracle8i может зависнуть при прорисовке заставки. Это проявляется в виде прямоугольника серого цвета, появляющегося на экране, с надписью "Loading...", после чего можно подождать, и если заставка так и не прорисовывается, то вернитесь в окно xterm, с помощью команды ps выясните номера процессов runInstaller и jre, и завершите их при помощи команды kill.
% ps grep "jre/runInstaller"
% kill PID PID
Затем удалите в директории /tmp все файлы и директории, которые успел создать установщик Oracle8i. Имена файлов и директорий, которые необходимо удалить, можно выяснить по владельцу этих файлов. Они будут принадлежать пользователю oracle. Для удаления Вы можете выполнить следующее:
% cd /tmp && find -d . -user oracle /( -type f -or -type d /) -delete -print
Затем снова перейдите в директорию /usr/oinstall и запустите скрипт runInstaller. Со второго раза установщик, как правило, запускается. В крайнем случае, повторите это в третий раз. Логического объяснения этому явлению я пока найти не могу, однако и не считаю это мистикой, хотя очень на то похоже. Эта проблема встречается не только на FreeBSD, на некоторых дистрибутивах Linux полностью аналогичная ситуация. Условия для запуска в первый и второй раз абсолютно равные, но такая вот чертовщина, иногда случается.
Если ни со второго, ни с третьего раза, установщик Oracle8i так и не запустился, то видимо проблема не в "запуске двигателя при сильном морозе", возвращайтесь к началу статьи и последовательно проверяйте, где Вы ошиблись.
Ну а если Вы увидели сначала заставку Oracle Universal Installer, а затем первый экран с приветствием, значит все замечательно. Господа из Oracle Corporation, видимо предчувствовали, что любой системный администратор будет добираться до этого экрана очень долго, поэтому и решили для начала поздороваться с Вами, чтобы разрядить напряженную обстановку и немного расслабить Вас. ;-)
Рис. 1. Первый экран, до которого мы так долго добирались!
:-)
Однако, не будем здесь задерживаться очень долго, поэтому щелкаем мышью по кнопке Next.
32. Отвечаем на вопросы Oracle Universal Installer
На втором экране Вас попросят вести пути (File Locations). Пути к тому, что Вы собираетесь устанавливать (Source) и куда (Destination). Эти пути уже заполнены, значение того, что мы собираемся устанавливать взято из переменной $SOURCE назначенной в файле /usr/oinstall/install/oraparam.ini, а значение куда устанавливать, взято из переменной окружения $ORACLE_HOME, пользователя oracle. Так как в полях стоят нужные для нас значения, то переходим к следующему экрану, с помощью кнопки Next.
Далее Вас попросят ввести группу пользователей (UNIX Group Name) на Вашей машине, которые будут иметь право обновлять продукты Oracle. Введем группу oinstall и щелкнем мышью по кнопке Next.
После этого Oracle Universal Installer понадобятся права суперпользователя для запуска скрипта orainstRoot.sh в директории, на которую указывает $ORACLE_HOME. Запуск этого скрипта необходим, чтобы создать файл /etc/oraInst.loc. В этом файле будет сохранена информация о группе, которая имеет право обновлять продукты Oracle на Вашей системе, и путь к директории, где будет храниться информация об установленных продуктах Oracle.
Рис. 2. Oracle Universal Installer просит Вас запустить orainstRoot.sh
Переключимся в окно xterm, где у нас запущен командный интерпретатор с правами суперпользователя, и выполним следующее:
# $ORACLE_HOME/orainstRoot.sh
# ln -s /etc/oraInst.loc /compat/linux/etc/oraInst.loc
Теперь вернемся к установщику Oracle8i и нажмем кнопку Retry для продолжения инсталляции.
Далее установщик спросит Вас, какой продукт Вы будете устанавливать. Выбираем Oracle8i Enterprise Edition 8.1.7.0.1 и продолжаем с помощью кнопки Next.
Следующий вопрос коснется типа установки. Если Вам не нужна различная языковая поддержка для компонентов СУРБД Oracle8i, то отметим пункт типичной установки - Typical (837 MB) и нажмем Next.
Если же Вам необходимо, чтобы компоненты СУРБД умели выдавать сообщения на различных языках, но Вы не желаете разбираться с выборочной установкой - Custom, то можно договориться с установщиком Oracle8i на счет языков и при типичной установке. Для этого используем выборочную установку, отмечаем - Custom и нажимаем Next, в результате чего будет предложено выбрать различные компоненты и языки. Нажимаем на кнопку Product Languages... и добавляем необходимые языки. После окончания выбора языков нужно вернуться с помощью кнопки Previous в предыдущий экран. Теперь отметим пункт типичной установки - Typical (837 MB) и нажмем Next.
Если Вы точно знаете и понимаете, что Вам надо от СУРБД, то можете произвести выборочную установку Custom или минимальную Minimal (677 MB), но дальше в статье рассматривается типичная установка.
После небольшой по времени сборки сведений об устанавливаемых компонентах, Oracle Universal Installer попросит Вас ввести путь к JDK. По умолчанию он предложит путь /usr/local/java, согласитесь с предложенным путем сразу, нажав Next. Помните, в п. 11 мы делали символическую ссылку /compat/linux/usr/local/java, вот именно эту ссылку мы сейчас и указали установщику Oracle8i, ведь Linux-приложениям, будет казаться, что директория java лежит в /usr/local.
На следующем экране Вам придется заполнить поля Global Database Name и SID. Так как SID подставился автоматически из переменной окружения $ORACLE_SID, Вам остается только ввести глобальное имя базы данных (Global Database Name). Прежде чем ввести глобальное имя базы данных хотелось бы напомнить, что в СУРБД Oracle рекомендуется использовать в имени базы данных соглашения об именах, которые соответствуют стандартным соглашениям, принятых для доменов Internet. В соответствии с этим, имя базы данных может состоять из нескольких частей разделенных точками. Имя базы данных читается справа налево, а крайняя правая часть обозначается как world. Эту часть совсем не обязательно указывать при работе с Net8, но для обеспечения совместимости с прежними версиями SQL*Net лучше указать. Крайняя левая часть содержит непосредственно имя базы данных. Т. е., например, имя базы данных, расположенной в зоне dhs.net.ru, будет выглядеть как DB.dhs.net.ru.world.
Руководствуясь вышесказанным, введите Ваше имя для будущей базы данных и перейдите к следующему экрану, используя все ту же кнопку Next.
Так как любой "допрос" когда-нибудь заканчивается, этот тоже наконец-то закончился. Oracle Universal Installer спросил у Вас на всех предыдущих этапах с момента своего запуска все, что ему было непонятно. Поэтому теперь он предоставил Вам отчет о том, что, куда и сколько, он собирается установить, послушно ожидая, когда Вы нажмете кнопку Install.
Рис. 3. Затишье перед захватом практически всех ресурсов машины. :-)
Ну что же, внимательно изучив предоставленный нам отчет, можно нажать Install.
Индикатор установки компонентов должен медленно поползти, отображая в процентах процесс прохождения установки. Владельцы PIII-500/RAM 256 МБ могут смело отправиться на прогулку по компьютерным салонам, чтобы присмотреть, чего бы себе прикупить. Времени у них предостаточно. ;-) А вот владельцы PIV-1500/RAM 512 МБ, видимо, обойдутся только парой чашек с чаем, у них все пройдет гораздо быстрее. Но все равно не торопитесь, чай можно пить медленно. ;-)
Если Вы не хотите идти на прогулку по компьютерным салонам, и Вам не хочется чаю, то можете запустить еще одно окно xterm и выполнить в нем команду top, чтобы понаблюдать, как безжалостно Oracle Universal Installer поглощает ресурсы Вашей машины.
33. Завершение процесса установки
Итак, процесс установки почти завершен и установщик Oracle8i просит Вас запустить на правах суперпользователя скрипт root.sh, находящийся в директории, на которую указывает переменная окружения $ORACLE_HOME.
Но не стоит торопиться делать то, что просит установщик перед тем, как запустить этот скрипт, необходимо выполнить некоторые действия для того, чтобы установка завершилась удачно.
Рис. 4. Oracle Universal Installer просит Вас запустить root.sh
34. Подменяем JRE
Подменяем JRE, которая идет вместе с дистрибутивом Oracle8i, на JRE от blackdown.org.
Необходимо переключиться в окно xterm, из которого Вы запустили установщик Oracle8i. В этом окне не будет видно приглашения командной строки, ведь Вы запустили из этого окна скрипт /usr/oinstall/runInstaller, однако этот скрипт уже отработал запустив установщик Oracle8i, поэтому, чтобы увидеть приглашение нажмите клавишу Enter и выполните следующие команды:
% cd $ORACLE_BASE/jre
% mv 1.1.8 1.1.8.orig
% ln -s /compat/linux/usr/local/jre118_v3 1.1.8
Некоторые считают, что достаточно изменить значение символической ссылки $ORACLE_HOME/JRE так, чтобы она указывала на JRE от blackdown.org, и этим можно решить проблему, чтобы Oracle8i никогда не пользовался своей родной JRE. Однако, это не так!
Если заглянуть, например, в $ORACLE_HOME/bin/oemapp, то можно увидеть, что в этом скрипте, как и в некоторых других, в переменную окружения $PATH, заносится первый путь к директории $ORACLE_BASE/jre/1.1.8/bin, поэтому таким скриптам не важно, на что ссылается символическая ссылка $ORACLE_HOME/JRE. Они всегда будут запускать команду jre из $ORACLE_BASE/jre/1.1.8/bin, потому как в переменной окружения $PATH этот путь идет первым. Однако теперь мы оградили себя от этого, и создали надежную защиту от JRE, идущей вместе с дистрибутивом Oracle8i.
35. Применяем патчи, идущие вместе с дистрибутивом Oracle8i и запускаем /usr/oracle/root
Применяем патчи, идущие вместе с дистрибутивом Oracle8i, исправляющие ошибки 1538440 и 1542738.
Все из того же окна xterm, из которого мы запускали Oracle Universal Installer, выполним следующее:
% cd /usr/oinstall/patch/bug1538440 && TOP_PATCH_DIR=`pwd` /bin/sh README.1538440
% cd ../bug1542738 && /bin/sh README.1542738
Теперь удалим мусор, который появился после применения патчей.
% rm -v $ORACLE_HOME/bin/*O
% rm $ORACLE_HOME/lib/ldflagsO
Маска *O - это символ ASCII под номером 42 - символ звездочки, и символ ASCII под номером 79 - символ заглавной латинской буквы O, не ноль! В команде rm ldflagsO в конце тоже заглавная латинская буква O, а не ноль. Будьте осторожны с командой rm *O! Если Вы случайно не допишете O в командной строке и нажмете Enter, то... Надеюсь дальше объяснять не надо? ;-)
Теперь выполним /usr/oracle/root. Вы должны были создать этот файл в п. 19 - вот он Вам и пригодился. :-)
% /bin/sh /usr/oracle/root
36. Запуск root.sh от имени суперпользователя
Для запуска root.sh необходимы права суперпользователя, поэтому переключимся в окно xterm, в котором загружена оболочка на правах суперпользователя и запустим скрипт root.sh, находящийся в $ORACLE_HOME.
# $ORACLE_HOME/root.sh
После запуска скрипт попросит Вас ввести путь к директории, в которой будут размещены скрипты oraenv, coraenv и dbhome.
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Необходимо согласиться с предложенным путем - /usr/local/bin - просто нажав клавишу Enter.
О том, зачем нужны oraenv, coraenv и dbhome читайте в документации по Oracle8i.
Скрипт root.sh также во время своего выполнения создал файл /etc/oratab, но Oracle Database Configuration Assistant, который будет вскоре запущен, при создании базы данных будет искать этот файл в /compat/linux/etc, и естественно его там не найдет, если Вы не позаботитесь о создании символической ссылки на /etc/oratab. Поэтому создадим эту символическую ссылку.
# ln -s /etc/oratab /compat/linux/etc/oratab
При отсутствии ссылки Oracle Database Configuration Assistant, скажет Вам, что у него не хватает прав на запись в /etc/oratab в момент, когда индикатор процесса будет показывать 80% выполнения. На самом деле права на /etc/oratab у него есть. Просто он сделает попытку записать этот файл в директории /compat/linux/etc, где прав у него действительно нет. Поэтому мы, как заботливые родители, заботящиеся о своих несмышленых чадах, предупредили эту ошибку. :-)
Теперь можно вернуться к установщику Oracle8i и нажать кнопку OK.
37. Configuration Tools или черная дыра от Oracle Corporation
Ну вот, мы и добрались до того злосчастного пункта установки, на котором спотыкается добрая половина дистрибутивов Linux, и имя этому пункту - Configuration Tools. Уж поверьте, на некоторых дистрибутивах Linux установка происходит не менее изысканым способом, чем на FreeBSD. Как некоторые говорят, установка Oracle8i на Linux - это искусство!
:-)
Если Вы все делали, как Вам было предложено, то должен запуститься Net8 Configuration Assistant.
Рис. 5. Net8 Configuration Assistant
Выбираем типичную конфигурацию - отметим пункт Perform typical configuration и нажмем Next. В будущем читайте документацию по Oracle8i, о том что такое Net8, и с чем это едят.
Oracle Database Configuration Assistant запустится сразу же после того, как отработает Net8 Configuration Assistant и приступит к созданию базы данных. Процесс создания базы данных будет отображен на индикаторе, и скорость его выполнения сильно зависит от конфигурации Вашей машины. Когда индикатор достигнет 100%, Вам будет выдано сообщение о том, что создание базы данных завершено. В этом сообщении также будет некоторая информация о Вашей базе данных - глобальное имя базы данных, системный идентификатор базы данных (SID), пароли для аккаунтов SYS и SYSTEM. В будущем, когда Вы будете самоcтоятельно разбираться со своей базой данных, необходимо сменить эти пароли в целях безопасности! А пока запомните эти пароли и нажмите кнопку OK.
Рис. 6. Oracle Database Configuration Assistant создал базу данных
Третий пункт на экране Configuration Tools - Starting web server in non-SSL mode on port 7777. Если предыдущее два пункта проходили для Вас визуально, то здесь Вы ничего не увидите. Установщик Oracle8i сделает все без единого вопроса к Вам. В результате этого Вы получите запущенный веб-сервер на порту 7777.
В итоге Вы увидите последний экран об окончании установки! Ну вот, самая сложная часть уже позади, но не торопитесь выходить из установщика. У нас ведь остался еще кумулятивный патч.
38. Останавливаем экземпляр Oracle8i
Прежде чем мы начнем устанавливать кумулятивный патч для Oracle8i, необходимо остановить экземляр Oracle8i, который был старательно запущен Oracle Universal Installer на этапе конфигурирования. Да, да... Не удивляйтесь, но на Вашей машине уже запущены, как минимум, веб-сервер, экземпляр Oracle8i и Net8 listener.
Для начала подправим файл /etc/oratab, иначе остановить экземпляр Oracle8i не получится. Модифицируем в нем всего одну строку, несущую информацию об экземпляре Oracle8i. Заменим в этой строке :N, на :Y.
Переключаемся в xterm с командным интерпретатором суперпользователя и выполняем следующее,
# sed -i .orig -e "s"$ORACLE_SID"/:"$ORACLE_HOME"/:N"$ORACLE_SID"/:"$ORACLE_HOME"/:Yg" /etc/oratab
Теперь переключаемся в окно xterm, из которого мы запускали установщик Oracle8i, и останавливаем веб-сервер, экземпляр Oracle8i и Net8 listener.
% $ORACLE_HOME/Apache/Apache/bin/apachectl stop
% $ORACLE_HOME/bin/dbshut
% $ORACLE_HOME/bin/lsnrctl stop
Вот теперь можно приступить к установке кумулятивного патча.
39. Устанавливаем кумулятивный патч
Переключаемся в окно нашего "горячо любимого" Oracle Universal Installer, но вместо того, чтобы нажать желанную кнопку Exit, нажмем Next Install.
Установщик Oracle8i попросит Вас опять вести пути (File Locations). Пути к тому, что Вы собираетесь устанавливать (Source), и куда (Destination). Путь куда - содержимое $ORACLE_HOME, нас вполне устроит, а вот путь к тому, что мы собираемся устанавливать, придется изменить. Введем путь к кумулятивному патчу - /usr/oinstall/patch/stage/products.jar и нажмем Next.
После некоторых размышлений установщик Oracle8i выведет отчет такого же вида, какой Вы уже видели в п. 32. Можете его проанализировать, после чего нажать кнопку Install и немного отдохнуть, процесс установки небыстрый, как Вы наверное уже догадались из предыдущего опыта.
Как только установка патча будет завершена Oracle Universal Installer, сообщит Вам об этом. Можете глубоко вздохнуть и нажать Exit.
Теперь, после установки патча, необходимо убрать в директориях $ORACLE_HOME/bin и /tmp мусор. Переключаемся в окно xterm пользователя oracle и удаляем ненужные файлы.
% rm -v $ORACLE_HOME/bin/*O
% cd /tmp && find -d . -user oracle /( -type f -or -type d /) -delete -print
Маска *O - это символ ASCII под номером 42 - символ звездочки, и символ ASCII под номером 79 - символ заглавной латинской буквы O, не ноль!
Далее переключаемся в окно xterm с командным интерпретатором суперпользователя и лишаем пользователя oracle членства в группе wheel, оставляя его только в группах dba и oinstall.
# pw usermod -n oracle -G oinstall
Можете с помощью команды ps проверить, не осталось ли каких зависших процессов jre, если Вы старательно выполнили все рекомендации, предложенные в статье, то их не будет.
40. Пример скрипта для запуска экземпляра Oracle8i
Чтобы экземпляр Oracle8i стартовал каждый раз после перезагрузки системы автоматически, достаточно разместить небольшой скрипт в директории /usr/local/etc/rc.d. Пример такого скрипта приведен ниже, можете использовать его для обеспечения автоматического старта, а также для того, чтобы остановить (/usr/local/etc/rc.d/oracle.sh stop) и снова запустить (/usr/local/etc/rc.d/oracle.sh start) экземпляр Oracle8i в нужный Вам момент времени.
Пример 1. /usr/local/etc/rc.d/oracle.sh
#!/bin/shUSER=oracleumask 022unset LANGunset LC_ALLORACLE_BASE=/m01/appORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7ORACLE_DOC=$ORACLE_HOME/docORACLE_SID=OSIDexport ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOCNLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/dataORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataLD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/libexport NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATHJRE_LOCATION=/usr/local/jre118_v3PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503TMPDIR=/var/tmpPATH=$PATH:$ORACLE_HOME/binexport JRE_LOCATION PERL5LIB TMPDIR PATHcase "$1" instart) # Starting Oracle Net8 listener su -m $USER -c "$ORACLE_HOME/bin/lsnrctl start" # Starting Oracle database su -m $USER -c "/bin/sh $ORACLE_HOME/bin/dbstart" # Starting Apache server su -m $USER -c "$ORACLE_HOME/Apache/Apache/bin/apachectl start" # Starting Oracle Intellegent Agent # su -m $USER -c "$ORACLE_HOME/bin/lsnrctl dbsnmp_start" # Starting Oracle CManager # su -m $USER -c "$ORACLE_HOME/bin/cmctl start" ;;stop) # Shutting down Oracle CManager # su -m $USER -c "$ORACLE_HOME/bin/cmctl stop" # Shutting down Oracle Intellegent Agent # su -m $USER -c "$ORACLE_HOME/bin/lsnrctl dbsnmp_stop" # Shutting down Apache server su -m $USER -c "$ORACLE_HOME/Apache/Apache/bin/apachectl stop" # Shutting down Oracle database su -m $USER -c "/bin/sh $ORACLE_HOME/bin/dbshut" # Shutting down Oracle Net8 listener su -m $USER -c "$ORACLE_HOME/bin/lsnrctl stop" ;;*) echo "Usage: `basename $0` {startstop}" >&2 ;;esacexit 0
После создания скрипта наделяем его соответствующими правами для запуска.
# chmod 0555 /usr/local/etc/rc.d/oracle.sh
Теперь скрипт готов для работы.
41. Заключение
Ну вот и все закончилось. Или только начинается? ;-) Поздравляю Вас! Вы прошли огонь, воду и медные трубы. На этом мучения с установкой Oracle8i подошли к концу. Теперь Вы вероятно будете разбираться с его настройкой,
но это уже другая история.