Puede usar los scripts dbstart
/ dbshut
que vienen con una instalación de Oracle. Están disponibles bajo $ORACLE_HOME/bin
.
Después de una nueva instalación, debe editar el /etc/oratab
archivo:
# 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
Entonces puedes usar los scripts como este:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart
trae todo lo que se necesita para los programas Pro * C / OCI.
Usar dbstart
/ dbshut
es una mejora por encima del método personalizado mencionado en la pregunta:
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
(veces en un sistema Core i7 / 2.8GHz, disco duro de giro lento).
Cómo funciona dbstart / dbshut
Una dbstart $ORACLE_HOME$
llamada es básicamente equivalente a:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
Y a dbshut $ORACLE_HOME$
es básicamente equivalente a:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(puede verificar si todo está apagado a través de ps aux | grep 'tnsl\|ora'
)
Tenga en cuenta que el orden de los comandos es importante. Eso significa que cuando lsnrctl start
se ejecuta después del comando sqlplus-startup, el programa Pro * C / OCI todavía se queja de un escucha TNS no disponible.
Y este es exactamente el problema con la secuencia de comandos en la pregunta, donde la emctl start
solución alternativa es el orden incorrecto porque corrige la parte de configuración del oyente TNS.
También tenga en cuenta que para ejecutar programas Pro * C / OCI no se necesita el servicio EMCTL.