Захотелось (!!!) мне поставить две версии Oracle на одну машину под управлением CentOS 5.4 одновременно, да так, чтобы и листнеры были родными.
Всё получилось в лучшем виде: софт стоит, листнеры слушают на разных портах, базы подняты и работают. Но! Как их поднять автоматом при старте машины?
Стандартный dbora, найденный в недрах бескрайнего интернета, не подходил, т.к. ORACLE_HOME он использовал один для всех инстансов. Но я же настоящий админ! :)
Итак, что у нас вышло:
#!/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.После этого можно перегружать, выключать-включать машину и все базы будут пониматься автоматически.