Sie können die dbstart
/ dbshut
-Skripte verwenden, die mit einer Oracle-Installation geliefert werden. Sie sind unter verfügbar $ORACLE_HOME/bin
.
Nach einer Neuinstallation müssen Sie die /etc/oratab
Datei bearbeiten :
# 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
Dann können Sie die Skripte wie folgt verwenden:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart
bringt alles auf, was für Pro * C / OCI-Programme benötigt wird.
Die Verwendung von dbstart
/ dbshut
ist eine Verbesserung gegenüber der in der Frage genannten benutzerdefinierten Methode:
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
(Zeiten auf einem Core i7 / 2,8 GHz-System, langsam drehende Festplatte.)
Wie funktioniert dbstart / dbshut?
Ein dbstart $ORACLE_HOME$
Anruf entspricht im Wesentlichen:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
Und a dbshut $ORACLE_HOME$
ist im Grunde gleichbedeutend mit:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(Sie können überprüfen, ob alles über heruntergefahren wird ps aux | grep 'tnsl\|ora'
)
Beachten Sie, dass die Reihenfolge der Befehle wichtig ist. Das heißt, wenn lsnrctl start
es nach dem Befehl sqlplus-startup ausgeführt wird, beschwert sich das Pro * C / OCI-Programm immer noch über einen nicht verfügbaren TNS-Listener.
Und genau das ist das Problem mit der Befehlssequenz in der Frage - wo das Problem emctl start
die falsche Reihenfolge umgeht, weil es den TNS-Listener-Setup-Teil behebt.
Beachten Sie auch, dass für die Ausführung von Pro * C / OCI-Programmen der EMCTL-Dienst nicht benötigt wird.