Данная статья вряд ли будет интересна ораклиным гуру, разве что как объект критики. Мой опыт администрирования серверов Oracle в системе Linux составляет чуть больше года. Процесс установки сервера баз данных Oracle, как 10g так и 11g, описан достаточно хорошо во многих источниках, например здесь, или здесь, или здесь, либо на русском вот здесь, поэтому останавливаться на данном вопросе не будем.

Предположим что у нас стоит задача установки 2 независимых серверов баз данных Oracle, например Oracle 10gR2 и Oracle11gR1 на одном Linux сервере(разные варианты виртуализации рассматривать не будем, предположим что у нас 1 самый обычный сервер с установленной системой Linux на борту). Именно с такой задачей в свое время столкнулся я, и решение было найдено не сразу. В качестве системы Linux будем рассматривать CentOS 5.4(подойдет и любой другой вариант RedHat, Fedora, etc). Что же нам для этого надо? Для начала установим наши Oracle, при чем каждый в своем отдельном каталоге. У меня для всего ораклиного хозяйства отведен раздел /opt. В нем я создал каталог oracle и туда буду устанавливать наши сервера Oracle. Чтобы избежать лишних проблем и конфликтов, создадим 2-х системных пользователей oracle10 и oracle11, каждый из которых будет использоваться для работы серверов 10g и 11g соответсвенно. Группы же(dba, oinstall) оставим общими, то есть добавим обеих наших пользователей в обе группы.
Итак, следуя вышеуказанным инструкциям по установке, устанавливаем Oracle 10gR2 в каталог /opt/oracle/product/10.2.0, а Oracle 11gR1 в /opt/oracle/product/11.2.0, используя при этом соответствующие системные аккаунты(oracle10 для установки Oracle 10gR2, oracle11 для установки Oracle 11gR1). После того как установка закончена, отредактируем конфигурационные файлы .bash_profile, находящиеся в домашних каталогах пользователей oracle10 и oracle11(по умолчанию для пользователей в моей системе используется оболочка bash). Отредактируем их так, чтобы они выглядели следующим образом, для oracle10:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
ORACLE_SID=orcl
ORACLE_HOME_LISTNER=$ORACLE_HOME

LD_LIBRARY_PATH=$ORACLE_HOME/lib

PATH=$PATH:$HOME/bin:/$ORACLE_HOME/bin

export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH


и для oracle11 соответственно:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
ORACLE_SID=orcl2
ORACLE_HOME_LISTNER=$ORACLE_HOME

LD_LIBRARY_PATH=$ORACLE_HOME/lib

PATH=$PATH:$HOME/bin:/$ORACLE_HOME/bin

export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH


И наконец, создадим соответствующие сценарии запуска для обеих серверов. Для этого в каталоге /etc/rc.d/init.d создадим файлы oradb10 и oradb11.
Содержимое oradb10:

case "$1" in
start) echo «Starting Oracle Database(s)»
su – oracle10 -c «lsnrctl start; dbstart $ORACLE_HOME; emctl start dbconsole»
touch /var/lock/subsys/oracle10
;;
stop) echo «Shutting down Oracle Database(s)»
rm -f /var/lock/subsys/oracle10
su – oracle10 -c «emctl stop dbconsole; dbshut $ORACLE_HOME; lsnrctl stop»
;;
*)
echo $«Usage: $0 {start|stop}»
esac


Содержимое oradb11:

case "$1" in
start) echo «Starting Oracle Database(s)»
su — oracle11 -c «lsnrctl start; dbstart $ORACLE_HOME; emctl start dbconsole»
touch /var/lock/subsys/oracle11
;;
stop) echo «Shutting down Oracle Database(s)»
rm -f /var/lock/subsys/oracle11
su — oracle11 -c «emctl stop dbconsole; dbshut $ORACLE_HOME; lsnrctl stop»
;;
*)
echo $«Usage: $0 {start|stop}»
esac


После чего добавим соответствующие сервисы командами:
chkconfig –add oradb10
chkconfig –add oradb11

Ну и напоследок отредактируем конфигурационный файл /etc/oratab, например следующим образом:

orcl:/opt/oracle/product/10.2.0/db_1:Y
orcl2:/opt/oracle/product/11.2.0/db_1:Y

Как несложно догадаться, в результате при старте системы теперь в каждом из наших серверов будет автоматически стартовать своя база, orcl на сервер 10g и orcl2 на сервере 11g.
Теперь если нам понадобится выполнить какие-либо действия с одним из серверов, достаточно зайти под соответствующим пользователем, например oracle10(либо выполнить команду su – oracle10), если нам нужен сервер Oracle 10g, и дальше запускать команды необходимые нам для работы с соответствующим сервером оракла, например sqlplus или другие.

Вот в принципе и все, как видим ничего сложного. Если что-то упустил или ошибся где-то думаю гуру поправят :)

UPD: Небольшая поправка: во избежание конфликта Enterprise Manager консолей необходимо поправить порт для одного из серверов со стандартного значения 1158 на какой-либо другой, например вот так:
emca -reconfig ports -DBCONTROL_HTTP_PORT <port_number>

З.Ы. Мой первый пост на хабре. Огромное спасибо хабрачеловеку №1 за инвайт!