Документ создан: 27.04.2010

dbora для одновременного запуска Oracle 10g и Oracle 11g

Захотелось (!!!) мне поставить две версии 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-подобных системах:

  1. поместите файл в /etc/init.d/ с именем, например, dbora;
  2. выставьте полномочия исполняемого файла - chmod +x /etc/init.d/dbora;
  3. и пропишите запуск на соответствующих уровнях выполнения. Можно просто выполнить chkconfig --add dbora.

После этого можно перегружать, выключать-включать машину и все базы будут пониматься автоматически.

 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate