Oracle/СПТ

Материал из ALT Linux Wiki

Версии

Проверялись следующие версии программного обеспечения:

  • Альт Линукс СПТ 6.0 от 31.05.2012 (64-битная версия)
  • Oracle 11g R2 (64-битная версия для Linux)

Подготовка системы

Требования к условиям установки

  • Размер оперативной памяти должен быть больше 1 ГБ (1049 МБ)
  • Размер подкачки должен быть больше 1 ГБ (1049 МБ)
  • На /tmp должно быть более 1 ГБ свободного места (для этого можете добавить параметр size=1400M для tmpfs)
  • Установка осуществляется под правами обычного пользователя
  • Временный каталог должен иметь более 120 МБ свободного места
  • Установка осуществляется в графическом режиме с количеством цветов > 256
  • Программа установки не умещается в 800x600, поэтому лучше устанавливать в разрешении 1024x768
  • Должен быть правильно настроен домен. Если установка осуществляется на localhost, уберите localhost.localdomain в файле /etc/hosts

Место установки и конфигурация

Cначала определимся с конфигурацией Oracle:

  • ORACLE_BASE (/opt/oracle) — место установки Oracle
  • ORACLE_HOME (/opt/oracle/product/11.2.0) — место установки РСУБД
  • SID (orcl) — имя экземпляра базы данных

Создадим файл /etc/sysconfig/oracle с необходимыми переменными среды окружения для Oracle:

ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/11.2.0

Активизируем конфигурацию:

. /etc/sysconfig/oracle
export ORACLE_BASE ORACLE_HOME

Создадим пользователя и каталог для установки (под пользователем root):

mkdir -p $(dirname $ORACLE_HOME)
useradd oracle -d $ORACLE_HOME
mkdir /opt/oraInventory
chown -R oracle:oracle $ORACLE_BASE /opt/oraInventory
passwd oracle

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

Место во временном каталоге

Несмотря на невысокие требования программы установки, в $TMPDIR пользователя потребуется больше места при установке. Рекомендуется создать временный каталог tmp в домашнем каталоге пользователя.

mkdir ~oracle/tmp
chown oracle:oracle ~oracle/tmp

Выбрать политику временного каталога в домашней папке пользователя:

control pam_mktemp disabled

Установка параметров ядра и лимитов

В файл /etc/sysctl.conf добавьте строки:

kernel.shmmax = 1073741824
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576

В файл /etc/security/limits.conf добавьте строки:

oracle hard nproc 16384
oracle soft nproc 2047
oracle hard nofile 65536

Установка пакетов для сборки

Вставьте диск и выполните:

apt-get update
apt-get install make gcc4.5 gcc4.5-c++ findutils gawk pdksh glibc-devel libaio-devel libunixODBC-devel expat
Внимание! Используя только диск с текущей версией сертифицированного Альт Линукс СПТ 6.0, невозможно установить Oracle 11g: отсутствует пакет libstdc++3.3


Для сборки Oracle потребуется пакет libstdc++3.3, отсутствующий на диске с дистрибутивом. Подключите онлайновый репозиторий c6 и установите пакет:

apt-repo add branch c6
apt-get update
apt-get install libstdc++3.3

Если установка должна осуществляться удалённо, то установите также

apt-get install xauth

И настройте SSH. Доступ по SSH осуществляйте с параметром -Y.

После всех операций выполните sysctl -p и начните сеанс пользователя oracle или просто перезагрузите операционную систему.

Установка

Запуск программы установки

1. Войдите в графическую среду под пользователем oracle (установка под правами суперпользователя не работает).

2. Распакуйте установочные файлы Oracle.

3. Перейдите в каталог распакованных установочных файлов Oracle и запустите

. /etc/sysconfig/oracle
export ORACLE_BASE ORACLE_HOME
./runInstaller

Примечание: каждый запуск программы установки объедает место на tmpfs. Рекомендуется перед запуском почистить временный каталог и каталоги для установки:

rm -rf $TMPDIR/OraInstall* /opt/oraInventory/*

Шаги мастера установки

OracleInstall-1.png

На первом экране будет предложено ввести зарегистрированный в My Oracle Support адрес электронной почты. Если у вас его нет, просто нажмите кнопку Следующий.

OracleInstall-1-1.png

Если адрес не был указан, появится диалог. Нажмите кнопку Yes.

Далее проходим шаги с параметрами по умолчанию.

OracleInstall-2.png

OracleInstall-3.png

OracleInstall-4.png

На четвёртом шаге нужно указать пароль администратора (пользователя SYSTEM). Кроме того, мы выставляем Global database name orcl и меняем кодировке базы данных с CP1251 на UTF8.

OracleInstall-5.png

OracleInstall-6.png

На шестом шаге, если всё вышеописанное было сделано, показываются только проблемы с версиями пакетов. Ничего страшного, Oracle соберётся и с более новыми версиями. Включаем флажок «Ignore All» и продолжаем установку.

OracleInstall-7.png

OracleInstall-8.png

OracleInstall-8-1.png

Во время сборки появляется диалоговое окно с невозможностью сборки. Исправляем сборку.

Исправление проблем сборки

В процессе установки у вас обязательно возникнет ошибка линковки. Не пугайтесь, к сожалению, это нормально. Данная ошибка связана с тем, что Oracle не обеспечивает правильный порядок линковки, что по умолчанию запрещено в дистрибутивах ALT Linux начиная с v4.0.

Мы не будем исправлять ошибки Oracle а просто обойдём их, разрешив сборку в неправильной последовательности. Для этого нам необходимо передать линковщику параметр --no-as-needed. Очевидно было бы использовать для этого переменную $LDFLAGS. Однако тут проявляется ещё одна особенность Oracle. Во всех make-файлах переменная $LDFLAGS переопределяется без учёта предыдущего значения. Таким образом, этой переменной воспользоваться не получится.

Когда появится сообщение об ошибке сборки, выполните под пользователем, под которым была запущена программа установки:

. /etc/sysconfig/oracle
export ORACLE_HOME
subst 's/^LD="gcc/LD="gcc -Wl,--no-as-needed/' $ORACLE_HOME/bin/genorasdksh
subst 's/^LDFLAGS=-o/LDFLAGS=-Wl,--no-as-needed -o/g' $(find $ORACLE_HOME -name env_\*.mk)

Затем вернитесь в окно программы установки и нажмите кнопку Retry.

Создание базы данных

База будет создана автоматически с одним предупреждением. В диалоговых окнах нажимайте OK.

OracleInstall-db-1.png

OracleInstall-db-2.png

При желании можно завести пользователей и назначить им пароли, нажав на кнопку «Password Management».

OracleInstall-db-3.png

Послеустановочные действия

После установки и создания базы данных вам потребуется открыть выполнить два скрипта под правами пользователя root.

OracleInstall-root-cmds.png

Откройте терминал, войдите под root и выполните:

. /etc/sysconfig/oracle
export ORACLE_HOME
/opt/oraInventory/orainstRoot.sh
$ORACLE_HOME/root.sh

Окончательный экран с результатом установки:

OracleInstall-9.png

TZUpdater

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

  1. Установить последний "Timezone Updater Tool" на используемую в Oracle Java (Внимание! доступно только для владельцем MyOracle Support Account);
  2. Установить патч 12949905 на сервер Oracle.

Запуск СУБД

Для того, чтобы запустить СУБД, выполните:

. /etc/sysconfig/oracle
export ORACLE_HOME
$ORACLE_HOME/bin/dbstart $ORACLE_HOME

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

Откройте веб-браузер и введите адрес (указание протокола https обязательно!):

https://адрес_сервера:1158/em

примите самоподписанный сертификат, укажите имя (по умолчанию SYSTEM и пароль администратора, указанный при установке). Нажмите кнопку Login.

Oracle-web-1.png

Ссылки


Запуск базы и возможные проблемы

Перезапускаем сервер и видим сдедующее:

[my@virtual7 ~]$ su -l oracle
Password: 
-bash-3.2$ cd bin
-bash-3.2$ ./sqlplus system/1
Error 6 initializing SQL*Plus
SP2-0667: Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
-bash-3.2$ export ORACLE_HOME=/opt/oracle/product/11.2.0
-bash-3.2$ export ORACLE_SID=ORCL
-bash-3.2$ ./sqlplus system/1

SQL*Plus: Release 11.2.0.1.0 Production on Fri Oct 18 11:22:58 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0


Enter user-name: 

То есть Oracle у нас не поднялся. Есть файлик /etc/oratab следующего содержания:

-bash-3.2$ tail /etc/oratab 
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
orcl:/opt/oracle/product/11.2.0:N

Если заменить N на Y, то теоретически Oracle должен запускаться автоматически при старте сервера, но это почему-то не работает. Проверяли даже на Oracle Linux. Кстати, script $ORACLE_HOME/bin/dbstart тоже не запускает базу (надо разбираться почему). База запускается следующим образом:

-bash-3.2$ ./sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Fri Oct 18 11:27:25 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/11.2.0/dbs/initORCL.ora'
SQL> 
По идее она должна стартануть, но у нас вылазиет ошибка. Надо её исправить.
Исправляется следующим образом:
-bash-3.2$ cd dbs/
-bash-3.2$ cp init.ora initORCL.ora
-bash-3.2$ gedit initORCL.ora

И файлик initORCL.ora приводится к следующему виду:

db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='/opt/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/opt/oracle/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCL)'
open_cursors=300 
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files = (/opt/oracle/oradata/orcl/control01.ctl, /opt/oracle/flash_recovery_area/orcl/control02.ctl)
compatible ='11.2.0'

/opt/oracle/oradata/orcl/control01.ctl, /opt/oracle/flash_recovery_area/orcl/control02.ctl - это какие-то контрольные файлы Oracle. Они ему очень нужны. Но почему-то после установки нужно ручками создать файлик initORCL.ora, найти эти файлы и ручками прописать пути к ним. Тогда эта проблема решится.

Далее должно всё работать:

SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
Но нет!
Вылазиет вот такая ошибка.
Решается она так:
mount -t tmpfs shmfs -o size=1500m /dev/shm
Ну, всё. База стартанула:
SQL> startup
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size		    2220200 bytes
Variable Size		  616566616 bytes
Database Buffers	  444596224 bytes
Redo Buffers		    5554176 bytes
Database mounted.
Database opened.

Проверить запущенность Oracle можно так:

[root@virtual7 ~]# ps -ef | grep pmon
oracle    6085     1  0 11:36 ?        00:00:00 ora_pmon_ORCL 
root      6705  5987  0 11:44 pts/2    00:00:00 grep --color=auto pmon 
[root@virtual7 ~]#

Теперь чтобы подсоединиться к СУБД каким-нибудь клиентом нужно запустить слушатель. Запускается он так:

-bash-3.2$ ./lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-OCT-2013 11:43:40

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Message 1070 not found; No message file for product=network, facility=TNSTNSLSNR for Linux: Version 11.2.0.1.0 - Production
Message 279 not found; No message file for product=network, facility=NL
Message 1073 not found; No message file for product=network, facility=TNS
Message 1053 not found; No message file for product=network, facility=TNSMessage 1020 not found; No message file for product=network, facility=TNSMessage 1021 not found; No message file for product=network, facility=TNSMessage 1022 not found; No message file for product=network, facility=TNSMessage 1023 not found; No message file for product=network, facility=TNSMessage 1026 not found; No message file for product=network, facility=TNSMessage 1034 not found; No message file for product=network, facility=TNSMessage 1024 not found; No message file for product=network, facility=TNSMessage 1025 not found; No message file for product=network, facility=TNSMessage 1040 not found; No message file for product=network, facility=TNSMessage 1028 not found; No message file for product=network, facility=TNSMessage 1415 not found; No message file for product=network, facility=TNS  Message 1050 not found; No message file for product=network, facility=TNS
Message 1030 not found; No message file for product=network, facility=TNSMessage 1052 not found; No message file for product=network, facility=TNS-

Если вывалилось такое сообщение, то значит вы открыли новую сессию терминала и забыли выполнить это:

export ORACLE_HOME=/opt/oracle/product/11.2.0
export ORACLE_SID=ORCL

В операционных системах серии MUST DIE от мелкомягких в службах можно увидеть 2 службы Oracle: одна СУБД, а другая слушатель. Они должны быть запущены обе.

-bash-3.2$ ./lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-OCT-2013 11:41:14

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Message 1053 not found; No message file for product=network, facility=TNSTNS-12541: Message 12541 not found; No message file for product=network, facility=TNS
 TNS-12560: Message 12560 not found; No message file for product=network, facility=TNS
  TNS-00511: Message 511 not found; No message file for product=network, facility=TNS
   Linux Error: 111: Connection refused

Ещё разок:

-bash-3.2$ ./lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-OCT-2013 11:45:57

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Starting /opt/oracle/product/11.2.0/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /opt/oracle/product/11.2.0/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/virtual7/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                18-OCT-2013 11:46:00
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/virtual7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
The listener supports no services
The command completed successfully
-bash-3.2$ 

Обратите внимание на строку "The listener supports no services". Это означает, что слушатель соединений стартовал, но у него нет зарегистрированных сервисов, принимающих соединения. Они бывают статические и динамические. Статические прописываются в /opt/oracle/product/11.2.0/network/admin/listener.ora, а динамически Oracle сам регистрирует как-то там сам, производя поиск раз в какое-то время, соизмеримое с минутой. У меня он их находит через 20 секунд после запуска слушателя.

-bash-3.2$ ./lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-OCT-2013 11:52:31

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                18-OCT-2013 11:46:00
Uptime                    0 days 0 hr. 6 min. 31 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/virtual7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
Services Summary...
Service "ORCL" has 1 instance(s).
  Instance "ORCL", status READY, has 2 handler(s) for this service...
The command completed successfully
-bash-3.2$ 

В данном случае всё завелось. И теперь внешние клиенты, например SQL Developer могут подсоединяться к СУБД.

Но тут есть ещё 1 ньюанс. Если по каким-то причинам /opt/oracle/product/11.2.0/network/admin/listener.ora будет настроен неправильно после установки, то будем иметь при попытке соединения ошибку TNS-12505 или что-то подобное. Дело в том что в listener.ora могут быть неправильные настройки. Тогда можно его совсем удалить или переименовать. Тогда слушатель Oracle будет использовать настройки по умолчанию, с которыми он скорее всего заведётся.

Бывает ещё 1 ньюанс:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

  )


ADR_BASE_LISTENER = /opt/oracle Иногда при старте базы вылазиет ошибка TNS-12555: TNS:permission denied В этом случае нужно закомментировать строку:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

#     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

  )

Ну, вроде, всё. После этих манипуляций должно всё работать.