Oracle/СПТ: различия между версиями
Строка 462: | Строка 462: | ||
Иногда при старте базы вылазиет ошибка TNS-12555: TNS:permission denied | Иногда при старте базы вылазиет ошибка TNS-12555: TNS:permission denied | ||
В этом случае нужно закомментировать строку: | В этом случае нужно закомментировать строку: | ||
<pre> | |||
LISTENER = | |||
(DESCRIPTION_LIST = | (DESCRIPTION_LIST = |
Версия от 11:07, 18 октября 2013
Версии
Проверялись следующие версии программного обеспечения:
- Альт Линукс СПТ 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 gcc-c++ findutils gawk pdksh glibc-devel libaio-devel libunixODBC-devel expat
Для сборки 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/*
Шаги мастера установки
На первом экране будет предложено ввести зарегистрированный в My Oracle Support адрес электронной почты. Если у вас его нет, просто нажмите кнопку Следующий.
Если адрес не был указан, появится диалог. Нажмите кнопку Yes.
Далее проходим шаги с параметрами по умолчанию.
На четвёртом шаге нужно указать пароль администратора (пользователя SYSTEM). Кроме того, мы выставляем Global database name orcl и меняем кодировке базы данных с CP1251 на UTF8.
На шестом шаге, если всё вышеописанное было сделано, показываются только проблемы с версиями пакетов. Ничего страшного, Oracle соберётся и с более новыми версиями. Включаем флажок «Ignore All» и продолжаем установку.
Во время сборки появляется диалоговое окно с невозможностью сборки. Исправляем сборку.
Исправление проблем сборки
В процессе установки у вас обязательно возникнет ошибка линковки. Не пугайтесь, к сожалению, это нормально. Данная ошибка связана с тем, что 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.
При желании можно завести пользователей и назначить им пароли, нажав на кнопку «Password Management».
Послеустановочные действия
После установки и создания базы данных вам потребуется открыть выполнить два скрипта под правами пользователя root.
Откройте терминал, войдите под root и выполните:
. /etc/sysconfig/oracle
export ORACLE_HOME
/opt/oraInventory/orainstRoot.sh
$ORACLE_HOME/root.sh
Окончательный экран с результатом установки:
TZUpdater
После всех манипуляций и установок, у вас может не запускаться DBConsole. Это связано с тем, что не совпадают часовые пояса. Для того, чтобы это исправить необходимо проделать следующие манипуляции:
- Установить последний "Timezone Updater Tool" на используемую в Oracle Java (Внимание! доступно только для владельцем MyOracle Support Account);
- Установить патч 12949905 на сервер Oracle.
Запуск СУБД
Для того, чтобы запустить СУБД, выполните:
. /etc/sysconfig/oracle
export ORACLE_HOME
$ORACLE_HOME/bin/dbstart $ORACLE_HOME
Управление сервером
Откройте веб-браузер и введите адрес (указание протокола https обязательно!):
https://адрес_сервера:1158/em
примите самоподписанный сертификат, укажите имя (по умолчанию SYSTEM и пароль администратора, указанный при установке). Нажмите кнопку Login.
Ссылки
Запуск базы и возможные проблемы
Перезапускаем сервер и видим сдедующее:
[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/oractab следующего содержания:
-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)) ) )
Ну, вроде, всё. После этих манипуляций должно всё работать.