CentOS: установка Oracle Database 11g

Автор: | 10/12/2013
 

oracle_logo2Т.к. Oracle Database будет устанавливаться на сервер, где X-сервера нет, то установим Xming на рабочей машине с Windows.

Качаем и устанавливаем.

Редактируем файл C:Program Files (x86)XmingX0.hosts, добавляем в него IP или имена хостов, которым можно подключаться к этой машине:

CentOS: установка Oracle Database 11g

Редактируем C:WindowsSystem32driversetc и добавляем адрес и имя сервера, на котором будет устанавливаться Oracle.

Переходим к самому серверу.

Установка производится на:

# uname -a
Linux cent2 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
CentOS release 6.4 (Final)

Обновляем все установленные пакеты:

# yum update

Открываем файл /etc/sysconfig/network, проверяем соответствие имени хоста:

HOSTNAME=cent2

Проверяем файл /etc/hosts:

# cat /etc/hosts | grep cent2
127.0.0.1               cent2 localhost.localdomain localhost

Обратите внимание, что имя хоста должно идти первым, до localhost и прочего. Иначе будет ошибка, описанная ниже.

# cd /etc/yum.repos.d

Устанавливаем Oracle Public Yum:

# wget https://public-yum.oracle.com/public-yum-ol6.repo

Устанавливаем ключ:

# wget https://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle

В случае ошибки «Connecting to public-yum.oracle.com|95.100.248.80|:443… failed: Connection refused«. — можно установить репозиторий вручную.

Устанавливаем пакет oracle-rdbms-server-11gR2-preinstall, который установит все необходимые зависимости, создаст пользователя, группы и установит limits:

# yum install oracle-rdbms-server-11gR2-preinstall
...
--> Running transaction check
---> Package oracle-rdbms-server-11gR2-preinstall.i686 0:1.0-7.el6 will be installed
--> Processing Dependency: kernel-uek for package: oracle-rdbms-server-11gR2-preinstall-1.0-7.el6.i686
...
Total download size: 52 M
Installed size: 145 M
...
Installed:
oracle-rdbms-server-11gR2-preinstall.i686 0:1.0-7.el6
...
Complete!

Качаем архив с необходимым пакетом со страницы загрузок сайта Oracle. Отмечаем «Accept License Agreement«, в данном примере устанавливаться будет:

Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86
Download linux_11gR2_database_1of2.zip (1,285,396,902 bytes) (cksum — 2237015228)
Download linux_11gR2_database_2of2.zip (995,359,177 bytes) (cksum — 2649514514)

Проверяем наличие пользователя:

# cat /etc/passwd | grep oracle
oracle:x:54321:54321::/home/oracle:/bin/bash

Проверяем группы:

# cat /etc/group | tail -n 2
oinstall:x:54321:
dba:x:54322:oracle

Устанавливаем пароль пользователю:

# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

Отключаем SELinux.

Далее действия выполняем от пользователя oracle:

# su -l oracle

Проверяем установленные ограничения для пользователя:

$ cat /etc/security/limits.conf | grep oracle
# oracle-rdbms-server-11gR2-preinstall setting for nofile soft limit is 1024
oracle   soft   nofile    1024
# oracle-rdbms-server-11gR2-preinstall setting for nofile hard limit is 65536
oracle   hard   nofile    65536
# oracle-rdbms-server-11gR2-preinstall setting for nproc soft limit is 2047
oracle   soft   nproc    2047
# oracle-rdbms-server-11gR2-preinstall setting for nproc hard limit is 16384
oracle   hard   nproc    16384
# oracle-rdbms-server-11gR2-preinstall setting for stack soft limit is 10240KB
oracle   soft   stack    10240
# oracle-rdbms-server-11gR2-preinstall setting for stack hard limit is 32768KB
oracle   hard   stack    32768

В случае необходимости — их можно изменить.

Вывести текущие данные для пользователя можно командой ulimit. Например — посмотреть ограничения на количество одновременно открытых файлов:

$ ulimit -n
1024

Ограничение на максимальное количество процессов:

$ ulimit -u
2047

При достижении параметра soft limit для nofile — система будет сообщать об ошибке:

fork: retry: Resource temporarily unavailable

В таком случае можно изменить лимит командой:

$ ulimit -u 2048

Но нельзя увеличить лимит свыше параметра, указанного как hard.

Создадим домашнюю директорию для самого Oracle:

$ mkdir u01

Директорию для баз:

$ mkdir u01/app/oracle/product/11.2.0/dbhome_1

Редактируем .bashrc:

TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=cent2.localhost1; export ORACLE_HOSTNAME
ORACLE_UNQNAME=DB11G; export ORACLE_UNQNAME
ORACLE_BASE=/home/oracle/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH export PATH

Перечитываем файл:

$ . .bashrc

Устанавливаем вывод DISPLAY на IP машины с Windows:

$ export DISPLAY=10.249.***.**:0.0

Запускаем терминал:

$ xterm
Warning: Cannot convert string "nil2" to type FontStruct
xterm: cannot load font -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1

На машине с Windows должно открыться окно:

CentOS: установка Oracle Database 11g

В случае ошибки вида:

$ xterm
No protocol specified

Проверяем логи Xming-а (правой кнопкой на иконке в трее — View Log).

Разархивируем пакет с Oracle Database 11g:

$ unzip linux_11gR2_database_1of2.zip
$ unzip linux_11gR2_database_2of2.zip

В окне xterm на Windows запускаем установку:

$ ./database/runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 80 MB. Actual 25721 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4062 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-10-11_12-07-31PM. Please wait ...

Должно появится окно:

CentOS: установка Oracle Database 11g

Заполняем поля, жмём Next. Устанавливаем параметры proxy, если требуется:

CentOS: установка Oracle Database 11g

В данном случае Oracle будет использовать локальный CNTLM-прокси.

Есил не хотите получать обновления и прочее — поставьте галочку:

CentOS: установка Oracle Database 11g

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

Создаём новую базу данных:

CentOS: установка Oracle Database 11g

Выбираем тип установки Server Class:

CentOS: установка Oracle Database 11g

Указываем Single Instance:

CentOS: установка Oracle Database 11g

Выбираем Typical install:

CentOS: установка Oracle Database 11g

Далее нам необходимо указать пути к каталогам, которые мы задали в .bashrc:

$ tree -L 5
...
└── u01
└── app
└── oracle
└── product
└── 11.2.0

Будем использовать принятые по-умолчанию значения:

ASMSNMP Password — оставляем пустым;
Database Edition — в данном случае подойдёт Standart Edition One, но на рабочий сервер лучше всё-таки Enterprise Edition. Разница хорошо видна тут>>>.
OSDBA group — по-умолчанию принята dba, но в данном случае нужна oistall:

$ cat /etc/group | tail -n 2
oinstall:x:54321:
dba:x:54322:oracle

Проверим группы пользователя:

# groups oracle
oracle : oinstall dba

Если необходимо — добавьте вручную:

# useradd -G oinstall oracle

CentOS: установка Oracle Database 11g

Если кликнуть на значок ? слева от поля — появится окно с описанием каждого пункта.

Указываем директорию для файлов установки:

CentOS: установка Oracle Database 11g

Начинаются различные предустановочные проверки:

CentOS: установка Oracle Database 11g

Проверка необходимых зависимостей:

CentOS: установка Oracle Database 11g

Устанавливаем необходимое:

# yum -y install elfutils-libelf-devel unixODBC unixODBC-devel pdksh

Копировать можно прямо из окна инсталятора, но иногда приходится несколько раз выполнять Ctrl+C и Ctrl+V.

Возможна ошибка:

No package pdksh available.

Нажимаем Check again:

Теперь не хвататет только пакета pdksh-5.2.14. Однако, на официальной странице руководства Oracle об этом поминается, и сказано:

11.2.0.1: The installer shows multiple «missing package» failures because it does not recognize several of the newer version packages that were installed. These «missing package» failures can be ignored as the packages are present. The failure for the «pdksh» package can be ignored because we installed the «ksh» package in its place.

Проверяем:

# yum info ksh
...
Installed Packages
Name        : ksh
...
Repo        : installed

ОК, ставим галочку Ignore All и нажимаем Next:

CentOS: установка Oracle Database 11g

Последний раз всё проверяем:

CentOS: установка Oracle Database 11g

Если есть необходимость повторной установки в Silent Mode Installation — сохраните файл, нажав кнопку Save Response File.

Запускаем установку:

CentOS: установка Oracle Database 11g

В случае ошибки Oracle Net Configuration Assistant failed:

CentOS: установка Oracle Database 11g

Проверьте файл /etc/hosts — первым в нём должно идти имя машины:

# cat /etc/hosts | head -n 1
127.0.0.1       cent2       localhost.localdomain localhost

После этого — нажимаем Retry:

CentOS: установка Oracle Database 11g

Начинается копирование файлов базы:

CentOS: установка Oracle Database 11g

Можно понаблюдать за логами:

# ls -l /home/oracle/u01/app/oracle/cfgtoollogs/dbca/orcl/
total 56
-rw-r-----. 1 oracle oinstall   276 Oct 12 07:30 cloneDBCreation.log
-rw-r-----. 1 oracle oinstall   330 Oct 12 07:30 CloneRmanRestore.log
-rw-r-----. 1 oracle oinstall  1888 Oct 12 07:30 initorclTemp.ora
-rw-r-----. 1 oracle oinstall  1428 Oct 12 07:28 rmanRestoreDatafiles.sql
-rw-r-----. 1 oracle oinstall 40640 Oct 12 07:30 trace.log
# tail -f /home/oracle/u01/app/oracle/cfgtoollogs/dbca/orcl/trace.log
[Thread-14] [ 2013-10-12 07:30:54.828 EDT ] [CloneDBCreationStep.executeImpl:521]  Removing existing services from sourcedb seeddata
[Thread-14] [ 2013-10-12 07:30:55.037 EDT ] [CloneDBCreationStep.executeImpl:526]  Renaming globale_name
[Thread-14] [ 2013-10-12 07:30:55.073 EDT ] [CloneDBCreationStep.executeImpl:601]  Temp file to be added:=/home/oracle/u01/app/oracle/oradata/{DB_UNIQUE_NAME}/temp01.dbf
[Thread-14] [ 2013-10-12 07:30:55.073 EDT ] [CloneDBCreationStep.executeImpl:602]  Temp file size in KB:=20480
[Thread-14] [ 2013-10-12 07:30:55.725 EDT ] [CloneDBCreationStep.executeImpl:632]  Establish USERS as the default permanent tablespace of the database
[Thread-14] [ 2013-10-12 07:30:55.740 EDT ] [TemplateManager.isInstallTemplate:2300]  Selected Template by user:=General Purpose
[Thread-14] [ 2013-10-12 07:30:55.740 EDT ] [TemplateManager.isInstallTemplate:2307]  The Message Id to be searched:=GENERAL_PURPOSE
[Thread-14] [ 2013-10-12 07:30:56.068 EDT ] [CloneDBCreationStep.executeImpl:650]  ** INSTALL SAMPLE SCHEMA'S **
[Thread-14] [ 2013-10-12 07:30:56.068 EDT ] [CloneDBCreationStep.executeImpl:691]  Transportable datafile:=/home/oracle/u01/app/oracle/oradata/orcl/example01.dbf
[Thread-14] [ 2013-10-12 07:30:56.068 EDT ] [CloneDBCreationStep.executeImpl:698]  Script to be Excecuted ::::=/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/demo/schema/mkplug.sql

Полный лог установки — в файле:

# tail -f /home/oracle/u01/app/oraInventory/logs/installActions2013-10-12_05-53-05AM.log

В случае ошибки вида Listener is not up or database service is not registered with it:

CentOS: установка Oracle Database 11g

Проверяем настройки.

Запускаем консоль LISTENER:

$ /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/bin/lsnrctl
LSNRCTL> start
Starting /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /home/oracle/u01/app/oracle/diag/tnslsnr/cent2/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=cent2.localhost)(PORT=1521)))
TNS-12545: Connect failed because target host or object does not exist
TNS-12560: TNS:protocol adapter error
TNS-00515: Connect failed because target host or object does not exist

Listener failed to start. See the error message(s) above...

Файл /etc/hosts — первым должна идит запись об имени хоста (об этому уже упоминалось в начале статьи):

# cat /etc/hosts | head -n 1
127.0.0.1       cent2       localhost.localdomain localhost

Далее:

# cat /etc/sysconfig/network | grep HOSTNAME
HOSTNAME=cent2

Проверяем имя хоста в данный момент:

$ hostname
cent2

Проверяем файл настроек самого Listener-а — /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

$ cat /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora | grep HOST
(ADDRESS = (PROTOCOL = TCP)(HOST = cent2)(PORT = 1521))

Пробуем запустить ещё раз:

LSNRCTL> start
Starting /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /home/oracle/u01/app/oracle/diag/tnslsnr/cent2/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cent2)(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                12-OCT-2013 07:56:39
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /home/oracle/u01/app/oracle/diag/tnslsnr/cent2/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cent2)(PORT=1521)))
The listener supports no services
The command completed successfully
LSNRCTL> status
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                12-OCT-2013 07:56:39
Uptime                    0 days 0 hr. 5 min. 53 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /home/oracle/u01/app/oracle/diag/tnslsnr/cent2/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cent2)(PORT=1521)))
Services Summary...
Service "orcl.localdomain" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.localdomain" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

Проверяем порт:

# netstat -anp | grep 1521
tcp        0      0 127.0.0.1:38293             127.0.0.1:1521              ESTABLISHED 6030/ora_pmon_orcl
tcp        0      0 :::1521                     :::*                        LISTEN      6421/tnslsnr
tcp        0      0 ::ffff:127.0.0.1:1521       ::ffff:127.0.0.1:38293      ESTABLISHED 6421/tnslsnr
unix  2      [ ACC ]     STREAM     LISTENING     881216 6421/tnslsnr        /var/tmp/.oracle/sEXTPROC1521

В окне с ошибкой нажимаем OK и продолжаем установку.

В следующем окне кликаем на Password Management:

CentOS: установка Oracle Database 11g

Устанавливаем пароль для пользователя SYS:

CentOS: установка Oracle Database 11g

Жмём OK, и переходим к запуску скриптов от пользователя root:

CentOS: установка Oracle Database 11g

# /home/oracle/u01/app/oraInventory/orainstRoot.sh
Changing permissions of /home/oracle/u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /home/oracle/u01/app/oraInventory to oinstall.
The execution of the script is complete.
# /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Running Oracle 11g root.sh script...

The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME=  /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

Жмём ОК для продолжения.

Установка завершена:

CentOS: установка Oracle Database 11g

CentOS: установка Oracle Database 11g

Проверяем работу TNSLSNR:

$ tnsping localhost 10

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 12-OCT-2013 09:26:35

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

Used parameter files:
/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora

Used EZCONNECT adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
OK (20 msec)
OK (20 msec)
OK (10 msec)
OK (10 msec)
OK (20 msec)
OK (10 msec)
OK (10 msec)
OK (10 msec)
OK (10 msec)
OK (10 msec)

Проверяем наличие процесса:

$ ps -ef | grep pmon
oracle    6030     1  0 07:37 ?        00:00:05 ora_pmon_orcl

Или так:

$ ps -ef| grep $ORACLE_SID | grep -v grep | grep -v ora_
oracle   14918 14917  0 10:05 ?        00:00:04 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

Проверим работает ли сама база. Подключаемся через sqlplus:

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Oct 12 12:05:21 2013

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

Connected to:
Oracle Database 11g Release 11.2.0.1.0 - Production

SQL>
SQL> SELECT NAME FROM v$database;

NAME
---------
ORCL

Или так:

SQL> select database_status from v$instance;

DATABASE_STATUS
-----------------
ACTIVE

Возможна ошибка:

ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initDB11G.ora'

Необходимо проверить переменную $ORACLE_SID:

$ echo $ORACLE_SID
orcl

Если во время установки был указан другой SID, или отличается в файле профиля пользователя:

$ cat .bashrc | grep SID
ORACLE_SID=orcl; export ORACLE_SID

То будут возникать подобные проблемы.