Você pode usar os scripts dbstart/ dbshutque vêm com uma instalação do Oracle. Eles estão disponíveis em $ORACLE_HOME/bin.
Após uma nova instalação, você deve editar o /etc/oratabarquivo:
# 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
Então você pode usar os scripts assim:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart traz tudo o que é necessário para os programas Pro * C / OCI.
Usar dbstart/ dbshuté uma melhoria acima do método personalizado mencionado na pergunta:
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
(vezes em um sistema Core i7 / 2.8GHz, disco rígido giratório lento.)
Como o dbstart / dbshut funciona
Uma dbstart $ORACLE_HOME$chamada é basicamente equivalente a:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
E a dbshut $ORACLE_HOME$é basicamente equivalente a:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(você pode verificar se tudo está encerrado via ps aux | grep 'tnsl\|ora')
Observe que a ordem dos comandos é importante. Isso significa que, quando lsnrctl starté executado após o comando sqlplus-startup, o programa Pro * C / OCI ainda reclama de um ouvinte de TNS indisponível.
E este é exatamente o problema com a sequência de comandos na pergunta - onde a emctl startsolução alternativa é a ordem errada, porque corrige a parte da instalação do ouvinte TNS.
Observe também que, para executar programas Pro * C / OCI, o serviço EMCTL não é necessário.