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).
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.)
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.
Pourquoi en avez-vous besoin? Quelle est la raison? Pour l'arrêt, vous avez 3 options:
shutdown
- attend la fin des sessionsshutdown 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.
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é.