Come avviare / arrestare rapidamente Oracle 11?


9

Mi chiedo quale sia il modo più rapido per avviare / arrestare correttamente un demone Oracle DB (Oracle 11.2, installato su una macchina di prova).

Ne ho bisogno per i programmi C / C ++ che utilizzano l'API OCI / Pro * C.

Lo voglio perché sono abituato alla velocità di avvio di PostgreSQL e perché il demone viene eseguito in una macchina virtuale che viene avviata (su richiesta) solo per casi di test.

Attualmente lo scrivo in questo modo - startup:

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

E spegnimento:

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

Funziona - i programmi funzionano come previsto - ma questa procedura è piuttosto lenta.

Oracle DB funziona su CentOS 6.3, è la "versione standard" disponibile gratuitamente (come da birra).

Risposte:


8

È possibile utilizzare gli script dbstart/ dbshutforniti con un'installazione Oracle. Sono disponibili sotto $ORACLE_HOME/bin.

Dopo una nuova installazione devi modificare il /etc/oratabfile:

# 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

Quindi puoi usare gli script in questo modo:

$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME

dbstart riporta tutto ciò che è necessario per i programmi Pro * C / OCI.

L'uso di dbstart/ dbshutè un miglioramento rispetto al metodo personalizzato menzionato nella domanda:

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

(volte su un sistema Core i7 / 2.8GHz, disco rigido a rotazione lenta.)

Come funzionano dbstart / dbshut

Una dbstart $ORACLE_HOME$chiamata equivale sostanzialmente a:

$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog

E a dbshut $ORACLE_HOME$è sostanzialmente equivalente a:

$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog

(puoi verificare se tutto è spento tramite ps aux | grep 'tnsl\|ora')

Si noti che l'ordine dei comandi è importante. Ciò significa che quando lsnrctl startviene eseguito dopo il comando sqlplus-startup, il programma Pro * C / OCI si lamenta ancora di un listener TNS non disponibile.

E questo è esattamente il problema con la sequenza di comandi nella domanda: dove il emctl startgiusto aggira l'ordine sbagliato perché corregge la parte di installazione del listener TNS.

Si noti inoltre che per l'esecuzione dei programmi Pro * C / OCI non è necessario il servizio EMCTL.


1

Perché ne hai bisogno? Qual è la ragione? Per lo spegnimento hai 3 opzioni:

  • pianura shutdown- attende la fine delle sessioni
  • shutdown immediate - rollback e termina le sessioni (attende la fine del rollback)
  • shutdown abort - uccide tutto - di solito il database deve eseguire alcuni ripristini all'avvio.

PS: probabilmente non è necessario eseguire Enterprise manager, se è necessario il database solo per i test. Usa Oracle dbstart/ dbshutscript. Se hai davvero bisogno di EM, avvialo in background.


0

yasir-arsanukaev : puoi semplicemente mettere in pausa (sospendere) la tua VM salvando il suo stato su disco?

colin-t-hart : se si tratta di una macchina di prova, creare un'istantanea. Avviare la macchina e avviare Oracle utilizzandodbstart. Basta forzare la macchina al termine e tornare all'istantanea.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.