Установка Oracle8i 8.1.7.4 на FreeBSD шаг за шагом

$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-утилит, которые будут доступны после установки. У меня это получилось, чего желаю и Вам! :-)


2. Закачаем все необходимые файлы для установки Oracle8i

Закачаем все необходимые файлы для установки Oracle8i и положим их в директорию /usr/oinstall, которую необходимо создать.

# mkdir /usr/oinstall # cd /usr/oinstall

Итак, нужны следующие файлы:


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 "s|THREADS_FLAG=native|THREADS_FLAG=green|g" 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/linux|g" 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/app ORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7 ORACLE_DOC=$ORACLE_HOME/doc ORACLE_SID=OSID export ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOC NLS_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.CL8KOI8R ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/data ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/lib export NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATH JRE_LOCATION=/usr/local/jre118_v3 PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503 TMPDIR=/var/tmp PATH=$PATH:$ORACLE_HOME/bin export JRE_LOCATION PERL5LIB TMPDIR PATH umask 022 unset LANG unset 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.sh cd $ORACLE_HOME cp root.sh root.sh.orig # Вносим исправления в файл root.sh sed -e 's|/bin/chown|/usr/sbin/chown|g' root.sh.orig \ | sed -e 's|/usr/bin/test|/bin/test|g' \ | sed -e 's|/bin/awk|/usr/bin/awk|g' \ | sed -e 's|/bin/grep|/usr/bin/grep|g' \ | sed -e 's|/usr/local/bin/sed|/usr/bin/sed|g' \ | sed -e 's|RMF=/bin/rm -f|RMF="/bin/rm -f"|g' \ | sed -e "s|) '{print \$1}\`|) '{print \$1}'\`|g" > root.sh # Удаляем файл root.sh.orig rm root.sh.orig # Переходим в $ORACLE_HOME/bin и вносим изменения в netasst и в netca cd $ORACLE_HOME/bin cp -p netasst netasst.orig cp -p netca netca.orig sed -e 's|\$JRE -classpath|\$JRE -native -classpath|g' netasst.orig > netasst sed -e 's|\$JRE -classpath|\$JRE -native -classpath|g' netca.orig > netca # Вносим исправления во все файлы сообщений СУРБД Oracle8i отвечающих за сообщения на русском языке echo 'echo $1 cp -p $1 $1.orig printf "\003\014\043\011\023\017\043\043\040\044\020\040\000\000\000\000" > $1 dd if=$1.orig of=$1 bs=16 seek=1 skip=1' > /tmp/$$.ru.msb.sh find $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 байт, должны иметь следующую последовательность:

Сообщения перекодируются из кодировки 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 512 options NBUF=2048 options MAXDSIZ="(1024*1024*1024)" options MAXSSIZ="(1024*1024*1024)" options DFLDSIZ="(1024*1024*1024)" # System V shared memory and tunable parameters options SYSVSHM # include support for shared memory options 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 identifiers options SHMSEG=256 # max shared memory segments per process # System V semaphores and tunable parameters options SYSVSEM # include support for semaphores options SEMMAP=512 # amount of entries in semaphore map options SEMMNI=512 # number of semaphore identifiers in the system options SEMUME=512 # max number of undo entries per process options SEMMNS=1024 # number of semaphores in the system options SEMMNU=512 # number of undo structures in the system options SEMMSL=256 # max number of semaphores per id options SEMOPM=256 # max number of operations per semop call # System V message queues and tunable parameters options SYSVMSG # include support for message queues options MSGMNB=8192 # max characters per message queue options MSGMNI=256 # max number of message queue identifiers options MSGSEG=8192 # max number of message segments in the system options MSGSSZ=16 # size of a message segment MUST be power of 2 options 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"\:Y|g" /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/sh USER=oracle umask 022 unset LANG unset LC_ALL ORACLE_BASE=/m01/app ORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7 ORACLE_DOC=$ORACLE_HOME/doc ORACLE_SID=OSID export ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOC NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/data ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/lib export NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATH JRE_LOCATION=/usr/local/jre118_v3 PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503 TMPDIR=/var/tmp PATH=$PATH:$ORACLE_HOME/bin export JRE_LOCATION PERL5LIB TMPDIR PATH case "$1" in start) # 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` {start|stop}" >&2 ;; esac exit 0

После создания скрипта наделяем его соответствующими правами для запуска.

# chmod 0555 /usr/local/etc/rc.d/oracle.sh

Теперь скрипт готов для работы.


41. Заключение

Ну вот и все закончилось. Или только начинается? ;-) Поздравляю Вас! Вы прошли огонь, воду и медные трубы. На этом мучения с установкой Oracle8i подошли к концу. Теперь Вы вероятно будете разбираться с его настройкой, но это уже другая история.