在freebsd下安装oracle

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

Вячеслав Иванченко

< [email protected] >

$FreeBSD: doc/ru_RU.KOI8-R/articles/oracle/article.sgml,v 1.36 2003/07/14 03:12:47 ivi Exp $

Чтобы сделать этот документ максимально информативным и правильным, присылайте свои комментарии и пожелания мне на электронный адрес [email protected] .

Отдельно благодарю Стаса Корниенко за его труд, так как львиная доля этой статьи основана на его материале.


1. Введение

Эта статья содержит описание пошаговой установки Oracle8i для Linux (8.1.7.4) на FreeBSD. Перед тем, как написать эту статью, я внимательно перечитал материал Стаса Корниенко "Установка Oracle 8.1.x на FreeBSD 4.x". И все меня вроде устраивало в статье Стаса, да только не давала спокойно спать мысль - почему же установщик Oracle8i (Oracle Universal Installer) на последней стадии своей работы зависает, из-за чего заканчивать установку приходилось вручную. Поэтому я поставил перед собой цель - произвести установку Oracle8i так, чтобы все неприятные ситуации, связанные с зависанием не возникали при установке.

Тщательно проанализировав различную документацию по установке Oracle8i на различных дистрибутивах Linux и проведя различные эксперименты над установкой Oracle8i, как на FreeBSD, так и на Linux, я пришел к выводу, что Oracle8i все же можно установить на FreeBSD так, чтобы он не зависал во время установки. Также на FreeBSD возможно использование GUI-утилит, которые будут доступны после установки. У меня это получилось, чего желаю и Вам! :-)

  • Предполагается, что установлена FreeBSD-4.x или FreeBSD-5.x на базе i686 вместе с настроенной и готовой к работе XFree86 / X Window System.

  • Предполагается, что если у Вас нет неразмеченного места на дисках Вашей машины, не меньше 2 ГБ, то в файловой системе примонтированной в директорию /usr имеется 3,5 ГБ свободного места. Также необходимо, чтобы общий размер своп-разделов был равен 1 ГБ, если общий размер своп-разделов не удовлетворяет указанным требованиям и у Вас отсутствует дополнительное неразмеченное место для создания еще одного своп-раздела, то Вам понадобится еще 1 ГБ сводного места, в любой имеющейся на дисках Вашей машины файловой системе UFS. Конфигурация машины, на которую устанавливается Oracle8i, должна удовлетворять следующим параметрам CPU PIII-500 МГц и выше, RAM 256 МБ и более.

  • Предполагается, что в качестве командного интерпретатора у суперпользователя установлен csh , и суперпользователь находится в группе wheel , GID которой равен 0.

  • Предполагается, что все команды начинающиеся с символа # выполняются от имени суперпользователя, а с символа % - от имени пользователя oracle , которого Вам еще предстоит создать в соответствии с рекомендациями из этой статьи. Будьте внимательны, выполнять команды необходимо именно с тем UID, который рекомендуется в статье! Не стоит выполнять команды, которые должен выполнять пользователь oracle , от имени суперпользователя, в большинстве случаев это приведет к различным проблемам при инсталляции Oracle8i.

  • Предполагается, что исходные тексты системы доступны в директории /usr/src , а коллекция портов находится в директории /usr/ports.

  • Предполагается, что будет использоваться обновленная с помощью cvsup коллекция портов, в связи с тем, что старые версии FreeBSD, содержат в портах emulators/linux_base-6 и devel/linux_devtools-6 ссылки на уязвимые версии пакетов. Об обновлении коллекции портов при помощи cvsup можно прочесть в "FreeBSD Handbook" .

  • Предполагается, что в системе установлены bzip2 и unzip . Если у Вас одна из последних версий FreeBSD-4.x, или FreeBSD-5.x, то bzip2 уже есть в системе, если нет, то необходимо установить его из коллекции портов, выполнив следующее:

    # cd /usr/ports/archivers/bzip2 && make install clean && rehash
    

Для установки unzip выполните следующие команды:

    # cd /usr/ports/archivers/unzip && make install clean && rehash
  • Предполагается, что в корневой директории существует символическая ссылка /compat , указывающая на директорию /usr/compat . Проверьте это командой,

    # ls -l /compat
    

Если выдается что-то вроде

    lrwxr-xr-x 1 root wheel 11 6 Dec 13:18 /compat -> /usr/compat

значит, все нормально, если команда выдала

    ``ls: /compat: No such file or directory''

то создайте ссылку, следующим образом,

    # ln -s /usr/compat /compat

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

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

# mkdir /usr/oinstall



# cd /usr/oinstall

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

  • linux81701.tar (549867520 Б) - дистрибутив Oracle8i Enterprise Edition Release 3 (8.1.7.0.1) for Linux (Intel). http://otn.oracle.com/software/products/oracle8i/content.html

  • procps-2.0.4-2.i386.rpm (134767 Б) - содержит некоторые системные утилиты необходимые Oracle8i. ftp://ftp.redhat.com/pub/redhat/linux/6.1/en/os/i386/RedHat/RPMS/procps-2.0.4-2.i386.rpm

  • jre118_v3-glibc-2.1.3.tar.bz2 (7156122 Б) - дистрибутив JRE версии 1.1.8 от blackdown.org. Список FTP-серверов, откуда можно закачать дистрибутив, находится на http://blackdown.org/

  • p2376472_8174_LINUX.zip (134488247 Б) - кумулятивный патч, устраняющий довольно большое количество различных ошибок в Oracle8i (8.1.7.0) и поднимающий Oracle8i до версии 8.1.7.4. На текущий момент это патч доступен http://metalink.oracle.com/ , доступ на этот ресурс является платным. Но при желании найти этот файл в Internet не составит труда. Ведь у Вас "карты в руках" - имя файла. ;-) В крайнем случае, можно поднять Oracle8i до версии 8.1.7.3, этот кумулятивный патч доступен на официальном FTP-сервере Oracle Corporation и на текущий момент бесплатный. Файл p2189751_8173_LINUX.zip (121801951 Б) можно загрузить по ссылке на директорию с FTP-сервера ftp://oracle-ftp.oracle.com/server/patchsets/unix/LINUX/817patchsets/ . О выходе новых кумулятивных патчей всегда можно узнать на странице http://otn.oracle.com/support/patches.htm


3. Устанавливаем своп размером в 1 ГБ

Если своп равен 1 ГБ или больше, то не выполняйте этот пункт.

Если же размер свопа меньше 1 ГБ и на дисках Вашей машины нет неразмеченного места для его создания, то с помощью команды df определите, в какой файловой системе у Вас есть 1 ГБ свободного места, и создайте файл swap . Например, для размещения файла swap в директории /usr , выполним следующие команды:

# cd /dev



# sh ./MAKEDEV vn0



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



# chmod 0600 /usr/swap



# echo 'swapfile="/usr/swap"' >> /etc/rc.conf

> Примечание: Если Вы производите установку на FreeBSD-5.x, то команды cd /dev и sh ./MAKEDEV vn0 выполнять не надо.

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


4. Инсталлируем emulators/linux_base-6 и devel/linux_devtools-6

Порты emulators/linux_base-6 и devel/linux_devtools-6 должны установить пакеты от дистрибутива Linux Red Hat 6.1 и частично от 6.2.

# cd /usr/ports/emulators/linux_base-6



# make install clean && rehash



# cd /usr/ports/devel/linux_devtools-6



# make install clean && rehash

Будьте внимательны! В коллекции портов имеются порты, устанавливающие пакеты от Linux Red Hat 7.1 emulators/linux_base и devel/linux_devtool-7 - эти пакеты не подойдут! Oracle8i для Linux собран с glibc-2.1.3 , именно эта версия glibc имеется в портах на момент написания этой статьи.

$FreeBSD: ports/emulators/linux_base-6/Makefile,v 1.70 2003/04/08 21:47:06 trevor Exp $

$FreeBSD: ports/devel/linux_devtools-6/Makefile,v 1.34 2003/02/20 17:06:51 knu Exp $


5. Дополнительно устанавливаем пакет procps-2.0.4-2.i386.rpm

Дополнительно к эмуляции Linux устанавливаем пакет procps-2.0.4-2.i386.rpm . Без него у Вас на FreeBSD, установщик Oracle8i не сможет нормально завершить свою работу - он попросту зависнет при попытке создания базы данных. А происходит это из-за того, что во время инсталляции вызывается утилита dbassist , которая без пакета procps-2.0.4-2.i386.rpm на FreeBSD работать не хочет. Вот чтобы этого не произошло, Вы и установите пакет procps-2.0.4-2.i386.rpm , который до этого должны были положить в директорию /usr/oinstall .

# cd /usr/oinstall



# rpm -U --ignoreos --root /compat/linux --dbpath /var/lib/rpm --nodeps --replacepkgs procps-2.0.4-2.i386.rpm

6. Включаем поддержку совместимости с Linux.

Включаем поддержку совместимости с Linux. В файле /etc/rc.conf нужно добавить строку linux_enable="YES"

# echo 'linux_enable="YES"' >> /etc/rc.conf

7. Создаем символическую ссылку /compat/linux/etc/mtab

Создаем символическую ссылку, которая будет необходима Oracle8i для получения информации о Вашем (-их) диске (-ах).

# ln -s /etc/fstab /compat/linux/etc/mtab

8. Вносим изменения в /etc/fstab

В файле /etc/fstab после строки, где описывается proc , добавьте в текстовом редакторе строку

linproc /compat/linux/proc linprocfs rw 0 0

и сохраните файл.


9. Создаем утилиту arch

Создаем утилиту arch , которая в Linux используется для вывода информации об архитектуре машины.

# echo 'echo i686' > /compat/linux/bin/arch



# chown root:wheel /compat/linux/bin/arch



# chmod 0755 /compat/linux/bin/arch

10. Устанавливаем JRE от blackdown.org

Устанавливаем JRE от blackdown.org в /compat/linux/usr/local

# cd /compat/linux/usr



# mkdir local



# cd local



# tar --bzip2 -xvf /usr/oinstall/jre118_v3-glibc-2.1.3.tar.bz2



# cd jre118_v3



# ln -s . linux



# cd bin



# ln -s i686 linux



# cd ../lib



# ln -s i686 linux

Такое количество символических ссылок объясняется тем, что некоторые утилиты Oracle8i используют эти пути, а раз используют, значит, они должны быть для того, чтобы обеспечить нормальную работу этих утилит.


11. Устанавливаем JDK 1.2.2 от Sun Microsystems, Inc.

Устанавливаем JDK 1.2.2 для Linux от Sun Microsystems, Inc. Дистрибутив JDK придется загрузить самостоятельно и положить в директорию /usr/ports/distfiles . Чтобы узнать, откуда его можно загрузить, зайдите в директорию порта java/linux-sun-jdk12 и выполните команду make с целью fetch , в ответ Вы получите сообщение, разъясняющее, откуда можно загрузить дистрибутив. После загрузки установка происходит обычным для коллекции портов способом.

# cd /usr/ports/java/linux-sun-jdk12 && make install clean && rehash

Oracle8i будет видеть JDK как /usr/local/java , но мы устанавливаем дистрибутив Oracle8i под Linux, поэтому необходимо создать путь /compat/linux/usr/local/java

# cd /compat/linux/usr/local



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

12. Распаковываем дистрибутив Oracle8i

Распаковываем дистрибутив Oracle8i и проводим над ним небольшие манипуляции.

# cd /usr/oinstall



# tar -xfv linux81701.tar



# cd Disk1



# mv * /usr/oinstall



# cd ..



# rm -rf Disk1

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


13. Вносим изменения в дистрибутив Oracle8i

Вносим в дистрибутив Oracle8i исправления, при этом делая копию оригинальных файлов.

Необходимо, чтобы в файле /usr/oinstall/runInstaller переменной THREADS_FLAG было присвоено значение green , а не native .

# cd /usr/oinstall



# sed -i .orig -e "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 байт, должны иметь следующую последовательность:

  • для CP1251

    03 0C 23 0D 13 17 09 0E 1C 1D 20 1C 00 00 00 00
    
  • для ISO8859-5

    03 0C 23 09 13 0F 23 23 20 24 10 20 00 00 00 00
    
  • для CP866

    12 15 23 10 03 23 21 21 00 00 00 00 00 00 00 00
    

Сообщения перекодируются из кодировки msb-файла в кодировку, указанную в части CHARACTERSET , переменной окружения $NLS_LANG , и если заголовок msb-файла неверный, то вместо нужного текста идет "китайская грамота". Именно это и произошло с файлами *ru.msb , сообщения в этих файлах сохранены в кодировке ISO8859-5 , а первые 16 байт говорят, что сообщения в CP1251 . Поэтому скрипт /usr/oracle/root и предусматривает изменение в файлах *ru.msb первых 16 байт, записывая в начало каждого русского msb-файла правильную последовательность байт, которые информируют СУРБД Oracle8i, что исходные сообщения в кодировке ISO8859-5 . Даже если Вы не собираетесь устанавливать поддержку русского языка, то как минимум один msb-файл для каждого языка все равно будет установлен в директорию $ORACLE_HOME/oracore/mesg , в том числе и один неправильный msb-файл русских сообщений.

Однако до момента, когда будет нужно запустить /usr/oinstall/root , придется еще поработать, поэтому пока забудем про этот файл.


20. Передадим директорию /usr/oracle пользователю oracle

Передаем директорию /usr/oracle и все ее содержимое в распоряжение пользователю oracle .

# chmod 0755 /usr/oracle



# chmod 0644 /usr/oracle/.profile



# chmod 0644 /usr/oracle/root



# chown -R oracle:dba /usr/oracle

21. Создаем конфигурацию нового ядра

Создаем конфигурацию нового ядра с поддержкой System V. Необходимо, чтобы в новой конфигурации обязательно присутствовали следующие параметры:

maxusers   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 installkerne
Published At
Categories with 数据库类
comments powered by Disqus