Você pode usar os scripts dbstart
/ dbshut
que 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/oratab
arquivo:
# 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 start
soluçã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.