È possibile utilizzare gli script dbstart
/ dbshut
forniti con un'installazione Oracle. Sono disponibili sotto $ORACLE_HOME/bin
.
Dopo una nuova installazione devi modificare il /etc/oratab
file:
# cat /etc/oratab
# format: $ORACLE_SID:$ORACLE_HOME:N|Y
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:N
# sed -i 's/:N$/:Y/' /etc/oratab
# grep my_sid /etc/oratab
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:Y
Quindi puoi usare gli script in questo modo:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart
riporta tutto ciò che è necessario per i programmi Pro * C / OCI.
L'uso di dbstart
/ dbshut
è un miglioramento rispetto al metodo personalizzato menzionato nella domanda:
method time called tools
―――――――――――――――――――――――――――――――――――――――――――――――――――――
dbstart 5.7 s lsnrctl, sqlplus
dbshut 5.7 s lsnrctl, sqlplus
custom startup 27.9 s lsnrctl, sqlplus, emctl
custom shutdown 31.0 s lsnrctl, sqlplus, emctl
(volte su un sistema Core i7 / 2.8GHz, disco rigido a rotazione lenta.)
Come funzionano dbstart / dbshut
Una dbstart $ORACLE_HOME$
chiamata equivale sostanzialmente a:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
E a dbshut $ORACLE_HOME$
è sostanzialmente equivalente a:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(puoi verificare se tutto è spento tramite ps aux | grep 'tnsl\|ora'
)
Si noti che l'ordine dei comandi è importante. Ciò significa che quando lsnrctl start
viene eseguito dopo il comando sqlplus-startup, il programma Pro * C / OCI si lamenta ancora di un listener TNS non disponibile.
E questo è esattamente il problema con la sequenza di comandi nella domanda: dove il emctl start
giusto aggira l'ordine sbagliato perché corregge la parte di installazione del listener TNS.
Si noti inoltre che per l'esecuzione dei programmi Pro * C / OCI non è necessario il servizio EMCTL.