06.01.2013

Установка и настройка Oracle 11g под RHEL 5

Цель: установить и настроить Oracle 11g под RHEL 5 (OEL) x64, создать пользователя, подключиться к экземпляру с windows-машины и создать тестовую таблицу emp.
Итак, у нас имеется два zip с дистрибутивом СУБД и свежеустановленная OEL 5.

Этап 1. Пре-конфигурирование 
 - значения констант в файле /etc/sysctl.conf должны быть не нижe следующих (каждое значение можно вручную задать с помощью sysctl -w):
kernel.shmall = physical RAM size / pagesize (2097152). 
kernel.shmmax = 1/2 of physical RAM. (2147483648)
kernel.sem = 250 32000 100 128
fs.file-max = 512 x processes (for example 6815744 for 13312 processes)
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576 
 - устанавливаем необходимые пакеты. Из не нужно нигде искать:), достаточно закачать из публичного репозитария и установить
cd /etc/yum.repos.d
wget http://public-yum.oracle.com/public-yum-el5.repo
yum update
yum install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel
 - создаем структуру каталогов
//применяем сделанные изменения
sysctl -p
//создаем группу пользователей oracle
groupadd ora
//создаем пользователя oracle
useradd -d /home/oracle -g users -G ora -s /bin/bash oracle
//создаем ORACLE_HOME
mkdir -p /u01/app/oracle/product/11.1.0/inst01
//создаем INVENTORY_LOCATION
mkdir -p /u01/app/oraInventory
 - создаем записи о лимитах для пользователя oracle в /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
 - делаем считывание лимитов обязательным при возникновении сессии в /etc/pam.d/login
session required pam_limits.so
 - /etc/profile: задаем переменные окружения для нашего экземпляра
if [ $USER = "oracle" ]; then
 ORACLE_BASE=/u01/app/oracle
 ORACLE_SID=ORA1
 ORACLE_HOME=/u01/app/oracle/product/11.1.0/inst01
# переменная для быстрого доступа к файлам *.ora
ORACLE_NET=$ORACLE_HOME/network/admin
 export ORACLE_BASE ORACLE_SID ORACLE_HOME ORACLE_NET
fi

Этап 2. Установка 
- кастомизируем файл ответов для установки в тихом режиме /home/oracle/ora_inst/database/response/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=localhost.localdomain
UNIX_GROUP_NAME=ora
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en
ORACLE_HOME=/u01/app/oracle/product/11.1.0/inst01
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=false
oracle.install.db.OPER_GROUP=ora
oracle.install.db.DBA_GROUP=ora
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=ORA1
oracle.install.db.config.starterdb.SID=ORA1
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=1024
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
//all passwords is “1”
oracle.install.db.config.starterdb.password.ALL=1
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/product/11.1.0/inst01/data
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/u01/app/oracle/product/11.1.0/inst01/backup
DECLINE_SECURITY_UPDATES=true
 - ставим
runInstaller -silent -responseFile /home/oracle/ora_inst/database/response/db_install.rsp -ignorePrereq -force use_prereq_checker=false

Этап 3. Конфигурирование 
 - vi /u01/app/oracle/product/11.1.0/inst01/network/admin/listener.ora
LISTENER =
  (DESCRIPTION_LIST =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
 )
  )
 - vi /u01/app/oracle/product/11.1.0/inst01/network/admin/tnsnames.ora
ORA1 =
 (DESCRIPTION=
  (ADDRESS_LIST=
   (ADDRESS=
 (PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)
   )
  )
  (CONNECT_DATA=
   (SID=ORA1)
  )
 )
 - vi /u01/app/oracle/product/11.1.0/inst01/dbs/initORA1.ora (настраивается также мастером dbca)
db_name='ORA1'
processes = 150
audit_file_dest=$ORACLE_BASE
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest=$ORACLE_BASE
db_recovery_file_dest_size=2G
diagnostic_dest=$ORACLE_BASE
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
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= ($ORACLE_HOME/ora_control1.ctl, $ORACLE_HOME/ora_control2.ctl)compatible ='11.2.0'
- запуск Database Configuration Assistant (./dbca)
step 1

step 2

Этап 4. Запуск
 - запускаем listener
[oracle@localhost bin]$ cd $ORACLE_HOME/bin
[oracle@localhost bin]$ ./lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-JAN-2013 18:31:50

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

Starting /u01/app/oracle/product/11.1.0/inst01/bin/tnslsnr: please wait...

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                  LISTENER
Version                TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date             04-JAN-2013 18:31:51
Uptime                 0 days 0 hr. 0 min. 0 sec
Trace Level            off
Security               ON: Local OS Authentication
SNMP                   OFF
Listener Parameter File   /u01/app/oracle/product/11.1.0/inst01/network/admin/listener.ora
Listener Log File      /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
The listener supports no services
The command completed successfully
- запускаем БД
[oracle@localhost bin]$ ./sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Jan 5 14:30:54 2013

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> startup
ORACLE instance started.

Total System Global Area  626327552 bytes
Fixed Size               2215944 bytes
Variable Size          377491448 bytes
Database Buffers       239075328 bytes
Redo Buffers             7544832 bytes
Database mounted.
Database opened.
Отлично, экземпляр работает. Создадим пользователя ALEX, выдадим ему права на соединение, создание сессии, создание таблиц, а также безлимитную квоту на табличное пространство USERS. Переходим к настройке клиента по windows.

Подключение к экземпляру с клиента под windows

Вообще, здесь мало что есть описывать. Достаточно знать IP сервера БД, который можем получить командой ifconfig
[root@localhost ~]# ifconfig
eth0   Link encap:Ethernet  HWaddr 08:00:27:22:DA:07  
       inet addr:192.168.100.6  Bcast:192.168.100.255  Mask:255.255.255.0
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:3281 errors:0 dropped:0 overruns:0 frame:0
       TX packets:3053 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:1797229 (1.7 MiB)  TX bytes:713607 (696.8 KiB)
Теперь осталось прописать в локальном %ORACLE_HOME%\bin\network\admin\tnsnames.ora
ORA1 =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.100.6)(PORT=1521))
      (CONNECT_DATA=
      (SID=ORA1)
    )
  )
Наша задача выполнена:

Грабли
Проброс соединения между основной и гостевой машинами (Virtusl Box) Достаточно настроить создаваемый программой виртуальный сетевой адаптер на любой IP из подсети хозяйской ОС. В настройках гостевой ОС создать единственное подключение типа Bridge, в котором в качестве устройства выбрать виртуальный сетевой адаптер. Не нужно создавать в системе никаких мостов, потому как виртуальное сетевой устройство Virtual Box по сути уже является мостом. В противном случае возникнет кольцо, и система автоматически его устранит.

Проблема с доступом к библиотеке *.so при развертывании БД. 
# vi /etc/selinux/config
SELINUX=permissive

Проблема с кодировкой сообщений ORA => установить переменную среды NLS_LANG=AMERICAN_AMERICA.UTF8

Смотрим внимательно в файл $ORACLE_NET/sqlnet.ora. Там должно быть
SQLNET.AUTHENTICATION_SERVICES=(ALL)
NAMES.DIRECTORY_PATH=(TNSNAMES,ONAMES,HOSTNAME)
Именно ALL, поскольку с NONE или NLS у нас не хватит прав, чтобы войти даже под SYSDBA

Проверка статуса. После выполнения startup из-под SYSDBA желательно убедиться с том, что база смонтирована на экземпляр и открыта:
select status from v$instansce
Результат должен быть именно OPEN. Если результат MOUNTED или STARTED, то необходимо сконфигурировать базу с помощью $ORACLE_HOME/bin/dbca

Комментариев нет :