Etapes pour démarrer une base :
- se connecter au serveur (niveau OS)
- positionner le ‘ORACLE_SID’
- lancer SQL+ sans se connecter (on se connecte à quoi si la base n’est pas démarrée ??
$> sqlplus /nolog
- s’affecter les privilèges SYSDBA
SQL> connect /as sysdba
- lancer la commande de démarrage ou de modification adéquate :
SQL> STARTUP…
ou
SQL> ALTER DATABASE…
Attention !!!! sous Windows pour se connecter à une base ‘Idle’ (non démarrée) le SErvice associé doit obligatoirement être démarré (sans l’instance bien sûr ici…)
Dans le cas contraire, on a une erreur
ERROR:
ORA-12560: TNS : erreur d’adaptateur de protocole
exemple Unix / Linux
$ sqlplus /nolog
SQL> connect toto as sysdba
Enter password:
Connected to an idle instance.
SQL>
SQL> show user
USER is “SYS”
SQL>
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 239076944 bytes
Database Buffers 41943040 bytes
Redo Buffers 2973696 bytes
Base de donnees montee.
Base de donnees ouverte.
SQL>
La base dans tous ses états
Une base peut se trouver dans différents ‘états’, ou niveau de disponibilité qui correspondent généralement à des modes de démarrage :
- ‘non montée’ (NOMOUNT) : l’instance seule est démarrée. On en peut déclencher que des pseudo connexions de type ‘SYSDBA’ ou ‘SYSOPER’
Les opérations sont assez limitées. Surtout utile (et pour cause) lors de la création de la base.
- ‘montée’ (MOUNT) : l’instance est lancée, la base n’autorise pas de transactions, ni les connexions utilisateurs normales, mais des opérations d’exploitations portant généralement sur les fichiers
- ‘ouverte’ (OPEN) : c’est l’état classique, de la base (comme on l’aime) disponible à tous les utilisateurs…
- ‘en veille’ (QUIESCED) : c’est un état particulier, qui permet au DBA de travailler tranquillement, sans transactions concurrentes, mais sans avoir à redémarrer la base pour la passer en accès restreint. Dans ce mode, les transactions actives sont momentanément suspendues, jusqu’a l’éveil de la base.
Les options de démarrage :
PFILE = : permet de spécifier un fichier d’initialisation autre que le défaut,
SPFILE = : permet de spécifier un fichier SPFILE autre que le défaut,
FORCE : permet de forcer un démarrage quel que soit l’état de la base, en forçant un arrêt brutal puis un startup
RESTRICT : démarre la base en accès restreint seulement pour les DABS. Aucune autre connexion n’est acceptée. Diffère du mode ‘veille’ qui autorise d’autres utilisateurs, mais les fait ‘hiberner’.
READ : en lecture seule (CQFD) pas d’update, delete, insert, …
Quelques Exemples d’option de démarrage :
# un démarrage (très) progressif en 3 temps :
SQL> STARTUP NOMOUNT PFILE=mon_fic.ora;
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE OPEN;
# un démarrage en comité restreint
SQL> STARTUP RESTRICT
Démarrage automatique
Il est bien sûr utile de pouvoir démarrer automatiquement la base lors du démarrage (ou du reboot intempestif de la machine)
Démarrage de la base sous Windows
Sous Windows le + simple est d’utiliser le gestionnaire de services du panneau de configuration pour démarrer le service correspondant à la base désirée.
Le service a pour nom générique : OracleService<ORACLE_SID>
Démarrer le service démarre normalement l’instance également mais ceci dépend en fait d’un paramètre de la base de registre :
Name: ORA_ORCL_AUTOSTART
Type: REG_EXPAND_SZ
De même pour l’arrêt on peut dissocier service et instance :
Name: ORA_ORCL_SHUTDOWN
Type: REG_EXPAND_SZ
Data: FALSE
remarque : en général le serveur Oracle est accéé via Oracle*Net en client-serveur, dans ce cas ne pas oublier de démarrer également le service ‘TNSLISTENER’ correspondant au serveur Oracle Net.
Alternativement on peut écrire un script de démarrage (.BAT) faisant appel à l’utilitaire de gestion d’instance d’Oracle : ORADIM
exemple
C:\> ORADIM -STARTUP -SID ma_base
– démarre uniquement l’instance mais pas le service…
C:\> oradim -startup -sid -starttype srvc,inst
– démarre le service et l’instance
Démarrage par script sous Unix
Oracle fournit un script shell pour le démarrage automatique lors de la procédure de boot du système :
$ORACLE_HOME/bin/dbstart
Ce script s’appuie sur le fichier /etc/oratab normalement créé automatiquement à l’installation (avec création de base) ou manuellement.
/etc/oratab liste les bases présentes sur la machine, et précise si elle doivent être démarrées ou non.
Ce fichier texte contient le ou les nom(s) de base, le ORACLE_HOME correspondant et l’option de démarrage : ‘Y’ pour ‘oui’, ‘N’ pour ‘non’.
Une ligne a donc la forme suivante :
|*::Y|N
le caractère ‘*’ veut dire ici toutes les bases…
exemple de fichier oratab généré
# /etc/oratab
#
# This file is used by ORACLE utilities. It is created by root.sh
# and updated by the Database Configuration Assistant when creating a database.
# A colon, ‘:’, is used as the field terminator. A new line terminates
# the entry. Lines beginning with a pound sign, ‘#’, are comments.
# Entries are of the form: $ORACLE_SID:$ORACLE_HOME::
#
# The first and second fields are the system identifier and home
# directory of the database respectively. The third filed indicates
# to the dbstart utility that the database should , “Y”, or should not,
# “N”, be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
TEST:/oracle/10gDB2:N
# *:/oracle/10gDB2:N
note : Ce script ne doit pas être exécuté intéractivement.
Démarrage du listener
Même remarque que précédemment : comme en général le serveur Oracle est accédé via Oracle*Net en client-serveur, ne pas oublier de démarrer également le process serveur du LISTENER Oracle Net.
Soit par la commande :
$> lsnrctl start
ou soit en positionnant le paramère ORACLE_HOME_LISTNER= $ORACLE_HOME avant l’appel de dbstart (dans ce cas dbstart démarre les bases spécifiées dans /etc/oratab ET le listener)
ou dernière possibilité
$dbstart $ORACLE_HOME
# le premier parametre passé au script sert a renseigner ORACLE_HOME_LISTNER….
Démarrage automatique sous linux / Unix
Oracle (et le listener s’il n’est pas protégé par un mot de passe) peuvent être démarrés automatiquement comme un service. L’implantation des fichiers et les ‘run level’ utilés au boot dépendent des distributions.
Oracle fournit un script générique qui fonctionne pour les principales plate-formes : AIX, HP-UX, Linux.
Voici les principales étapes de configuration :
- se positionner dans le répertoire d’initialisation qui va bien
- créer un fichier
/etc/oraclectl comme suit avec les bonnes valeur de ORACLE_HOME
et de compte propriétaire oracle
# les 2 commentaires 'chkconfig' et 'description' suivants sont OBLIGATOIRES
# on fournit liste_run_level priorite_start priorite_stop, ici 2,3,5 et 80 , 20
# chkconfig: 235 80 20
# description: ajout de service auto pour start/stop oracle#!/bin/bash
ORACLE_OWNER="oracle"
ORACLE_HOME="/oracle/db11a"
case "$1" in
start)
echo -n $"Starting Oracle DB:"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
echo "OK"
;;
stop)
echo -n $"Stopping Oracle DB:"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
echo "OK"
;;
*)
echo $"Usage: $0 {start|stop}"
esac
- changer le groupe (dba en général) et les permissions du fichier
$> sudo chgrp dba oraclectl
$> sudo chmod 750 oraclectl
- tester le script a la main
$> ./oraclectl start
- ajouter le service oraclectl
Le moyen le plus simple pour ce faire plutôt que de bidouiller les rc0.d , rc1.d, rc2.d …et autres liens symboliques est d’utiliser la commande chkconfig qui va bien (cf parametres mlis en commentaires en début du script précédent
$> sudo chkconfig --add oraclectl
# ou sans utiliser les commentaires du script (on precise explicitement les levels :
$> chkconfig --level 235 oraclectl on
$> #verifier :$> chkconfig -l oraclectl
oraclectl 0:off 1:off 2:on 3:on 4:off 5:on 6:off
$> # verifier si necessaire le runlevel courant
$> runlevel
N 2