web-dev-qa-db-fra.com

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

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" gratuite (en version bière).

9
maxschlepzig

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 fichier /etc/oratab:

# 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

(temps sur un système Core i7/2,8 GHz, disque dur à rotation lente.)

Fonctionnement de dbstart/dbshut

Un appel dbstart $Oracle_HOME$ Équivaut essentiellement à:

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

Et un 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 Contourne juste le mauvais ordre car il corrige la partie de configuration de l'écouteur TNS.

Notez également que pour exécuter les programmes Pro * C/OCI, le service EMCTL n'est pas nécessaire.

8
maxschlepzig

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 d'Enterprise Manager pour fonctionner, si vous avez besoin de la base de données uniquement pour les tests. Utilisez les scripts Oracle dbstart/dbshut. Si vous avez vraiment besoin d'EM, démarrez-le en arrière-plan.

1
ibre5041

yasir-arsanukaev: pouvez-vous simplement mettre en pause (suspendre) votre VM sauvegarde de 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 en utilisant dbstart. Il suffit de forcer la machine lorsque vous avez terminé et de revenir à l'instantané.

0
user126897