8 -Démarrage/arrêt base

Fichier d’initialisation

Lors de son démarrage, une instance Oracle lit ses paramètres dans un fichier, dit de démarrage ou d’initialisation.
Ce fichier peut être de 2 types :
- un ‘init.ora’, fichier “texte” simple en lecture seule
- un ’sp file’, fichier de paramètres serveur, binaire, en lecture / écriture.

Le fichier INIT.ORA

Il est éditable avec un éditeur de texte standard. Les modifications faites en son sein sont prises en compte lors du redémarrage de la base.Son contenu est de la forme suivante :

# commentaire
# exemple de fichier init.ora
#
=
= ( , , … )
ou
# exemple de init.ora reférençant simplement un spfile :
#
SPFILE=’spfile.ora’

Les noms et emplacements standards de ce fichier INIT.ORA sont les suivants :
sur Unix/Linux    $ORACLE_HOME/dbs/init$ORACLE_SID.ora
sur Windows    %ORACLE_HOME%\\database\\init%PRACLE8SID%.ora

note : il existe un fichier init.ora d’exemples (sample init.ora file) abondamment commentés sur chaque plate-forme installée.
Il se trouve
sur Unix/Linux    dans $ORACLE_HOME/dbs/
sur Windows    dans %ORACLE_HOME%\\admin\\samplepfile

Le fichier SPFILE

Le fichier spfile, est aussi un fichier externe localisé sur le serveur de données, qui contient les paramètres.

Ceux ci sont persistants, c’est a dire qu’on peut les modifier à n’importe quel moment, et que ces changements resteront pérennes au delà du re démarrage de la base. Ceci se fait avec la commande ALTER SYSTEM.

exemple :

SQL> ALTER SYSTEM SET DB_FILES=500 SCOPE = SPFILE; 

On peut créer un SPFILE ex nihilo avec l’assistant de création de base de données ‘dbca’ ou à partir d’un ‘init.ora’ existant avec la commande ‘CREATE SPFILE’.

exemple :

SQL> CREATE SPFILE = ” FROM  PFILE = ”

Les noms et emplacements standards de ce fichier SPFILE sont les suivants :
sur Unix/Linux    $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
sur Windows    %ORACLE_HOME%databasespfile%ORACLE_SID%.ora

Pour savoir quel SPFILE est effectivement utilisé on peut faire sous SQL+ :

SQL> SHOW PARAMETER SPFILE 

NAME TYPE VALUE

spfile string F:ORACLEPRODUCT10.2.0DB_2 DBSSPFILEORCL.ORA

Paramètres d’instance et de session

Les paramètres d’initialisation

Les ressources utilsées par une base, essentiellement ressources mémoires, buffers, processus et fichiers sont paramétrables, et permettent d’ajuster son fonctionnement, voire de faire de l’optimisation (tuning).
Certains paramètres ont des valeurs libres (dans un domaine de valeurs, bien sûr), d’autres plus restrictifs sont dépendants du systèmes d’exploitation, ou dérivés d’autres paramètres.

Lors de son démarrage, une instance Oracle lit ses paramètres dans un fichier, dit de démarrage ou d’initialisation.
La totalité des paramètres d’initialisation est décrite dans la documentation Oracle Oracle 10gR2 reference (attention PDF de 30MO!).

note : augmenter les ressources allouées à la base en augmentant les valeurs de certains

paramètres est une bonne idée…jusqu’à un certain point. La mémoire ne peut pas,on s’en doute, être entièrement dévolue à la SGA…
Quelle que soit la base il est obligatoire de spécifier explicitement au strict minimum 2 paramètres :

‘DB_NAME’ : le nom de la base de données
‘CONTROL_FILES’ : la liste des fichiers de contrôle utilisés

Les autres paramètres les plus fréquemment utilisés sont les suivants (S:statique, M:modifiable, D: dérivé d’un autre paramètre)

COMPATIBLE S Compatibilité arrière avec les versions précédentes (>= 9.2.0)
DB_DOMAIN S Nom de domaine, qui associé au DB_NAME donne un nom de base uniqueNom de domaine, qui associé au DB_NAME donne un nom de base unique
DB_RECOVERY_FILE_DEST M Répertoire de destination de la zone de FLASH recovery
LOG_ARCHIVE_DEST_n M Répertoire des fichiers REDO LOGS archivés
NLS_LANGUAGE D Langue utilisée (fonction de NLS_LANG dans l’environnement Unix ou windows)
NLS_TERRITORY M le territoire (France par ex). Impacte les dates, et la monnaie
OPEN_CURSORS M nb max de cursor ouvrable par une application
PGA_AGGREGATE_TARGET M si 0, dimensionnement auto de la PGA, pour les proccess utilisateur server
PROCESSES S nb max de process connectés à Oracle (background et user)
SESSIONS D = 1,1 * PROCESSES
SGA_TARGET D si 0 auto dimensionnement de la SGA
SHARED_SERVER M 0 si serveur dédié, n = nb de serveurs partagés lancés au startup instance
SP_FILE S emplacement du SP File
UNDO_MANAGEMENT S Manual | Auto, par defaut Manual indique qu’on utilise des Rollback segments

Paramètres statiques et dynamiques

Certains paramètres peuvent être modifiés en temps réel, ils sont dits dynamiques, d’autres seront pris en compte au prochain redémarrage de la base, ils sont dits statiques.
Les paramètres dynamiques peuvent être modifiés pour la durée de la session,, pour la durée de l’instance ou de manière permanente avec la commande ‘ALTER SESSION’ ou ‘ALTER SYSTEM’.
Voici les syntaxes :

ALTER SESSION SET =
ALTER SYSTEM SET = [SCOPE = MEMORY | SPFILE | BOTH] [DEFERRED] [COMMENT = '']

exemples

SQL> ALTER SESSION SET NLS_LANGUAGE=’FRENCH’;


Informations sur les paramètres

On peut utiliser les commandes SQL*Plus SHOW :

SQL> SHOW PARAMETER

active_instance_count integer  
aq_tm_processes integer 0
archive_lag_target integer 0
asm_diskgroups string  
asm_diskstring string  
asm_power_limit integer 1
audit_file_dest string F:ORACLEPRODUCT10.2.0ADMIN ORCLADUMP
audit_sys_operations boolean FALSE
audit_trail string NONE
background_core_dump string partial
background_dump_dest string F:ORACLEPRODUCT10.2.0ADMIN ORCLBDUMP
backup_tape_io_slaves… boolean… FALSE…

ou en filtrant avec un mot clé :

SQL> SHOW PARAMETER AUDIT

audit_file_dest string F:ORACLEPRODUCT10.2.0ADMIN ORCLADUMP
audit_sys_operations boolean FALSE
audit_trail string NONE

ou utiliser des vues virtuelles du dictionnaire :

V$PARAMETER : les paramètres en cours d’utilisation (de la session donc…)
V$PARAMETER2 : les mêmes, mais mieux présentés…
V$SPPARAMETER : les paramètres du SPFILE (valable au (re)démarrage de l’instance)
V$SYSTEM_PARAMETER : paramètres de l’instance en cours en mémoire

SQL> select a.name, a.value courante, sp.value sp_file, mem.value memoire
from v$parameter a, v$spparameter sp, v$system_parameter mem
where a.name=sp.name
and mem.name=a.name
and a.name = ‘open_cursors’

NAME COURANTE SP_FILE MEMOIRE
open_cursors 1100 1100 1100

SQL> alter system set open_cursors=1200;
– on modifie la valeur courante de l’instance, ce qui a un impact sur la session
– mais ne sera plus valable au redemarrage de la base (spfile non modifié…)

NAME COURANTE SP_FILE MEMOIRE
open_cursors 1200 1100 1200

SQL> — infos sur parametres, par defaut ou non ?
SQL> SELECT NAME , VALUE, ISDEFAULT, DESCRIPTION
FROM V$PARAMETER

NAMEtracefile_identifier VALUE ISDEFAULTTRUE DESCRIPTIONtrace file custom identifier
lock_name_space   TRUE lock name space used for generating lock names for standby/clone database
processes 150 FALSE user processes
sessions 170 TRUE user and system sessions
timed_statistics TRUE TRUE maintain internal timing statistics
timed_os_statistics 0 TRUE internal os statistic gathering interval in seconds

SQL> — combine de parametres spécifiés dans le SPFILE  ?
SQL> SELECT count(*)
FROM V$SPPARAMETER
WHERE ISSPECIFIED IS TRUE
COUNT(*)
———-
23

Démarrage d’une base

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 :

  1. se positionner dans le répertoire d’initialisation qui va bien
    Platform Initialization File Directory
    AIX /etc
    Linux and Solaris /etc/init.d
    HP-UX /sbin/init.d

  2. 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
  3. changer le groupe (dba en général) et les permissions du fichier
    $> sudo chgrp dba oraclectl
    $> sudo chmod 750 oraclectl
  4. tester le script a la main
    $>  ./oraclectl  start
  5. 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