Escolar Documentos
Profissional Documentos
Cultura Documentos
I- INTRODUCTION
Oracle est un SGBD (système de gestion de bases de données) édité par la société du même nom
(Oracle Corporation - http://www.oracle.com), leader mondial des bases de données.
La société Oracle Corporation a été créée en 1977 par Lawrence Ellison, Bob Miner, et Ed Oates.
Elle s'appelle alors Relational Software Incorporated (RSI) et commercialise un Système de Gestion
de Bases de données relationnelles (SGBDR ou RDBMS pour Relational Database Management
System) nommé Oracle.
En 1979, le premier prototype (RDBMS - RSI1) intégrant la séparation des espaces d'adressage
entre les programmes utilisateurs et le noyau Oracle est commercialisé. Cette version est
entièrement développée en langage assembleur. La seconde version (RDBMS - RSI2) est un
portage de l'application sur d'autres plates-formes.
En 1983 la troisième version apporte des améliorations au niveau des performances et une
meilleure prise en charge du SQL. Cette version est entièrement codée en langage C. A la même
époque RSI change de raison sociale et devient Oracle.
En 1984 la première version d'Oracle (Oracle 4) est commercialisée sur les machines IBM.
En 1988 Oracle 6 est disponible sur un grand nombre de plates-formes et apporte de nombreuses
nouvelles fonctionnalités ainsi qu'une amélioration notable des performances.
En 1991, Oracle 6.1 propose une option Parallel Server (dans un premier temps sur la DEC VAX,
puis rapidement sur de nombreuses autres plates-formes).
En 1992, Oracle 7 sort sur les plates-formes UNIX (elle ne sortira sur les plates-formes Windows
qu'à partir de 1995). Cette version permet une meilleure gestion de la mémoire, du CPU et des
entrées-sorties. La base de données est accompagnée d'outils d'administration (SQL*DBA)
permettant une exploitation plus aisée de la base. En 1997, la version Oracle 7.3 (baptisée Oracle
Universal Server) apparaît, suivie de la version 8 offrant des capacités objet à la base de données
Oracle est écrit en langage C et est disponible sur de nombreuses plates-formes matérielles (plus
d'une centaine) dont :
• AIX (IBM)
• Solaris (Sun)
• HP/UX (Hewlett Packard)
• Windows NT (Microsoft)
• Oracle Server Standard, une version comprenant les outils les plus courants de la solution
Oracle. Il ne s'agit pas pour autant d'une version bridée...
• Oracle Server Enterprise Edition
1
Les fonctionnalités d'Oracle
Oracle est un SGBD permettant d'assurer :
• Oracle Designer
• Oracle Developer
• SQL*Plus : une interface interactive permettant d'envoyer des requêtes SQL et PL/SQL à la
base de données. SQL*Plus permet notamment de paramétrer l'environnement de travail
(formatage des résultats, longueur d'une ligne, nombre de lignes par page, ...)
• Oracle Developper : il s'agit d'une suite de produits destinés à la conception et à la création
d'applications client-serveur. Il est composé de 4 applications :
o Oracle Forms (anciennement SQL*Forms) : un outil permettant d'interroger la base
de données de façon graphique sans connaissances préalables du langage SQL.
SQL*Forms permet ainsi de développer des applications graphiques (fenêtres,
formulaires, ...) permettant de sélectionner, modifier et supprimer des données
dans la base.
o Oracle Reports (SQL*ReportWriter) : un outil permettant de réaliser des états
o Oracle Graphics : un outil de génération automatique de graphiques dynamiques
pour présenter graphiquement des statistiques réalisées à partir des données de la
base
o Procedure Builder : un outil permettant de développer des procédures, des
fonctions et des packages
Outils de programmation
2
Oracle dispose d'un grand nombre d'interfaces (API) permettant à des programmes écrits dans
divers langages de s'interfacer avec la base de données en envoyant des requêtes SQL. Ces
interfaces (appelées précompilateurs) forment une famille dont le nom commence par PRO* :
• Pro*C
• Pro*Cobol
• Pro*Fortran
• Pro*Pascal
• Pro*PLI
• ...
II- ARCHITECTURE
On appelle instance Oracle les processus et la SGA d'une base de données Oracle.
Les fichiers physiques d'une base Oracle permettent de stocker de manière persistante les données
manipulées par Oracle, tandis que la mémoire sert à optimiser la vitesse de fonctionnement de la
base de donné.
• Les fichiers servant à stocker les informations de la base. Tous ces fichiers sont des fichiers
binaires, ce qui signifie qu'ils sont inexploitables avec un éditeur de texte.
• Les fichiers destinés à la configuration et au fonctionnement de la base Oracle
Oracle a défini une architecture permettant de définir une méthode d'organisation standard des
fichiers de la base Oracle. Cette architecture est nommée OFA (Optimal Flexible Architecture).
Les fichiers d'une base de données Oracle sont les suivants :
3
• Les fichiers de données (dont l'extension est .dbf). Ces fichiers contiennent l'ensemble
des données de la base (les tables, les vues, les procédures stockées, ...).
• Les fichiers Redo Log (dont l'extension est .rdo ou .log). Ces fichiers contiennent
l'historique des modifications effectuées sur la base de données
• Les fichiers de contrôle (dont l'extension est .ctl). Ces fichiers permettent de stocker les
informations sur l'état de la base de données (emplacement des fichiers, dates de création,
...)
Une base de données Oracle nécessite au minimum un fichier de données, deux fichiers redo Log et
un fichier de contrôle.
Les fichiers de données
Les fichiers de données sont les fichiers occupant la majeure partie de la base de données, leur
taille peut osciller entre quelques Mégaoctets et plusieurs gigaoctets. Ceux-ci contiennent en effet
toutes les données relatives à la base Oracle dans un format propriétaire. Ainsi pour modifier les
informations contenues dans la base de données il est impossible d'intervenir directement sur ces
fichiers; la bonne procédure à adopter consiste à modifier le contenu de la base de données par
l'intermédiaire d'ordres SQL.
Les fichiers de données contiennent des informations de deux types :
La lecture de ces fichiers de données est faire à l'aide des processus utilisateurs tandis que
l'écriture est assuré par le processus DBWR (Database Writer)
Les fichiers Redo-log
Les fichiers Redo-log contiennent l'historique des modifications apportées à la base de données
Oracle. Ces fichiers de journalisation enregistrent les modifications successives de la base de
données afin de pouvoir restaurer la base de données en cas de défaillance d'un disque dur. Ainsi
le cas échéant, la base de données Oracle est à même de simuler l'ensemble des commandes
n'ayant pas été sauvegardées pour rétablir le contenu de la base de données.
Au même titre que les fichiers de données, les fichiers Redo-log sont dans un format propriétaire
Oracle et l'écriture dans ces fichiers est assurée par le processus LGWR (Log Writer).
Oracle propose également un mode archivage permettant la sauvegarde du fichier Redo-log avant
sa réutilisation pour restaurer la base. Si ce mode n'a pas été activé, le contenu du fichier Redo
Log est supprimé après utilisation.
Enfin ces fichiers peuvent être multiplexés (comprenez dupliqués dans des répertoires de groupe)
afin de fournir un maximum de sécurité.
Les fichiers de contrôle
Les fichiers de contrôle permettent de stocker l'état de la base de données. Ils sont créés lors de la
création de la base.
Ces fichiers permettent, lors de l'initialisation de la base, de savoir si la base de données a été
arrêtée correctement, ainsi que de connaître l'emplacement des fichiers de données et des fichiers
Redo Log. Les fichiers de contrôle sont eux-même repérés par le fichier d'initialisation.
Le fichier de contrôle contient les informations suivantes :
Le fichier d'initialisation
Ce fichier est un fichier au format texte contenant l'ensemble des paramètres de démarrage de la
base (il est généralement nommé initSID.ora, où SID représente le nom donné à l'instance). Son
existence n'est toutefois pas majeure car il peut être facilement reconstruit.
Un fichier d'initialisation par défaut est créé lors de la création d'une base. Celui-ci est largement
documenté et des exemples de valeurs sont donnés pour chaque paramètre. Toutefois parmi ces
paramètres, seul un nombre limité d'entre-eux est réellement utile.
4
IV- LES PROCESSUS
Les processus
Le fonctionnement de la base Oracle est régi par un certain nombre de processus chargés en
mémoire permettant d'assurer la gestion de la base de données.
Un processus utilisateur est créé pour chaque programme exécuté par un utilisateur (par exemple
Oracle Forms ou Server Manager) afin de fournir l'environnement nécessaire à l'exécution de celui-
ci. Le processus utilisateur ainsi créé communique avec les processus systèmes à travers le
programme interface.
Chaque processus a pour nom ora_nomduprocessus_SID où SID représente le nom de l'instance à
laquelle le processus est associé.
Les 4 principaux processus systèmes sont :
• DBWR (DataBase Writer ou Dirty Buffer Writer), le processus chargé d'écrire le contenu
des buffers dans les fichiers de données
• LGWR (Log Writer), le processus chargé d'écrire le contenu des buffers dans les fichiers
Redo Log
• PMON (Process Monitor), le processus chargé de nettoyer les ressources, les verrous et les
processus utilisateurs non utilisés
• SMON (System Monitor), le processus chargé de vérifier la cohérence de la base de
données et éventuellement sa restauration lors du démarrage si besoin
• CKPT (CheckPoint), le processus chargé d'écrire le contenu des buffers dans les fichiers de
données
• RECO (Recoverer), il s'agit d'un processus optionnel permettant de résoudre les
transactions interrompues brutalement dans un système de bases de données distribuées
(par exemple un système de réplication de bases de données)
• ARCH (Archiver). Ce processus est optionnel et n'existe qu'en mode ARCHIVELOG. Il
permet de dupliquer les fichiers Redo-Log dans un espace d'archivage.
5
• Dnnnn (Dispatcher, nnnn représente une suite de nombre entiers) : Ce processus est
optionnel et n'est présent que dans les configurations MTS (multi-threaded server). Il
permet de router les requêtes des potes clients-serveur distant vers les autres serveurs. Il
existe au moins un processus Dnnnn pour chaque protocole de communication
• Snnnn (Server, nnnn représente une suite de nombre entiers) : Ce processus est n'est
également présent que dans les configurations MTS. Il permet de recevoir les demandes de
connexions distantes envoyées par le processus Dnnnn d'un serveur distant.
• LCKn (Lock) est un processus de verrouillage utilisé lorsque Oracle Parallel Server est
installé.
Le processus DBWR
Le processus Database Writer (DBWR) a pour but de transférer les blocs de données modifiés
(appelés dirty blocks) de la System Global Area vers les fichiers de la base de données, afin de
sauvegarder de manière permanente les données de la base. Ainsi, lorsqu'un ordre SQL modifie la
base de données (c'est-à-dire lorsqu'une requête SQL DELETE, INSERT ou UPDATE est reçue), les
blocs de données affectés sont modifiés dans le fichier de données associé.
Le processus LGWR
Le rôle du processus LGWR (Log Writer) est de mettre à jour les fichiers journaux (Redo Log) dans
la SGA et sur le disque. Ainsi ce processus est chargé d'écrire le contenu du cache Redo Log de la
SGA dans le fichier Redo Log à chaque fois qu'un ordre COMMIT est réceptionné.
Le processus SMON
Le processus SMON (System Monitor) est chargé de vérifier la cohérence du système et de la
rétablir suite à un incident au démarrage de la base suivant. Ainsi, si la base n'a pas été stoppée
correctement, le processus analyse les informations stockées dans les rollback segments (les
rollback segments sont les zones de stockage des opérations n'ayant pas encore été validées) puis
annule toutes les informations en attente mais pour lesquelles aucune validation n'a été
enregistrées (appelées deadlocks).
Ainsi SMON a un rôle de libération des ressources utilisées inutilement par le système.
D'autre part SMON surveille les espaces libres des fichiers de la base de données et les réorganise
si nécessaire afin de de les défragmenter
Le processus PMON
Le processus PMON (Process Monitor) a pour but de récupérer les ressources associées à des
défaillances de processus utilisateurs. Ainsi il supprime les processus en erreur, il annule les
transactions n'ayant pas été validées (par exemple si un client est déconnecté brutalement lors de
la transaction); il libère les verrous, et libère les ressources utilisées inutilement dans la SGA.
V- LA GESTION DE LA MEMOIRE
Oracle fait un usage poussé de la mémoire physique (RAM, Random Access Memory) du serveur
afin de fournir les meilleures performances possibles.
Ainsi Oracle utilise la mémoire physique du serveur pour :
Ainsi la taille de la mémoire vive du serveur est primordial pour la performance de la base de
données. En effet, lorsqu'il n'y a plus de mémoire physique disponible, le système d'exploitation
met à disposition de l'application une mémoire dite "virtuelle" composée de fichiers d'échange
(fichiers swap) sur le disque du serveur. Or l'accès au disque dur est extrêmement plus long que
l'accès à la mémoire physique, ce qui provoque des ralentissements notables dans le
fonctionnement de la base de données Oracle.
Dans une base de données Oracle on distingue généralement deux zones mémoire :
• La zone SGA (System Global Area) assurant le partage des données des différents
utilisateurs, c'est-à-dire qu'il s'agit de la zone contenant les structures de données
accessibles par tous les processus
6
• La zone PGA (Program Global Area) permettant le fonctionnement des divers processus
(afin de stocker toutes les données ne nécessitant pas d'être partagées).
• La Shared Pool (ou zone partagée) contenant des informations pouvant être réutilisées par
les différents utilisateurs, c'està-dire les requêtes SQL et programmes PL/SQL pouvant être
partagés, le dictionnaire de données, les curseurs, ... D'une manière générale, cette zone
sert à mémoriser, analyser et traiter les requêtes SQL provenant des divers utilisateurs.
• Le Db block buffer (Database Buffer Cache ou cache des blocs de données) est un espace
mémoire contenant toutes les données transitant de ou vers la base de données : blocs de
données, blocs d'index et blocs contenant les ROLLBACK SEGMENTS. Il s'agit donc d'un
cache permettant d'accélérer l'accès à certaines données de la base.
• Le Redo Log buffer (ou cache Redo-log) contient les blocs de données (appelés Redo
Entries) à modifier et les modifications à effectuer sur ces données, avant que l'ensemble
de ces mises à jour de la base ne soient archivées dans les fichiers Redo-log
La SGA et les processus d'arrière plan constituent ce que l'on appelle une instance; A chaque
démarrage d'une instance, l'espace mémoire nécessaire à son bon fonctionnement lui est allouée,
et est restituée lors de sa fermeture.
L'ensemble des tailles des caches peut être modifiée (augmentée ou diminuée) grâce aux
paramètres du fichier d'initialisation (initSID.ora).
• afin de vérifier la syntaxe et les privilèges sur une requête SQL (pour le DDL, Data
Definition Language)
• Afin d'obtenir des informations sur la structure de la base de données
• Les vues USER (dont le nom commence par USER_) donnent des informations sur tous les
objets logiques dont l'utilisateur connecté est propriétaire (tables, index, vues,
procédures, ...)
7
• Les vues ALL (dont le nom commence par ALL_) fournissent des informations sur les
objets pour lesquels l'utilisateur a un droit d'accès, c'est-à-dire les objets de la base créés
par l'utilisateur ainsi que tous les objets accessibles par cet utilisateur.
• Les vues DBA (dont le nom commence par DBA_). Ces vues sont réservées à
l'administrateur de la base (DBA, DataBase Administrator) afin de lui fournir des
informations sensibles sur tous les objets de la base de données.
• Les vues V$ (dont le nom commence par V$_) sont des vues dynamiques permettent
d'avoir des informations sur l'état courant de l'instance de la base de données de son
démarrage à son arrêt. Elles permettent par exemple de connaître les fichiers physiques
actuellement utilisés par la base (logs, rollback segments, ...).
Une séquence est un objet de base de données Oracle, au même titre qu'une table, une vue, etc...
Autrement dit, il appartient à un utilisateur, on peut le manipuler, le modifier, à condition d'avoir
les droits nécessaires. Cet article a pour but de définir ce qu'est une séquence, et de présenter les
possibilités que cet objet offre.
Définir une séquence équivaut à définir une suite de nombre entiers. L'évolution de cette suite est
régie par un certains nombre de paramètres, que nous allons voir ensemble un peu plus loin.
L'utilisation d'une séquence permet donc d'avoir à disposition une suite de valeurs. Ceci peut
permettre de :
Ma première séquence
Etant donné que la plupart des paramètres ont une valeur par défaut, il n'est pas nécessaire de
tous les spécifier lorsqu'on souhaite créer une nouvelle séquence. Voici donc l'ordre SQL minimal
de création d'une séquence :
Exemples :
===
SQL> select ztblseq.currval from dual;
select ztblseq.currval from dual
*
ERREUR à la ligne 1 :
ORA-08002: séquence ZTBLSEQ.CURRVAL pas encore définie dans cette session
8
===
Cette erreur est due au fait que l'on n'a jamais encore initialisé notre séquence, et que l'on essaye
d'en récupérer la valeur courante.
Lors de la première utilisation d'une séquence, il faut utiliser NEXTVAL pour l'initialiser.
===
SQL> select ztblseq.nextval from dual;
NEXTVAL
---------
1
===
CURRVAL retourne maintenant 1. Si si, essayez...
===
SQL> select ztblseq.currval from dual;
CURRVAL
---------
1
===
Maintenant que l'on sait comment récupérer la valeur d'une séquence, et que l'on sait
l'incrémenter, voyons quels sont les différents paramètres qui permettent de définir une séquence :
Identifiant de la séquence
Au sein d'une même base de données, plusieurs objets peuvent porter le même nom, à condition
qu'ils soient chacun dans un schéma différent. Aussi, il est possible de spécifier dans quel schéma
on souhaite créer la séquence :
9
Par défaut, une séquence ne reboucle pas (cas n°1)
Mettre les valeurs en mémoire cache
Afin d'optimiser l'utilisation des séquences, on peut demander à Oracle de placer en mémoire cache
un certain nombre de valeurs de la séquence :
===
SQL> create sequence ma_sequence start with 1 minvalue 0;
Séquence créée.
NEXTVAL
---------
1
SQL> select 'La valeur courante est ' || ma_sequence.currval from dual;
'LAVALEURCOURANTEEST'||MA_SEQUENCE.CURRVAL
---------------------------------------------------------------
La valeur courante est 1
Séquence modifiée.
NEXTVAL
---------
21
MA_SEQUENCE.NEXTVAL+MA_SEQUENCE.NEXTVAL
---------------------------------------
82
SQL> alter sequence ma_sequence increment by -41 maxvalue 100 cycle nocache;
10
Séquence modifiée.
NEXTVAL
---------
0
NEXTVAL
---------
100
NEXTVAL
---------
59
===
Avez-vous remarqué que lors de l'exécution de "select ma_sequence.nextval +
ma_sequence.nextval from dual;", une seule et même valeur de la séquence est utilisée ? Oracle
considère NEXTVAL comme une pseudo-colonne, et par conséquent dans cet ordre SQL, il ne la
"prend" qu'une seule fois au niveau de la base, la deuxième fois il reprend la valeur chargée en
mémoire.
Modifier une séquence
Une question qui revient souvent sur les forums Oracle est la suivante : "Comment faire pour créer
une colonne de table auto-incrémentée, dans le but d'en faire une clé primaire ?". En effet, Oracle
ne dispose pas de l'option auto_increment que l'on rencontre dans certains SGBD (dont MySQL).
Le principe est le suivant :
• créer une séquence qui permettra de générer des valeurs entières uniques
• créer un TRIGGER qui se déclenchera à chaque INSERT, pour alimenter le champ voulu
avec une valeur unique.
===
create trigger t_matable_pk
before insert on matable for each row
begin
select seq_matable_pk.nextval into :new.x from dual;
end;
===
... où "x" est le nom du champ à auto incrémenter.
Cet exemple ne gère pas le contrôle d'unicité de la valeur que l'on va insérer, mais si le champ
n'est alimenté QUE par l'utilisation de la séquence qui lui est dédiée, et si cette séquence n'est pas
paramétrée pour reboucler, il n'y a pas de raison qu'une erreur de clé en double surgisse...
Une séquence sans trou ?
Etant donné qu'une séquence peut être interrogée à tout moment par tout utilisateur Oracle ayant
les droits suffisants, IL NE FAUT PAS considérer les séquences comme un moyen de générer une
suite de nombre sans "trous". Exemple : dans le cas de l'alimentation d'une clé primaire, si un
enregistrement a été inséré, puis si la transaction a subi un "rollback", alors la séquence ne revient
pas en arrière, et lors de l'insertion suivante, on aura l'impression que la séquence a sauté un ou
plusieurs nombres. Donc : une séquence fournit un moyen d'obtenir des valeurs uniques, mais pas
forcément continues.
Bibliographie
11
• Schéma de la syntaxe de CREATE SEQUENCE :
http://www.oradoc.com/ora816/server.816/a76989/ch4g23.gif
12