Захотелось (!!!) мне поставить две версии Oracle на одну машину под управлением CentOS 5.4 одновременно, да так, чтобы и листнеры были родными.
Всё получилось в лучшем виде: софт стоит, листнеры слушают на разных портах, базы подняты и работают. Но! Как их поднять автоматом при старте машины?
Стандартный dbora, найденный в недрах бескрайнего интернета, не подходил, т.к. ORACLE_HOME он использовал один для всех инстансов. Но я же настоящий админ! :)
Итак, что у нас вышло - dbora (после скачивания переименуйте файл):
#!/bin/sh # chkconfig: 345 99 10 # description: Oracle auto start-stop script. ORATAB="/etc/oratab" start () { ORACLE_OWNER=$1; ORACLE_HOME=$2; ORACLE_SID=$3; # Start the Oracle databases: su - $ORACLE_OWNER -c "export ORACLE_HOME=$ORACLE_HOME;export ORACLE_SID=$ORACLE_SID;$ORACLE_HOME/bin/sqlplus / as sysdba << EOF startup; quit; EOF;" & su - $ORACLE_OWNER -c "export ORACLE_HOME=$ORACLE_HOME;$ORACLE_HOME/bin/lsnrctl start" & } stop () { ORACLE_OWNER=$1; ORACLE_HOME=$2; ORACLE_SID=$3; # Stop the Oracle databases: su - $ORACLE_OWNER -c "export ORACLE_HOME=$ORACLE_HOME;export ORACLE_SID=$ORACLE_SID;$ORACLE_HOME/bin/sqlplus / as sysdba << EOF shutdown immediate; quit; EOF;" & su - $ORACLE_OWNER -c "export ORACLE_HOME=$ORACLE_HOME;$ORACLE_HOME/bin/lsnrctl stop" & } for i in $(cat $ORATAB | grep -v "^$" | grep -v "^#" | grep ":Y$") do ORACLE_OWNER=oracle ORACLE_SID=$(echo $i | cut -d':' -f1) ORACLE_HOME=$(echo $i | cut -d':' -f2) case "$1" in 'start') start $ORACLE_OWNER $ORACLE_HOME $ORACLE_SID; ;; 'stop') stop $ORACLE_OWNER $ORACLE_HOME $ORACLE_SID; ;; esac done
Суть в том, что в /etc/oratab
(для Solaris - /var/opt/oracle/oratab
) имеется и SID, и ORACLE_HOME, и указание стартовать или нет данный инстанс.
Почему бы не воспользоваться этим?
$(cat $ORATAB | grep -v "^$" | grep -v "^#" | grep ":Y$")
- выдёргивает все данные о разрешённых к запуску экземплярах и,
на основе полученных данных, производит запуск баз и листенеров.
В RedHat-подобных системах:
/etc/init.d/
с именем, например, dbora
;chmod +x /etc/init.d/dbora
;chkconfig
-
-add dbora
.После этого можно перегружать, выключать-включать машину и все базы будут пониматься автоматически.