Académique Documents
Professionnel Documents
Culture Documents
Introduction à l’Administration
d’Oracle
Document version 1.5
10.3 Archivage des fichiers journaux ................................................................ Erreur ! Signet non défini.
BIBLIOGRAPHIE ................................................................................................. 86
Chapitre 1 Introduction
Dans ce cours, nous essayerons d’illustrer les notions de base de l’administration d’un serveur
de base de données à travers la technologie Oracle. Le choix se porte sur Oracle parmi une
variété d’éditeurs (IBM, Microsoft etc.) pour diverses raisons :
1- Il s’agit du leader du marché des SGBD.
2- La documentation est abondante sur le Web.
3- En Tunisie, il existe un représentant officiel de la firme (ORADIST), qui aide les
académiques à travers la documentation et les formations des universitaires.
Pour une maitrise parfaite de l’administration d’un serveur de bases de données, il faut passer
par trois étapes, à savoir l’assimilation de l’architecture d’un serveur BD, l’administration du
serveur, et finalement l’optimisation du serveur. Seul le troisième volet ne sera pas évoqué dans
ce cours.
1Il faut bien faire la différence entre langage (tel que SQL et PL/SQL) et outil tel qu’un éditeur ou autre nous
permettant soit de saisir du code, soit de manipuler directement et graphiquement les objets base de données (OEM,
SQL*Plus, iSQLPlus etc.).
cela qu’il est possible (et recommandé) de multiplexer le fichier de contrôle sur des endroits
différents du disque dur. Il est à noter que les informations des fichiers de contrôle peuvent être
examinées à partir de la vue V$CONTROLFILE.
ORDER BY tablespace_name;
Un fichier de données est un ensemble de blocs d’une taille donnée (4 Ko, 8Ko, 16 Ko etc.).
Le bloc de données est la petite unité d’E/S utilisée par Oracle et un fichier de données a
forcément une taille qui est multiple de la taille du bloc.
Logiquement, un tablespace (étalé sur un ou plusieurs fichiers de données), est un ensemble de
segments. Un segment est l’espace occupé par un objet base de données dans un tablespace, il y
en a quatre types :
- Segment de table : espace occupé par une table
- Segment d’index : espace occupé par un index
- Segment d’annulation : espace temporaire utilisé pour stocker les données nécessaires à
l’annulation d’une transaction, ainsi qu’à la lecture cohérente des données.
- Segment temporaire : espace temporaire ou sont stockées des données temporaires
utilisées lors d’un tri, d’une jointure, lors de la création d’un index etc.
En effet, les principaux types d’objets appartenant à un utilisateur (constituant un schéma)
sont les tables, les index, les vues, les synonymes, les séquences et les programmes PL/SQL.
Parmi ces différents types d’objets, seuls les tables et les index1 consomment de l’espace disque
en dehors du dictionnaire de données. Plus précisément, ils occupent de l’espace mémoire sur les
fichiers de données. Les autres types d’objets n’ont qu’une définition stockée dans le dictionnaire
de données.
Un segment est à son tour composé de structures logiques appelées extensions. Une
extension est un ensemble de blocs contigus dans un même fichier de données, tandis qu’un
segment peut être étalé sur plusieurs extensions chacun sur un fichier unique. Un bloc de
données est la plus petite unité physique d’E/S des données. Sa taille est définie via le paramètre
DB_BLOCK_SIZE.
Segment B (Extent 2)
Segment B (Extent 1)
Segment C (Extent 1)
Data01.dbf Data02.dbf
1 Il existe en effet d’autres objets occupant de l’espace disque, tel que les vues matérialisées, les tables organisées
en index (IOT), les clusters etc.
Database
Fichier de
Tablespace
données
Segment
Extension
Quant un utilisateur Oracle opère des mises à jour sur les données, celles-ci sont non
seulement exécutées mais aussi sauvegardées dans les fichiers de journalisation. Cette mesure de
sécurité primordiale permet en cas de crash du système de reconstituer les données perdues à
partir des informations sauvegardées dans les fichiers de journalisation. C’est d’ailleurs la raison
pour laquelle ces fichiers sont multiplexés et/ou copiés. En d’autres termes, même si un fichier
de journalisation est irrécupérable, Oracle peut compter sur sa (ou ses) copie(s).
Un ensemble de fichiers journaux multiplexés constitue un groupe de fichiers de journalisation. Si
par exemple un groupe inclut trois fichiers journaux, alors ces trois fichiers incluent exactement
les mêmes informations, ils sont appelés membres d’un groupe. Il existe au minimum deux groupes
de fichiers journaux et ils sont écrits de manière cyclique, c.-à-d., que si les fichiers d’un premier
groupe sont pleins, Oracle passe au deuxième groupe et y écrit (dans chaque membre) les
transactions nouvellement exécutées quitte à écraser les transactions existantes (voir la Figure 4).
La vue V$LOGFILE contient toutes les informations qui concernent les fichiers journaux de la
base de données.
Groupe 1
DELETE DELETE
UPDATE UPDATE
INSERT INTO INSERT INTO
UPDATE UPDATE
UPDATE… UPDATE…
INSERT INTO INSERT INTO
Membre 1 Membre 2
Groupe 2
Membre 1 Membre 2
effet à chaud, c-à-d, sans redémarrer la base de données (modification directe en mémoire, sur fichier, ou
les deux).
1 Les processus arrière plan et les processus serveur sont des programmes Oracle en exécution qui permettent à
l’instance de gérer les requêtes utilisateurs en assurant sécurité, intégrité et performance des données traitées. Ils
seront détaillés à la section 2.2.2).
serveurs sont stockés dans USER_DUMP_DEST. Les fichiers de trace portent l’extension .trc.
Les fichiers d’alertes stockent des informations relatives à des évènements et des messages
importants qui correspondent à une base de données. Le chemin des fichiers d’alerte se trouve au
répertoire BACKGROUND_DUMP_DEST. Les fichiers d’alerte portent l’extension .log.
Pour restaurer (reconstituer) un fichier endommagé (de données, de contrôle, de paramètres
etc.), nous avons besoin d’un fichier de sauvegarde. La sauvegarde est supposée déjà faite avant
que le problème endommageant le fichier original ne se produise.
2.2 L’instance
L’instance est l’ensemble de structures mémoires et de processus qui assurent l’accès et la
gestion d’une base de données. Le fichier de paramètres est utilisé pour configurer l’instance lors
de son démarrage. Celle-ci ne peut ouvrir qu’une seule base de données à la fois.
SGA
Dictionary
Cache
Library
Cache
Streams
Java Pool Large Pool
Pool
oblige. Chaque modification correspond à une entrée redo écrite dans le buffer (redo entry). Une
entrée redo est composée de plusieurs vecteurs de changement chacun correspondant à la
modification d’un bloc de données unique de manière à ce que la nouvelle valeur ainsi que
l’ancienne y soient enregistrées. Le contenu du buffer est écrit par Oracle dans les fichiers de
journalisation (Redo Log Files) pour garantir la récupération des données en cas de crash du
système. Il est à noter que la taille du buffer redo log est définie par le paramètre LOG_BUFFER.
Java Pool
Stocke les objets et applications Java les plus récemment utilisés lorsque la machine virtuelle
Java JVM optionnelle est utilisée. Elle est dimensionnée par le paramètre JAVA_POOL_SIZE.
Large Pool
Stocke des données lors de l’exécution d’opérations volumineuses. Il est utilisé dans le cas
d’une configuration serveur partagé, elle est dimensionnée par le paramètre LARGE_POOL_SIZE.
Streams Pool
C’est le cache des données relatives à la queue de messages utilisées par Oracle. Elle est
dimensionnée par le paramètre STREAMS_POOL_SIZE.
Notons la présence dans la SGA d’une autre zone mémoire de petite taille (de l’ordre de
centaines de Ko) appelée SGA fixe ; elle inclut des informations sur l’état de la base de données,
sur l’instance et sur les verrous.
Le paramètre LOCK_SGA est un paramètre booléen (qui prend true ou false). Il permet à
l’administrateur d’obliger (ou non) Oracle à allouer la zone SGA exclusivement en mémoire
physique, sans ayant recours à la mémoire virtuelle.
Les vues V$SGA et V$SGA_DYNAMIC_COMPONENTS permettent d’afficher les tailles de zones
mémoire composant la SGA, respectivement en résumé (SGA Fixe, SGA variable, Cache des
données et celle des journaux) et en détail (chaque composant à part).
REQ 2
REQ 3
SELECT component, current_size FROM V$SGA_DYNAMIC_COMPONENTS;
pool sont dimensionnés automatiquement. À noter que la taille du log buffer n’est pas prise en
charge par la gestion automatique, sa taille est déduite du SGA_TARGET.
Lorsque la gestion de la SGA est automatique (vs manuelle), l’instance dispatche la quantité de
mémoire renseignée par le paramètre SGA_TARGET au Shared Pool, DB Buffer Cache, Java Pool,
Large Pool, Streams Pool. Oracle consulte des statistiques et des vues internes pour distribuer la
quantité de mémoire globale aux zones mémoires de manière à maximiser la performance du
serveur. Comme la charge de travail du serveur varie dynamiquement, Oracle se permet de
changer dynamiquement le dispatching de la quantité totale de mémoire aux différentes zones
mémoires de la SGA.
Il est à noter que si la valeur de SGA_TARGET dépasse SGA_MAX_TARGET, alors Oracle met à
jour le deuxième paramètre en l’augmentant.
b. Program Global Area (PGA)
C’est une zone mémoire privée (à la différence de la SGA) dédiée aux utilisateurs. Elle est
créée pour chaque processus serveur quand il est initié. Elle stocke les informations spécifiques
aux utilisateurs telles que les variables hôtes, les informations de session, l’état des curseurs
utilisés, les informations de tri etc. La PGA est exclusivement accédée par le processus serveur.
La PGA totale allouée à tous les processus serveurs est appelée PGA agrégée. Depuis la
version 9 d’Oracle, un nouveau mécanisme permet de gérer globalement la PGA agrégée des
processus serveurs. Sa taille est dimensionnée par le paramètre PGA_AGGREGATE_TARGET et c’est
Oracle qui se charge de répartir cette mémoire entre les différents processus serveurs.
Après l’ouverture d’une session, Oracle démarre un processus serveur sur le serveur base de
données, c’est ce processus qui se chargera d’exécuter les requêtes de l’utilisateur et de maintenir
une interaction entre le client et le serveur.
Un serveur base de données est soit configuré en mode dédié, soit en mode partagé. Lorsque
le serveur est configuré en mode dédié, Oracle crée sur le serveur pour chaque utilisateur (et donc
pour chaque processus utilisateur) un processus serveur. En mode partagé, plusieurs processus
utilisateurs peuvent partager un seul et unique processus serveur. Le mode par défaut est le mode
dédié, pour activer le mode partagé, il suffit de modifier le paramètre SHARED_SERVERS dont la
valeur par défaut est 0. La nouvelle valeur indiquerait le nombre de processus serveurs partagés
démarrés lorsque l’instance est lancée.
Rappelons qu’une zone de mémoire PGA est créée pour chaque processus serveur, elle inclut
entre autres les variables hôtes et les variables de session utilisées dans les requêtes/programmes
envoyés par l’utilisateur (voir section b).
b. Les processus d’arrière plan
Les processus d’arrière plan sont utilisés par Oracle afin de maximiser la performance de
l’instance. La majorité des processus d’arrière plan sont lancés lorsque l’instance démarre, certains
d’entre eux pourraient être lancés après, lorsque l’instance en aura besoin. Il est à noter que
certains processus fonctionnent en plusieurs exemplaires, c’est pour cela que leur nom finit par n
qui signifie le numéro de l’exemplaire du processus.
- DBWn est le processus qui écrit le contenu du cache des données dans les fichiers de
données (Database Writer). Le DBW écrit les tampons (buffers) modifiés, dits dirty, du
cache de données dans les fichiers de données sur le disque. Un administrateur Oracle
peut spécifier jusqu’à 20 exemplaires de DBW, de DBW0 jusqu’à DBW9 et de DBWa
jusqu’à DBWj si la base de données connait une forte charge transactionnelle. Il est à noter
que les exemplaires des DBW sont inutiles dans le cadre de serveurs monoprocesseurs. Le
paramètre d’initialisation DB_WRITER_PROCESSES spécifie le nombre d’exemplaires du
DBW. Le maximum est de 20, si non spécifié, Oracle se charge d’affecter le nombre
d’exemplaires qui convient selon le nombre de processeurs du serveur hébergeant la base.
La tâche du DBW est de « nettoyer » le cache des données en écrivant les blocs dirty les
moins récemment utilisés dans le fichier des données de manière à ce que le(s) processus
serveur trouve(nt) aisément des tampons clean pour y charger les blocs de données qu’il
faut (à la suite d’une interrogation utilisateur) à partir des fichiers de données.
Il faut savoir que l’écriture des blocs dirty par le DBW est différée, c-à-d, qu’Oracle n’écrit
pas les blocs modifiés automatiquement après l’exécution de la requête de mise à jour, et
pas forcément après la confirmation (COMMIT) de la transaction en question. En d’autres
termes, ce n’est pas l’exécution de la transaction ni sa confirmation qui déclenchent le
fonctionnement du DBW. Ce processus est plutôt déclenché par les événements suivants :
o Un processus serveur ne trouve pas de tampons clean après qu’il ait scanné un
vérification). Lorsqu’un checkpoint se produit, tous les blocs dirty doivent être écrits sur
disque ; c’est toujours le DBWn qui s’en charge à la suite d’un message du CKPT. Après
écriture des blocs modifiés, le CKPT écrit le SCN de la dernière transaction confirmée sur
les entêtes (headers) des fichiers de données ainsi que dans le fichier de contrôle ; ces deux
derniers sont dits synchronisés. En cas de crash du système, le point de reprise est défini
par ce SCN et Oracle récupère à partir des fichiers de journalisation toutes les transactions
qui ont été confirmées après le SCN inscrit sur le fichier de contrôle/entêtes de fichiers de
données.
La synchronisation se produit lorsque le LGWR bascule d’un fichier journal à un autre. Le
LGWR ne se permet pas de basculer de fichier journal, et donc d’écraser des entrés Redo,
sans que le DBW n’écrive les blocs dirty du DB buffer cache, le cas échéant, le LGWR
pourrait écraser des entrés Redo relatives à des blocs modifiés non encore écrits sur
disque.
La synchronisation se produit aussi lors de la fermeture de la base de données ou lors de la
mise hors ligne ou en READ ONLY d’un tablespace.
Le checkpoint peut être forcé à travers la requête :
ALTER SYSTEM CHECKPOINT
- SMON (System Monitor) est le processus qui récupère les données au démarrage de
l’instance si cette dernière s’est arrêtée de manière anormale. Il est aussi chargé de libérer
les segments temporaires inutilisés et de compacter les extensions libres et contiguës des
tablespaces gérés par le dictionnaire de données.
Si la récupération de certaines transactions échoue à cause de l’indisponibilité d’un
tablespace ou d’un fichier, SMON attend qu’ils soient rétablis et récupèrent les
transactions en question.
Au cours d’une récupération, SMON effectue un roll forward qui consiste à enregistrer sur
les fichiers de données les modifications confirmées qui n’ont pas été écrites par le DBWn,
et un roll back pour annuler les modifications non confirmées écrites par le DBWn sur les
fichiers de données.
- PMON (Process Monitor) est le processus responsable de la récupération lors de l’échec
d’un processus utilisateur. Lorsqu’un un processus utilisateur plante, PMON annule la
transaction de ce dernier et libère les verrous posés sur les données modifiées à cause de la
transaction en cours.
- ARCn est le processus qui écrit le contenu des fichiers journaux (redo log files) dans des
fichiers archives lors de chaque basculement entre les groupes de fichiers journaux. Ce
processus n’est actif que si la base fonctionne en mode ARCHIVELOG.
Une instance Oracle peut démarrer jusqu’à 10 exemplaires d’ARCs (d’ARC0 jusqu’à
ARC9), c’est le LGWR qui démarre un nouvel exemplaire d’ARC à chaque fois que ceux
qui fonctionnent déjà sont insuffisants pour écrire de manière efficiente. Cela étant dit,
l’administrateur peut anticiper une charge importante d’archivage et spécifier dès le départ
le nombre d’exemplaires qu’il faut via le paramètre d’initialisation
LOG_ARCHIVE_MAX_PROCESSES.
- CJQn est le processus coordinateur qui exécute les tâches planifiées par les utilisateurs.
Ces tâches sont principalement des programmes PL/SQL planifiés entre autres grâce au
package DBMS_SCHEDULER. Les informations concernant les tâches (jobs) planifiées d’une
base de données sont stockés dans la table DBA_SCHEDULER_JOBS du dictionnaire de
données. Le processus CJQn peut exécuter un grand nombre de tâches grâces à ses
processus esclaves (J000 J999).
- MMAN (Memory Manager) est un processus introduit par Oracle 10g qui gère les tailles des
composantes de la SGA lorsque l’ASMM est activée.
- MMON (Memory Monitor) est un processus introduit par Oracle 10g. Son objectif est de
collecter des statistiques sur la SGA. MMON est déclenché toutes les 60 minutes pour
collecter des statistiques à partir des vues dynamiques et statiques du dictionnaire de
données et les stocker dans des tables de la base de données appelées Automatic
Workload Repository (AWR). Le propriétaire de ces tables est SYSMAN et sont stockées
dans le tablespace SYSAUX. Pour activer l’AWR, il faut instancier le paramètre
STATISTICS_LEVEL. La valeur assignée à ce paramètre détermine le niveau de statistiques
que le MMON doit collecter ; BASIC veut dire que l’AWR est désactivé (ce qui désactive
plusieurs options de monitoring automatique) et que peu de statistiques sont collectées.
TYPICAL est le niveau standard, il s’agit de la valeur par défaut du paramètre. ALL permet
la collecte des statistiques du niveau TYPICAL avec en plus les plans d’exécution ainsi que
d’autres informations reliées au système d’exploitation.
Il faut savoir que le nombre maximum de processus exécutés en même temps dans l’instance
est contrôlé par le paramètre d’initialisation PROCESSES. La vue V$PROCESS inclut les
informations de tous les processus en court d’exécution dans l’instance. La Figure 6 présente
toutes les composantes d’un serveur base de données ; les fichiers physiques, les structures
mémoire et les processus ainsi que l’interaction entre ces différentes composantes que ce soit à
l’intérieur du serveur ou avec les clients et leurs processus utilisateurs.
2.3 Le schéma
Un schéma est un ensemble d’objets qui ont été créés par un certain utilisateur. Chaque
utilisateur est le propriétaire d’un unique schéma. Les principaux types d’objets d’un schéma sont
les tables, les index, les vues, les synonymes, les séquences, les déclencheurs, les fonctions et procédures
stockées et les packages PL/SQL. Il est à noter que les objets utilisateur, tablespace, profile, rôle et
autres ne font pas partie des objets d’un schéma.
Il faut savoir aussi qu’il n’existe pas de relation directe entre un schéma et un tablespace. En
effet, les objets d’un schéma peuvent être stockés sur différents tablespaces tandis qu’un unique
tablespace peut inclure plusieurs schémas. L’objet d’un schéma n’a pas forcément une
correspondance à un fichier physique de données. En réalité seuls les tables et les index sont
stockés sous forme de segments, la plupart des autres objets correspondent tout simplement à
des définitions dans le dictionnaire de données puisqu’ils ne consomment pas d’espace disque
comparés aux tables et aux index.
DBA_DATA_FILES.
PGA SGA
User Process
Shared Streams
Server Java Pool Large Pool
Pool
Process
DB Buffer Shared Redo Log
Cache Pool Buffer
D000
Dictionary
Cache
User Process
PGA Library
Cache
Dedicated
Server
Process
User Process
Base de Données
contrôle. Les noms des vues dynamiques commencent généralement par V$ et ne sont accessibles
que par les administrateurs. Il est à noter que les vues dynamiques peuvent être consultées même
si la base de données n’est pas ouverte. La vue V$FIXED_TABLE, accessible par SYS contient les
informations de toutes les vues dynamiques. La Table 2 présente certaines de ces vues.
%_TAB_COLUMNS Toutes les informations concernant les colonnes des tables de la base de données.
%_OBJECTS Toutes les informations des objets –tous types confondus- de la base de données.
V$SQL Informations des requêtes SQL exécutées par tous les utilisateurs BD.
1. Phase de parse : Le processus serveur vérifie si la requête existe dans le Library Cache du
Shared Pool. Si elle n’y existe pas, une analyse syntaxique est effectuée (vérification de
l’exactitude des mots réservés, de leur ordre etc.) suivie par une analyse sémantique qui
consiste à (1) vérifier l’existence des tables et des colonnes consultées dans la requête via le
dictionnaire de données et (2) à vérifier les privilèges de l’utilisateur en cours. L’analyse
sémantique est effectuée à partir du Dictionary Cache si les informations en question y
existent, sinon Oracle les y charge à partir du dictionnaire de données. Par la suite, un plan
d’exécution de la requête est calculé. Ce parse est appelé « hard parse » puisqu’il consomme
beaucoup de ressources comparé à un « soft parse » qui se produit dans le cas où la requête est
trouvée dans le Library Cache. Dans ce dernier cas, seule la vérification des privilèges de
l’utilisateur est effectuée et toutes les autres opérations (vérification syntaxique et calcul du
plan d’exécution) sont épargnées.
2. Phase d’exécution : Une fois le plan d’exécution calculé, le processus serveur exécute et vérifie si
les blocs de données cibles existent dans le DB Buffer Cache. Si ce n’est pas le cas, il les
charge à partir des fichiers de données.
3. Phase de fetch : Une fois le processus serveur récupère les données, il les trie si la requête inclut
la clause ORDER BY puis il les renvoie au processus utilisateur.
2. La modification est encore en mémoire (DB Buffer Cache) et n’a pas été écrite sur
disque. L’ancienne image des données existe donc dans les fichiers de données, et
l’annulation est beaucoup plus rapide que dans le premier cas.