Wie kann man Oracle 11 schnell starten / herunterfahren?

9

Ich frage mich, wie ich einen Oracle DB-Daemon (Oracle 11.2, auf einem Testcomputer installiert) am schnellsten ordnungsgemäß starten / herunterfahren kann.

Ich benötige es für C / C ++ - Programme, die die OCI / Pro * C-API verwenden.

Ich möchte dies, weil ich an die Startgeschwindigkeit von PostgreSQL gewöhnt bin und weil der Dämon in einer virtuellen Maschine ausgeführt wird, die nur für Testfälle (bei Bedarf) gestartet wird.

Derzeit schreibe ich es so - Start:

sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole

Und Herunterfahren:

emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF

Dies funktioniert - Programme funktionieren wie erwartet - aber dieser Vorgang ist ziemlich langsam.

Die Oracle DB läuft unter CentOS 6.3, es ist die kostenlose (as-in-Beer) verfügbare 'Standardversion'.

maxschlepzig
quelle

Antworten:

8

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/oratabDatei 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/ dbshutist 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 startes 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 startdie 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.

maxschlepzig
quelle
1

Warum brauchst du das überhaupt? Was ist der Grund? Zum Herunterfahren haben Sie 3 Möglichkeiten:

  • plain shutdown- wartet auf das Ende der Sitzung
  • shutdown immediate - Rollbacks und beendet Sitzungen (wartet auf Rollback-Abschluss)
  • shutdown abort - tötet alles ab - normalerweise muss die Datenbank beim Start eine Wiederherstellung durchführen.

PS: Zum Ausführen benötigen Sie wahrscheinlich keinen Enterprise Manager, wenn Sie die Datenbank nur für Tests benötigen. Verwenden Sie Oracle dbstart/ dbshutSkripte. Wenn Sie EM wirklich brauchen, starten Sie es im Hintergrund.

ibre5041
quelle
0

yasir-arsanukaev : Können Sie Ihre VM einfach anhalten (anhalten ) und ihren Status auf der Festplatte speichern?

colin-t-hart : Wenn dies eine Testmaschine ist, erstellen Sie einen Schnappschuss. Starten Sie den Computer und starten Sie Oracle mitdbstart. Schalten Sie die Maschine einfach aus und kehren Sie zum Schnappschuss zurück.

user126897
quelle