Comment démarrer / arrêter rapidement Oracle 11?

9

Je me demande quel est le moyen le plus rapide pour démarrer / arrêter correctement un démon Oracle DB (Oracle 11.2, installé sur une machine de test).

J'en ai besoin pour les programmes C / C ++ qui utilisent l'API OCI / Pro * C.

Je le veux parce que je suis habitué à la vitesse de démarrage de PostgreSQL et parce que le démon s'exécute sur une machine virtuelle qui n'est démarrée (à la demande) que pour les cas de test.

Actuellement, je l'écris comme ceci - démarrage:

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

Et arrêt:

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

Cela fonctionne - les programmes fonctionnent comme prévu - mais cette procédure est assez lente.

La base de données Oracle fonctionne sur CentOS 6.3, il s'agit de la «version standard» disponible gratuite (comme dans la bière).

maxschlepzig
la source

Réponses:

8

Vous pouvez utiliser les scripts dbstart/ dbshutfournis avec une installation Oracle. Ils sont disponibles sous $ORACLE_HOME/bin.

Après une nouvelle installation, vous devez modifier le /etc/oratabfichier:

# 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/ dbshutest 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 startest 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 startcontournement 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.

maxschlepzig
la source
1

Pourquoi en avez-vous besoin? Quelle est la raison? Pour l'arrêt, vous avez 3 options:

  • plain shutdown- attend la fin des sessions
  • shutdown immediate - annule et termine les sessions (attend la fin de l'annulation)
  • shutdown abort - tue tout - généralement la base de données doit effectuer une récupération au démarrage.

PS: vous n'avez probablement pas besoin de Enterprise Manager pour fonctionner, si vous avez besoin de la base de données uniquement pour les tests. Utilisez Oracle dbstart/ dbshutscripts. Si vous avez vraiment besoin d'EM, démarrez-le en arrière-plan.

ibre5041
la source
0

yasir-arsanukaev : Pouvez-vous simplement mettre en pause (suspendre) votre machine virtuelle en enregistrant son état sur le disque?

colin-t-hart : S'il s'agit d'une machine de test, créez un instantané. Démarrez la machine et démarrez Oracle à l'aide dedbstart. Il suffit de forcer la machine lorsque vous avez terminé et de revenir à l'instantané.

user126897
la source