Ключевые слова:oracle, freebsd, install, howto, (найти похожие документы)
Date: Sun, 16 Jun 2002 19:50:42 +0000 (UTC)
From: "Stas A. Kornienko" <korn@lglobus.ru>
Newsgroups: fido7.ru.unix.bsd
Subject: Руководство по установке Oracle 8.1.x на FreeBSD 4.x
Путем долгих страданий и извращений все-таки получилось по-честному
установить Oracle 8.1.7 на FreeBSD 4.2 - настоящей установкой, без
копирования установленных бинарников с Linux'а. Вот руководство (доступное
также на http://pm.stu.lipetsk.ru/~oracle):
Установка Oracle 8.1.x на FreeBSD 4.x
-----------------------------------------
Всем известно мнение, что установить 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.
Любому человеку, который сталкивался с установкой 8.1.x, эта искусственно
разрекламированная, якобы многоплатформная, система разработки покажется
монстроидальным пожирателем памяти, ресурсов и всего, что только можно.
Не понятно, из каких соображений, разработчки Oracle стали использовать Java -
о какой мультиплатформенности может идти речь, если дистрибутивы для Windows
и Linux у них все равно разные, а основным камнем предкновения в установке
Oracle на другие Unix-платформы стал как раз этот неуклюжий, монстроидальный,
дико тормозной и прожорливый инсталлятор.
Ознакомившись с содержанием конференций, единственным материалом, который я
нашел оказалась статья на японском: 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'а.
1) Для этого из-под 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 используется в 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/Da
taFiles/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://www.lglobus.ru/korn/orcl.tgz, или из UUE:
begin 644 orcl.tgz
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
D#3744$,--=100PTUU%!##3744$,--=30WXS^"TD-4/\`4```
`
end
и распаковываем его:
[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://www.lglobus.ru/korn/admin.tgz, а ниже приведен в UUE):
begin 644 admin.tgz
M'XL(`+M]^SP``^V6WX^:0!#'?>:OF.1>(*D(HM`V\8$#/&DXUL#>]9%0Y5H2
MA"LLZ8^_OKL@GE[3-FWC^3*?%W%FG-E=9ORN.BGRAF5E5JM5G8[.@JYIICF#
M$0#HAGGRV6%:)H`ULTS^8.I3[IUJNC$"[3S+.:5M6%H#C/CN-T7VZ[CMAS.=
MSF6YDJ[`+_D9%$7*\JJ$&]$+*<NV$&;L-3A5^9!_;.O.R6/OL[H182X/>0OO
MVG*L6^,W%O<L\R(KTQVW!D<=Q1U2X,?4"[T(%A*`;+MNY,5Q(JR=I6>P+T!>
M1X02AP0+H,Y:D5=5PQ:P2UF=?U4?=VK1L%:1UU7-K?I\JBL*3Z)(L>]V.9/3
M<H-Y7ZK[[GJQ<R@MWP3DV@X2]SJT;[WGA51E"".1[01>LB(B:-(V]:1OF4.`
MR"Q2P`)(Y`2]?;\V:D?T;IV\MWV:4/_6.UHD:))#PM!S>@^Y.]X!Z)I$>6'^
M`^_>"XX]9+F4_O_]JY/F<U%F['S3_^?YUV=&-_]3_A>@S35NT&<S"^?_)1`3
MVZC;O,XVK*J_)8\I^\2;2Z9A+'HY?@4K$E/QJ$C[V.PA;0N6;*M=FI<\]DM5
M%]O.>?!]K\KLX+GT%I'?H$Y8V?0O]F+Z;\SU)_TWC$[_-9S_%X'+\U]<`."G
M&P#9L/%4W`#@Y`I`CYI*>$`2DM@KLE#?R%]3GX2#*.^U'_Y1_'F&04)=F]HB
J#1?C08=[";[T02,(@B`(@B`(@B`(@B`(@B`(@B`(@IR9']]`O%,`*```
`
end
[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 из следующего архива:
begin 644 oracle.tgz
M'XL(`!R0^SP``^W336^;0!`&8)_W5TR)I9SP0A7'55,.Y$.-51)7)#U4565A
M3`KJFK5V(?7/#[O$+K&CJ*KD5*K>YV"6F6&9`2Q5DHILH//>_OB>-QIZU"-C
M^TCD#YLDC8Y&;X?>T<CWFXCO'0][Y.VQIXU:5XDBZBDIJY?J?N59)EZCH==U
M\(;/BI+KG#&NS>JGF`N9S,F])U&4]8JQ21R>11?3T_#F(N"U5ES:;^:$LM52
MJHHZ^77MY>3JQ5J39]'Y-!J?QF'\=?HYO+T,^ITD%\5L<]%6X?HF-^/S8!*?
M1=N;-W%F-^2I7"R3BMLYS)COGT;T;LBT_'RT+;8_[7)3^CMK5D*FB;"))_,T
M`?;8IITA"J\_!JJ>QE\&GR;C=VZ\SIH$8P=D/LN*%7?TC9Q5WW<H:(X.N;)S
M:FL<^GY"59Z5S+[)+,TE]>T].N?=Y[[NG.N:W`6U;XC<E)S.&[,%0I<JK43;
MB\/2.>W,].>;Z7NU^*$$?:"=C-E^,)\YG8[=D@X?=SML'X=<LDQL/0\3[<S_
L%X,UU^]Q+KFT8]T5[%__SP$```````````````````#@__0`<2#65@`H``#_
`
end
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 - пишите! Я сделал все возможное, чтобы эта
установка прошла без проблем.
(c) 2002 Stas Kornienko <korn@lglobus.ru> 2:5036/32
Стас ты монстр! (в смысле гений)
Большое спасибо за статью. Хоть я фрёй не занимаюсь, но твоя статья окрыляет, позволяя надеяться, что любые проблемы могут быть решены.