Vous pouvez utiliser les scripts dbstart
/ dbshut
fournis avec une installation Oracle. Ils sont disponibles sous $ORACLE_HOME/bin
.
Après une nouvelle installation, vous devez modifier le /etc/oratab
fichier:
# 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
Ensuite, vous pouvez utiliser les scripts comme ceci:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart
apporte tout ce qui est nécessaire pour les programmes Pro * C / OCI.
L'utilisation de dbstart
/ dbshut
est une amélioration par rapport à la méthode personnalisée mentionnée dans la question:
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
(fois sur un système Core i7 / 2,8 GHz, disque dur à rotation lente.)
Fonctionnement de dbstart / dbshut
Un dbstart $ORACLE_HOME$
appel équivaut essentiellement à:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
Et a dbshut $ORACLE_HOME$
est fondamentalement équivalent à:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(vous pouvez vérifier si tout est arrêté via ps aux | grep 'tnsl\|ora'
)
Notez que l'ordre des commandes est important. Cela signifie que lorsque lsnrctl start
est exécuté après la commande sqlplus-startup, le programme Pro * C / OCI se plaint toujours d'un écouteur TNS non disponible.
Et c'est exactement le problème avec la séquence de commandes dans la question - où le emctl start
contournement juste le mauvais ordre car il corrige la partie de configuration TNS-listener.
Notez également que pour exécuter les programmes Pro * C / OCI, le service EMCTL n'est pas nécessaire.