The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Базы данных, SQL" (Архив | Для печати)

Установка Oracle 8.1.x на FreeBSD 4.x
Скачать полный архив (20Кб)

Всем известно мнение, что установить Oracle версий 8.1.x на FreeBSD легче всего установкой на Linux, и дальнейшим копированием уже установленных файлов. Это объясняется тем, что трудностей от изучения Linux'а значительно меньше, чем трудностей от установки Oracle на FreeBSD.

Но поскольку, мы пионеры, легких путей не ищем, то в этой статье я поделюсь собственным двухнедельным опытом честной установки Oracle 8.1.7 на FreeBSD 4.2

Об установке Oracle 8.0.x на FreeBSD уже рассказывается даже в HandBook'e. Главным отличием установки Oracle 8.1.x от 8.0.x является инсталлятор на Jave. Этот язык (скорее даже концепция) программирования до сих вызывает много споров. Действительно: если бы не инсталлятор на Java, установка Oracle на FreeBSD проходила бы более безболезненно.

Ознакомившись с содержанием конференций, единственным материалом, который я нашел оказалась статья на японском: http://www.tokuda.net/FreeBSD/oracle816.html Зарядившись оптимизмом, и вооружившись переводчиком с AltaVist'ы, изучил ее и принялся следовать данным в ней указаниям. Однако, столкнулся с рядом проблем, затянувшими процесс установки на две недели. Если честно, то я уже почти отчаялся когда-либо завершить процесс установки, пока, наконец, случаяно не нашел решение одной из стоявших проблем. Чтобы с вами подобного не было, я поделюсь собственным опытом борьбы с Oracle и его инсталлятором.

Ну довольно лирики, теперь о конфигурации системы:
- Сервер IBM, Pentium-III, 256+128Mb ОЗУ.
- Операционная система FreeBSD-4.2 Release, самая стандартная, cvs-ом не обновлялась.
- Дистрибутив Oracle: linux81701.tar - 549.867.520 байт

1) Устанавливаем эмуляцию Linux'а.

Для этого из-под root'а устанавливаем два пакаджа: linux_base и linux_devtools

     matrix#  pkg_add linux_base-6.1.tgz
     matrix#  pkg_add linux_devtools-6.1.tgz

2) Загружаем модуль поддержки linux'а в ядро:

     matrix#  kldload linux

(не спешите прописывать linux_enable="YES" в /etc/rc.conf, его скорее всего, оттуда придется убрать..)

3) Теперь пришло время объяснить, как работает "линуксолятор".

Когда запускается программа, являющаяся бинарным файлом linux'а, во-первых, линуксолятор обеспечивает поддержку системных вызовов linux'а, а во-вторых, когда программа обращается к какму-либо файлу, например /etc/passwd, линуксолятор сначала подставляет в начало строчки путь окружения linux'а: /compat/linux/etc/passwd, и проверяет наличие такого объекта файловой системы. Если он есть - программа использует именно этот объект, если его нет - путь к файлу остается без изменений: /etc/passwd.

За счет того, что форматы основных файлов конфигурации между FreeBSD и Linux одинаковы, окружение linux не дублирует в себе настройки системы, и linux-приложения прекрасно используют файлы вроде /etc/passwd из конфигурации FreeBSD.

Однако инсталлятор Oracle использует информацию о разделах файловой системы, которую ищет в /etc/mtab. Изначально такого файла нет, поэтому его нужно создать:

     matrix#  cp /etc/fstab /compat/linux/etc/mtab

Как вы уже догадались, когда linux-приложение запросит файл /etc/mtab, "линуксолятор" сначала подставит путь /compat/linux/etc/mtab, где и найдет требуемый файл. Очень удобно, ведь не приходится замусоривать собственный /etc файлами, необходимыми только linux-приложениям.

4) Теперь нужно разбраться с временными каталогами.

Общераспостраненно их в Unix'ах три: /tmp, /usr/tmp, /var/tmp. Но поскольку мало кто выделяет много места под файловые системы / и /var, то частенько какие-то из этих объектов файловых систем являются не отдельными каталогами, а всего лишь символьными ссылками.

Когда я первый раз пытался производить установку, во время инициализации набора компонентов, подлежащих установке, происходил сбой: "Problem opening staging area", и вылетало совершенно нелепое предложение проверить еще раз правильность указания исходного каталога.

Ни в руководстве на tokuda.net, ни в Usenet-конференциях, я не смог найти описания подобной проблемы. Однако, нечаянно я заметил что если не закрывать окошко с сообщением об ошибке, то в /tmp/OraInstall остается файлик с именем temp0. Последовав доброму совету использовать ktrace для выяснения причин подземных стуков, я обнаружил весьма забавную картину:

     matrix#  kdump | grep temp
     ---------------------------------------------------
     47007 jre   NAMI  "/compat/linux/tmp/OraInstall/temp0"
     47007 jre   NAMI  "/tmp/OraInstall/temp0"
     47007 jre   NAMI  "/tmp/OraInstall/temp0"
     47007 jre   NAMI  "/compat/linux/var/tmp/OraInstall/temp0"
     47007 jre   NAMI  "/var/tmp/OraInstall/temp0"

Выходит, инсталлятор создавал этот файлик в /tmp/OraInstall, а искал в /var/tmp/OraInstall?

Поэтому, прежде чем начинать установку, давайте разберемся с местами временного хранения файлов. А чтобы линуксолятор не смог напутать программам пути, проверяем, чтобы таких объектов файловой системы, как /compat/linux/tmp, /compat/linux/usr/tmp, /compat/linux/var/tmp вообще не было. То есть не было с такими именами ни директорий, ни символьных ссылок на другие директории.

     matrix#  rm /compat/linux/tmp
     matrix#  rm /compat/linux/usr/tmp
     matrix#  rm /compat/linux/var/tmp

По умолчанию паккадж linux_base-6.1 создает /compat/linux/usr/tmp, который делает символьной ссылкой на /var/tmp. Мне кажется, это совершенно излишне. Когда всех трех выше перечисленных объектов файловой системы в /compat/linux/... существовать не будет, любая попытка линуксолятора подставить в путь /compat/linux закончится неудачей, в результате чего будут использоваться оригинальные каталоги /tmp, /var/tmp и /usr/tmp вашей системы.

Но это не все. Теперь нам нужно, чтобы /tmp, /var/tmp и /usr/tmp представляли один и тот же каталог. Определитесь, на какой файловой системе у вас больше всего места: на /, на /var или на /usr? У меня на /usr. Тогда /usr/tmp оставляем реальным каталогом, а /tmp и /var/tmp - символьными ссылками на него. Если содержимое tmp-ов не жалко, это может выглядить так:

     matrix#  rm -r /var/tmp/*
     matrix#  ln -s /usr/tmp /var/tmp
     
     matrix#  rm -r /tmp/*
     matrix#  ln -s /usr/tmp /tmp

После этого процесса могут пострадать запущенные программы, наподобие mysqld, которые могут держать в /var/tmp свои файлы-сокеты. Так что если полная работоспособность системы критична, то можно перегрузить сервер, не додидаясь пересборки ядра.. (а она еще предстоит).

5) Следующим этапом является установка JRE (Java Run-time Environment).

Она необходима для того, чтобы инсталлятор Oracle вообще запуститься и функционировать как программа. Вообще говоря, установочный комплект Oracle содержит в себе родную JRE, однако она обладает паталогической несовместимостью с FreeBSD (да и с некоторыми Linux'ами, как оказалось).

Поэтому мы установим Blackdown JRE 1.1.8: jre118_v3-glibc-2.1.3.tar.bz2 - 7.156.122 байт

доступен этот продукт с www.blackdown.org или файловым поиском через www.filesearch.ru

Поскольку запакован этот архив bzip2, то для распаковки необходимо установить этот архиватор (если он у вас до сих пор не установлен):

     matrix#  pkg_add bzip2-1.0.1.tgz

затем распаковываем архив с JRE:

     matrix#  cd /compat/linux/usr
     matrix#  tar --bzip2 -xvf /tmp/jre118_v3-glibc-2.1.3.tar.bz2

В каталоге /compat/linux/usr должен появиться подкаталог jre118_v3. Создадим внутри него каталог linux, который будет являться символьной ссылкой на /compat/linux/usr/jre118_v3.

     matrix#  cd /compat/linux/usr/jre118_v3
     matrix#  ln -s . linux

Это пригодится когда мы будем пытаться подменить родную Oracl'ову JRE Blackdown'овской.

6) Утилита arch

Утилита arch используется в linux для вывода информации об архитектуре машины. Ни в окружении /compat/linux/..., ни во FreeBSD подобной утилиты нет. Поэтому создаем ее сами, благо это дело не хитрое:

     matrix# echo echo i686 > /compat/linux/bin/arch
     matrix# chmod +x /compat/linux/bin/arch

7) Вместе с JRE нам еще потребуется JDK.

Blackdown JDK 1.2.2 адаптированная для FreeBSD есть в портах: /usr/ports/java/linux-jdk.

Однако я использовал обновленную версию этого порта. Для этого с ftp вытаскиваем весь каталог (вместе с подкаталогами): ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports-stable/java/linux-jdk и кладем его в /usr/ports/java/linux-jdk вместо оригинального. Решать, будете ли вы использовать обновленную версию порта, или ограничитесь имеющейся в вашей системе - решать вам. Могу только предостеречь, что вообще-то требуется Blackdown JDK 1.1.8, но то, что есть в linux-jdk (Blackdown JDK 1.2.2) вроде проблем не вызвало. Остальные порты, вроде linux-jdk13, linux-jdk14, linux-sun-jdk12, linux-blackdown-jdk13, linux-ibm-jdk13 сюда явно не подходят.

Итак, автоматически достаем порт из Интернет, компилируем и устанавливаем:

     matrix#  cd /usr/ports/java/linux-jdk
     matrix#  make install

Если все прошло успешно, порт будет установлен в /usr/local/linux-jdk1.2.2 Но это еще не все, на него нужно создать символьную ссылку:

     matrix#  ln -s /usr/local/linux-jdk1.2.2 /compat/linux/usr/local/java

8) Для работы Oracle нужно создать отдельного пользователя и группу.

Пусть это будут oracle:dba. На всякий случай я еще создал группу oinstall, и добавил в нее пользователя oracle.

Таким образом, в файл /etc/group у меня добавились две строчки:

     dba:*:94:
     oinstall:*:95:oracle

целочисленные идентификаторы групп GID у вас могут быть другими.

Теперь создаем пользователя oracle - с помощью команды vipw добавляем в файл пользователей следующую строчку:

     oracle:*:94:94::0:0:Oracle Server:/usr/oracle:/compat/linux/bin/bash

первая цифра 94 означает UID пользователя oracle и может быть любой, вторая - это GID группы dba.

Устанавливаем для пользователя oracle пароль (в процессе установки нам будет приходиться login'иться под ним с консоли):

     matrix#  passwd oracle

9) Создаем пользователю oracle домашний каталог:

     matrix#  mkdir /usr/oracle

Создаем профиль пользователя oracle и устанавливаем в нем все необходимые переменные окружения:

     matrix#  vim /usr/oracle/.profile

     ORACLE_BASE=/usr/oracle; export ORACLE_BASE
     ORACLE_HOME=/usr/oracle; export ORACLE_HOME
     LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
     ORACLE_SID=ORCL; export ORACLE_SID
     PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$ORACLE_HOME/bin
     export PATH

Передаем домашний каталог со всем его содержимым в распоряжение пользователю и группе:

     matrix#  chown -R oracle:dba /usr/oracle

10) Распаковываем установочный комплект:

     matrix#  mkdir /usr/orainstall
     matrix#  cd /usr/orainstall
     matrix#  tar -xfv /tmp/linux81701.tar

Распаковка дистрибутива oracle - достаточно длительный процесс. И пусть вас не смущает, что это действие производится, как и все предыдущие, из-под root'а - пользователю oracle совершенно не нужно иметь права собственности на свой установочный комплект.

После распаковки оказалось, что дистрибутив представляет собой каталог Disk1, внутри которого уже находятся каталоги doc, install locks, patch, response и stage. Скорее всего, расположение каталогов может быть и другим, в зависимости от версии дистрибутива, но смысл всех действий скорее всего будет тем же самым.

Созданный каталог /usr/orainstall вместе с распакованным дистрибутивом после установки Oracle можно будет удалить.

11) Вносим исправления в установочный комплект.

Сначала редактируем файл runInstaller:

     matrix#  cd /usr/orainstall/Disk1
     matrix#  cp runInstaller runInstaller.org
     matrix#  vim runInstaller

ищем строчку, содержащую THREADS_FLAG=native и заменяем ее на THREADS_FLAG=green

Теперь правим oraparam.ini

     matrix#  cd /usr/orainstall/Disk1/install
     matrix#  cp oraparam.ini oraparam.org
     matrix#  vim oraparam.ini

ищем строчку JRE_LOCATION=../stage/Components/oracle.swd.jre/1.1.8/1/DataFiles/Expanded/linux
и заменяем ее на JRE_LOCATION=/compat/linux/usr/jre118_v3/linux

(обратите внимание на взаимное соответствие окончаний обоих строчек:
...Expanded/linux -> /compat/linux/usr/jre118_v3/linux).

12) Теперь самое интересное - изменение параметров ядра.

В статье на tokuda.net говорится, что установка Oracle не требует изменение параметров ядра, и в них нуждается только сам Oracle. К сожалению, это от части не верно.

Пока я не догадался, какие опции надо вкомпилировать в ядро, установка Oracle у меня постоянно вылетала по 11 сигналу, с сообщением segmentation violation. Причем это происходило именно тогда, когда указатель процесса копирования файлов достигал значения 35%

Запущенный при этом top показывал прямо-таки дикое пожирание памяти установщиком, а вываливание примерно тогда, когда объем отъеденной памяти превышал 750Mb - хотя, если верить top'у, swap был использован всего на 55%

Использование ktrace ясности не внесло, правда получалось так, что в течении всего этого времени установщик Oracle честно копировал разные файлы, и никаких признаков зацикливания не обнаруживал. Более того, сравнение нескольких неудачных попыток установки показало, что она даже вылетала на копировании разных файлов: те файлы, которые оказались для установщика последними во второй попытке, в первой были успешно преодолены, и выброс по SIGSEG #11 произходил чуть позже.

К своим 256+128Mb ОЗУ и 512Mb swap я добавил еще 1000Mb swap-file, но ситуация не изменилась: установщик Oracle по-прежднему вываливался на 750Mb памяти, разве что swap теперь был заполнен не на 55% а на 18%

Ни шаманство, ни танцы с бубном не давали результата, пока в качестве уже которой по счету "последней попытки" не были внесены изменения в ядро, оказавшиеся критическими:

Во-первых, я увеличил maxusers с 32 до 64 - однако, если верить param.c на нашу ошибку это влиять не должно.

Во-вторых, я добавил строчку options MAXMEM="(1024*1024)" - это тоже вроде ничего не дает, так как BIOS не врал, и top объем оперативной памяти всегда показывал правильно.

И наконец, третье изменение, которое, по моему мнению, и является ключом к разгадке причины возникновения signal 11 и segmentation violation. Я добавил:

     options   MAXDSIZ="(1024*1024*1024)"
     options   DFLDSIZ="(1024*1024*1024)"

В описании этих параметров в ядре LINT говорится следующее: "Некоторые приложения могут выходить за 128Mb предел, который во FreeBSD изначально заложен. Используйте эти параметры, чтобы увеличить этот предел. MAXDSIZ - это максимальное значение, которое может принимать этот предел, DFLTDSIZ - его значение по умалчанию. Задав значение DFLTDSIZ меньше MAXDSIZ, вы после сможите для некоторых процессов поднять значение этого предела до MAXDSIZ, с помощью переменных Shell

Не совсем понятно, про какой предел идет речь. Самое интересное, что в этом абзаце ни слова не сказано про "память" или "memory". Такое ощущение, что эта опция относится не к объему памяти, а к чему-то иному. По умолчанию пределом этого чего-то является 128Mb, в ядре LINT продемонстрированно, как сделать этот предел равным 256Mb, я же с русским размахом установил его равным 1024Mb. Ничего, работает..

Итак, давайте внесем изменения в конфигурацию вашего ядра. У меня это выглядит так:

     matrix#  cd /sys/i386/conf
     matrix#  vim ./MATRIX

В ядро добавим следующие строки:

     options   SYSVSHM   #SystemV-style shared memory
     options   SYSVMSG   #SystemV-style message queues
     options   SYSVSEM   #SystemV-style semaphores

(по умолчанию эти три строчки включены в ядро GENERIC FreeBSD-4.2Release)

     options   SHMMAXPGS=10000
     options   SHMMNI=100
     options   SHMSEG=10
     options   SEMMNS=200
     options   SEMMNI=70
     options   SEMMSL=61

(это параметры поддержки SystemV)

     pseudo-device   vn   1

(это нужно для создания swap-файла)

После всех этих добавлений компилируете и устанавливаете новое ядро.

     matrix#  cd /sys/i386/conf
     matrix#  config MATRIX
     matrix#  cd ../../compile/MATRIX
     matrix#  make depend
     matrix#  make
     matrix#  make install

Но сервер не перегружаем!

13) Сейчас я расскажу, как создать и подключить swap-файл.

Вообще, использовать его или нет, решать вам. Если суммарный объем ОЗУ и swap'а на Вашем сервере составляет около 1 Gb, то, вероятно, можно обойтись без swap-файла. В противном случае я бы посоветовал увеличить swap за счет создания дополнительной swap-партиции или swap-файла. К сожалению, неразмеченного места на диске под swap-партицию у меня не оказалось, поэтому расскажу как создать swap-файл.

Сначала создаем одно vn (virtual-node) устройство:

     matrix#  cd /dev
     matrix#  sh ./MAKEDEV vn0

Теперь создаем сам файл подкачки размером 1 Gb:

     matrix#  dd if=/dev/zero of=/usr/swap0 bs=1024k count=1024

Устанавливаем права на него:

     matrix#  chmod 600 /usr/swap0

Подключаем созданный файл подкачки. Для этого в /etc/rc.conf дописываем строчку:

     swapfile="/usr/swap0"

После чего наконец-то перегружаем сервер:

     matrix#  reboot

14) После перезагрузки вызываем top и смотрим доступный объем swap'а и ОЗУ,

тем самым убеждаясь, что наш swap-файл успешно подключен к системе. Теперь вроде все готово к установке..

Снова загружаем поддержку linux'а:

     matrix#  kldload linux

Login'имся с обчыной текстовой консоли пользователем Oracle. Пользователь должен без проблем зайти в систему, sell'ом у него будет linux'овый bash, а приглашение командной строки будет иметь вид:

     [oracle@matrix oracle]$  

Убедитесь, что все опеременные окружения, которые мы описали в .profile выстанавлены:

     [oracle@matrix oracle]$  set | more

После чего выходим из-под пользователя oracle.

15) Теперь запускаем XWindow.

Если для установки 8.0.5 он был нужен чтобы в xterm запустить текстовый установщик, который плохо понимал termcap, и напрочь отказывался обеспечивать перемещение по своим красивым менюшкам, то теперь весь установщик написан под GUI.

К слову сказать, никаких KDE и прочих оконных менеджеров не понадобится. Голые X-ы, со стандартным VGA прайвером 640x480 и 16 цветов вполне подойдут. И хотя окно установщика будет размером строго на весь экран, вылазанья за него отдельных частей окна замечено не было.

     matrix#  xdm

16) В X-ах заloginиваемся под пользователем Oracle.

Первым окном, которое появится, будет окно xterm'а с приглашением вида:

     bash$

Это тот же линуксовый bash, однако в xterm'е он запущен не в роли login shell'а, поэтому он даже не удосужился прочитать из .profile переменные окружения, что, впрочем, легко проверить:

     bash$  set | more

Установленных перменных ORACLE_BASE и ORACLE_HOME мы здесь не увидим. Для того, чтобы bash считал из .profile значения этих переменных, его необходимо запустить в роли login shell'а. Для этого прямо в xterm'e набираем:

     bash$  bash -login

Приглашение сразу принимает привычный вид [oracle@matrix oracle]$, а выполнив команду:

     [oracle@matrix oracle]$  set | more

убеждаемся в том, что значения всех переменных из .profile выставлены корректно.

Теперь отключаем локализацию языка. Установщик Oracle распознает текущее значение переменной языка, и в зависимости от этого использует различные строки для своего интерфейса. С одной стороны это хорошо, потому как видеть сообщения о процессе установки на русском языке приятно, с другой стороны в usenet неоднократно пробекали статьи, что установщик невсегда корректно справляется с подобной языковой подстановкой. Поэтому, чтобы быть уверенным, что ошибки установки никак не связаны с нашей национальной принадлежностью, снимем значение переменной окружения LANG:

     [oracle@matrix oracle]$  unset LANG

17) Теперь приступим к самой главной части, запускаем установщик.

Все в том же xterm'е, от имени пользователя oracle, наберите:

     [oracle@matrix oracle]$  cd /usr/orainstall/Disk1
     [oracle@matrix oracle]$  ./runInstaller

И если судьба сжалится над вами, и случится чудо, то вы увидите сначала сообщение "Inintializind Java Virtual Machine from /compat/linux/usr/jre118_v3/bin/jre. Please wait..", а затем и плавно возникающую эмблему Oracle Installer, прожорливого монстра, написанного на языке Java.

Если эмблемки не появилось, а runInstaller вывалился с сообщением об ошибке, посторайтесь проанализировать это сообщение. Скорее всего это связано с инициализицией JRE. Проверьте верно ли была произведена коррекция файлов runInstaller и oraparam.ini, привильно ли распакована JRE. Вообще говоря, наша версия JRE использует glibc 2.1.3, а паккадж linux_base-6.1 от FreeBSD 4.2Release содержит glibc 2.1.2, однако я еще ни разу не слышал, чтобы с этим возникали проблемы. По крайней мере у меня Java-установщик заработал с первой попытки, и в этом отношении проблем удалось избежать.

Поэтому, если runInstaller у вас не запустился, проверьте пути к JRE, права на /usr/oracle и временные каталоги, постарайтесь разобрабраться в причинах ошибки. Все же, надеюсь, такой проблемы не возникнет.

18) Итак Oracle Installer запущен.

Первый экран (Welcome) пропускаем.

На втором экране нам предлагают выбрать source и destination locations. Если все переменные окружения назначены правильно - в этих полях уже будут стоять соответствующие директории. Нажимаем Next.

Теперь Oracle инсталлер будет некоторое время загружать "Product information", после чего спросит UNIX Group Name - группу пользователей которые будут иметь права на добавление компонентов Oracle. Поскольку ничего добавлять я не собираюсь (да и не знаю, что еще из монстроидальных продуктов Oracle можно портировать на FreeBSD), то я выбрал группу dba. Вероятно, с таким же успехом можно было использовать группу oinstall.

Теперь системе потребуется сохранить информацию об Oracle Inventory - месте, где будет храниться информация об установленных продуктах Oracle и о той группе, которая имеет право изменять эту информацию. Для этого ей нужны администраторские привелегии: она попросит запустить из-под root'а файл /usr/oracle/orainstRoot.sh. Переключитесь на текстовую консоль, зайдите root'ом и запустите этот файл:

     matrix#  cd /usr/oracle
     matrix#  ./orainstRoot.sh

Это приведет к созданию файла /etc/oraInst.loc, содержащего всю необходимую информацию. Сама же Inventory-база будет находится в /usr/oracle/oraInventory. Заметьте, если переменные окружения (в частности, ORACLE_HOME) были бы не выставлены, Oracle Installer еще после первого бы шага спросил бы о том, где эту Inventory directory располагать.

После вызова orainstRoot.sh вернитесь в X'ы, и нажмите Retry.

Установщик спросит у вас, какой именно продукт вы хотите установить. Нужно выбрать Oracle 8i Enterprise Edition 8.1.7 (Oracle Management&Integration и Oracle Client нам не нужны), и нажать Next.

Теперь вопрос каснется типа установки. Выбираем Typical (Minimal и Custom нам не подходят). Жмем Next.

После чего установщик начнет собирать сведения об устанавливаемых компонентах: в правом верхнем углу окна появится индикатор, который начнет постепенно заполняться.

Кстати, я заметил одну особенность: если X-приложение (по крайней мере Oracle Installer) чем-то очень сильно занято, а вам показывает безинтересный индикатор процесса, то все же не стоит переключаться в консоль для выполнения какх-то действий. Пару раз у меня вылетали X'ы во время таких переключений. Не знаю, чья это вина: X'ов, Oracle Installer'а или JRE, но по опыту могу сказать, что делать так не стоит.

Оставьте на мониторе царствовать XWindow и Oracle Installer'а, а сами подключитесь telnet'ом с другой машины, чтобы следить за состоянием системы с помощью top'а.

Следующим шагом (видимо в рамках процесса сборки сведений об устанавливаемых компонентах) оказался вопрос о Database Administrator Group и Database Operator Group. Я обе назвал dba, однако если есть желание разделить их привелегии, то создайте еще одну группу, не забудьте только включить в нее пользователя oracle.

Следующим шагом система просит определить путь к JDK 1.1.8 По умолчанию он определен как /usr/local/java Помните, мы создавали символьную ссылку:

     /compat/linux/usr/local/java -> /usr/local/linux-jdk1.2.2

А помните, как работает линуксолятор? Правильно, когда Oracle Installer запрост путь /usr/local/java, линуксолятор сначала подставит /compat/linux/usr/local/java. А так объект файловой системы существует, и является символьной ссылкой на наш /usr/local/linux-jdk1.2.2

Не верите, что получится? Нажмите кнопку Browse.. Перед вами GUI'шное дерево, из которого наглядно видно, что по мнению Oracle Installer'а папка /usr/local/java содержит подпапки bin, demo, include, include-old, jre, lib. Убедились?!

Тогда путь к JDK оставляем /usr/local/java, и нажимаем Next..

Global Database Name я ввел такое же как и SID: ORCL

После чего список вопросов у установщика иссяк, и он наконец-то предложил перейти к действию: нажать кнопку Install. Мы ее тоже сейчас нажмем, но перед этим я добавлю, что по показанию top'а (запущенного, кстати, в telnet-сеансе с другой машины), jre сейчас даже в пассивном состоянии (отрисовав окошко и ожидая действий пользователя) использует около 19% ресурсов моего Pentium-III, и занимает уже 311Mb памяти! Сторонники Java, срочно посыпайте голову пеплом..

Ну что ж, с Богом: нажимаем кнопку Install..

19) Индикатор копирования начинает медленно ползти..

А мы тем временем смотрим на показания top'а, и удивляемся, куда же этому jre столько памяти надо.. Около 35% индикатор на продолжительное время застревает, а затем достаточно быстро проходит остальные стадии. Что делается на этих 35% ответить затрудняюсь, могу сказать только, что после их прохождения объем памяти, который отъедает jre возрос с ~450 до ~850 Mb, а к концу установки составил ~1005 Mb.

Кстати, те, кто устанавливал Oracle на Linux поделились, что всего при установке, jre расходует около 640Mb памяти, что все-таки меньше чем 1Gb на FreeBSD. Зачем jre нужно 1 Gb памяти, и что она с ним делает, я бы сам с удовольствием узнал. Может она дистрибутив туда записывает?.. ;)

Итак, если процесс копирования файлов и пожирания памяти пройдет успешно, то в конце установки вы увидите уже знакомое сообщение, что установщику нехватает прав, чтобы запустить файлик /usr/oracle/root.sh, зайдите, мол, с консоли из-под root'а, и запустите его сами.

Однако, прежде чем мы сделаем это, давайте посмотрим, что же там внутри у этого файла, и внесем необходимые исправления:

В самом начале файла, и через еще две странички в его середине, прописываются пути к служебным программам Unix. Вот именно эти пути нам нужно и исправить. Вообще-то лучше проверить все эти пути самостоятельно, так как от версии к версии Oracle они добавляются.. я, например, сделал следующие исправления:

В начале файла:

     CHOWN=/usr/sbin/chown
     TEST=/bin/test

В середине файла:

     AWK=/usr/bin/awk
     CHOWN=/usr/sbin/chown
     GREP=/usr/bin/grep
     SED=/usr/bin/sed
     TEST=/bin/test

после чего, запускаем файл:

     matrix#  cd /usr/oracle
     matrix#  ./root.sh

После запуска скрипт спросит путь к каталогу local bin:

     Enter the full pathname of the local bin directory: [/usr/local/bin]:

с предложенным /usr/local/bin нужно согласиться и молчаливо нажать Enter.

20) После того, как root.sh закончит свою работу,

вернитесь к установке и продлжите ее. Следующим этапом будет автоматический запуск Configuration tools, в процессе которого некоторые утилиты успешно отработают (вы увидите напротив них галочки), а на запуске некоторых (а именно Oracle database Configuration Assistandt) система обломается. После чего на экран будет выведено сообщение:

     One or more tools have failed. It is recommended...

Ничего страшного. Базу данных мы создадим вручную. Нажимаем OK в диалоге об ошибке, говорим Next, и затем, приняв поздравления об окончании установки, Exit.

21) Теперь вручную создаем базу данных.

Заходим с текстовой консоли пользователем oracle:

    [oracle@matrix oracle]$  cd /usr/oracle
    [oracle@matrix oracle]$  mkdir orcl
    [oracle@matrix oracle]$  cd orcl
    [oracle@matrix oracle]$  mkdir ddl data pfile archive bdump cdump udump

Затем берем этот файл: http://pm.stu.lipetsk.ru/~oracle/orcl.tgz и распаковываем его:

    [oracle@matrix oracle]$  cd /usr/oracle/orcl
    [oracle@matrix oracle]$  tar zxfv /tmp/orcl.tgz

после чего запускаем:

    [oracle@matrix oracle]$  cd /usr/oracle/orcl/ddl
    [oracle@matrix oracle]$  sh ./01crdb.sh

если все правильно, то поднимится экземпляр Oracle и начнется не быстрый процесс создания Базы данных, вместе со всеми сегментами, словарями и табличными пространствами...

    [oracle@matrix oracle]$  sh ./02crdb.sh
    [oracle@matrix oracle]$  sh ./03crdb.sh
    [oracle@matrix oracle]$  sh ./05crtblsp.sh
    [oracle@matrix oracle]$  sh ./06cruser.sh

Естественно, желающие могут поковыряться в файлах и "заточить" их под себя. Я взял их с tokuda.net и подкорректировал пути. В результате выполнения последнего файла (06cruser.sh) будет создан пользователь demo с паролем demo, которому будут предоставлены все привелегии работы с базой данных.

Для пробы можно создать таблицу:

    [oracle@matrix oracle]$  sqlplus

    SQL*Plus: Release 8.1.7.0.0 - Production on Mon Jun 3 10:59:53 2002
    (c) Copyright 2000 Oracle Corporation. All rights reserved.
    Enter user-name: demo
    Enter password: demo
    Connected to:
    Oracle 8i Enterprise Edition Release 8.1.7.0.1 - Production
    With the Partitioning option
    JServer Release 8.1.7.0.1

    SQL> @07cr_tbl.sql

    DROP TABLE T_GIJI CASCADE CONSTRAINTS
               *
    ERROR at line 1:
    ORA-00942: table or view does not exist

    Table created.

    Table altered.

    SQL> exit

22) Теперь выключаем Oracle:

    [oracle@matrix oracle]$  svrmgrl

    Oracle Server Manager Release 8.1.7.0.1 - Production
    (c) Copyright 1997, 1999, Oracle Corporation.  All Rights Reserved.
    Oracle 8i Enterprise Edition Release 8.1.7.0.1 - Production
    With the Partitioning option
    JServer Release 8.1.7.0.1

    SVRMGR> connect internal
    Connected.

    SVRMGR> shutdown normal
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    SWRMGR> quit
    Server Manager complete.

23) Редактируем инициализационные файлы Oracle:

    [oracle@matrix oracle]$  vim /usr/oracle/orcl/pfile/initORCL.ora

В этом файле раскомментируем строчку, содержащую информацию о сегментах отката:

    rollback_segments = (rbs01, rbs02, rbs03, rbs04)

Далее из admin.tgz (файл доступен по адресу http://pm.stu.lipetsk.ru/~oracle/admin.tgz

    [oracle@matrix oracle]$  cd /usr/oracle/network/admin
    [oracle@matrix oracle]$  tar zxvf /tmp/admin.tgz

Тем самым в /usr/oracle/network/admin будут созданы файлы: listener.ora, sqlnet.ora и tnsnames.ora.

listener.ora и tnsnames.ora нужно исправить на предмет собственного доменного имени. У меня оно matrix.pm.lstu.

    [oracle@matrix oracle]$  vim /usr/oracle/network/admin/listener.ora

    [oracle@matrix oracle]$  vim /usr/oracle/network/admin/tnsnames.ora

24) После того, как эти файлы созданы, можно запускать Oracle и его Listener.

Для этого из-под root'а в /usr/local/etc/rc.d кладем файл oracle.sh из следующего архива: http://pm.stu.lipetsk.ru/~oracle/oracle.tgz

    matrix#  cd /usr/local/etc/rc.d
    matrix#  tar zxfv /tmp/oracle.tgz

Создаем /usr/oracle/bin/start.db, следующего содержимого:

    connect internal;
    startup pfile=$ORACLE_HOME/orcl/pfile/initORCL.ora;
    quit;

И /usr/oracle/bin/stop.db:

    connect internal;
    shutdown normal;
    quit;

После чего можно попробывать запустить, экземпляр Oracle:

    matrix#  /usr/local/etc/rc.d/oracle.sh start

и зайти sqlplus'ом под пользователем demo:

    [oracle@matrix oracle]$  sqlplus

    SQL*Plus: Release 8.1.7.0.0 - Production on Mon Jun 3 10:59:53 2002
    (c) Copyright 2000 Oracle Corporation. All rights reserved.
    Enter user-name: demo
    Enter password: demo
    Connected to:
    Oracle 8i Enterprise Edition Release 8.1.7.0.1 - Production
    With the Partitioning option
    JServer Release 8.1.7.0.1

    SQL> exit

Теперь гасим Oracle:

    matrix#  /usr/local/etc/rc.d/oracle.sh stop

И довольные, что только что совершили самое извратнейшее из всех возможных действо, перегружаем сервер.

   matrix#  reboot

Теперь, когда сервер вновь загрузится, Oracle 8i будет входить в стройный ряд ваших серверных приложений, работающих на FreeBSD!


Благодарности:

1) Nick A. Leuta aka Skynick - за море времени, уделенное мне, за объяснение принципа работы линуксолятора, за помощь в работе с ним и updat'е его содержимого.

2) Yuriy Vostrikoff aka Mon - за ценный совет по ktrace

3) Oleg V. Volkov aka Rover - за любезную помощь в переводе с японского

4) Кафедру АСУ - за "добрые советы" снести FreeBSD и поставить Linux :)

5) www.tokuda.net - за статью, без которой врядли у меня хватило бы энтузиазма начать и довести до конца это дело.

Ну и конечно, особое Спасибо моей Натали, которая терпела все мои вчера, проведенные в институте до 22 вечера..


Публикации:

Если кто сочтет этот материал достойным быть где-то опубликованным, я буду только рад!

Если у кого-то получится (или наоборот, не получится) установить Oracle 8i на FreeBSD - пишите!
Я сделал все возможное, чтобы эта установка прошла без проблем.

© 2002 Stas Kornienko   korn@lglobus.ru   2:5036/32




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру