Vous êtes sur la page 1sur 155

Par Arnauld ESSONO ZUE

Ingénieur de Conception Informatique


Enseignant des Systemes d’informations et Développements 2019-2020
----------------------------------

Edition EYROLLES
CVD-2020

-----
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Table des matières


REMERCIEMENT ................................................................................................................. 1
INTRODUCTION ...................................................................................................................... 2
HISTORIQUE ......................................................................................................................................3
Évolution des modèles de données .......................................................................................... 4
Tapez le titre du chapitre (niveau 2) ....................................................................................................5
Tapez le titre du chapitre (niveau 3) ................................................................................................6

1
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

REMERCIEMENT

Ce manuel est un outil destiné aux Etudiants souhaitant poursuivre leur


carrière professionnelle dans les métiers des TIC, la maitrise et la conception
des systèmes d’informations mais aussi aux facilitateurs chargés de
l’enseignement des Bases de données dans les grandes écoles, et à toute
personne désireuse d’acquérir les techniques de base de la production, de
gestion et de mise en place d’une base de données relationnelle. Cet outil a été
préparé dans le cadre du projet «de développement des compétences de génie
logiciel des Etudiants informaticiens en République Gabonaise».

Mes remerciements vont essentiellement à l’endroit de :

 Dr Ange NAMBILA Enseignant des Bases de données et des systèmes


d’informations à l’Institut Africain d’Informatique (IAI)
 M. Fabien De Marchi Enseignant à l’Université de Lion Bases de
données et Administration Oracle

Dans le présent manuel, l’étudiant trouvera les concepts et les bases


nécessaires à la mise en place et la gestion d’une base de données relationnelle.

2
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

INTRODUCTION
Le document «LES BASES DE DONNEES ET LE SQL » détaille toutes les
pratiques culturales liées à la gestion des Bases de données. Il propose
essentiellement des substances actives soutenues et de résidus nécessaires
permettant au jeune étudiant de mieux appréhender les enseignements des
Bases de données Relationnelles. Ce support de cours très accessible permet de
se familiariser avec les schémas relationnels, leur élaboration et leur
normalisation et permet de bien comprendre le langage SQL, y compris dans
ses extensions récentes. Il regroupe les instructions SQL basiques qui
permettent de mettre en place une
base de données sur un serveur Oracle, de la remplir et de l’interroger. Ce
document, volontairement succinct, peut servir d’aide mémoire des
commandes SQL essentielles, et évitant ainsi la (re)-lecture du manuel
utilisateur ou de tout autre ouvrage volumineux sur Oracle ou sur les Bases de
données en général.

Ce cours concerne la norme SQL2. SQL3, le relationnel-objet et l'interface


avec le langage Java ne sont pas abordés ici. Les exemples ont été testés avec le
SGBD Oracle, version 10g et 11g mais n'utilisent qu'exceptionnellement les
particularités de ce SGBD par rapport aux normes SQL2. SQL3.

Ce livre a été rédigé avec une volonté de concision et de progression dans sa


démarche ; il est illustré par ailleurs de nombreux exemples et figures. Notre
source principale d’informations fût la documentation en ligne d’Oracle,
l’ouvrage ne constitue pas, à mon sens, un simple condensé de commandes
SQL. Les étudiants trouveront des exemples pédagogiques pour chaque
concept abordé, ainsi que des exercices thématiques.

Cependant les remarques et les corrections d'erreurs peuvent être envoyées par courrier
électronique à l'adresse essonoza@gmail.com ou polozue@yahoo.fr , en précisant le
sujet «LES BASES DE DONNEES ET LE SQL » et la version du document.

3
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

LES OBJECTIFS
Tout au long de ce document, les différents concepts sont appuyés par des
exemples illustratifs, notamment à la fin de chaque partie, un exercice de
synthèse est proposé et corrigé.

Partie I : Les concepts de Bases


A la fin de cette première partie, l’étudiant doit être capable de :

1. Définir et expliquer de façon détaillée les différents concepts liés aux


bases de données.
2. Analyser un problème, produire le Modèle Conceptuel de données
(MCD) et le Modèle logique de données (MLD) appelé Modèle
relationnel de la Base de données.

Partie II: L’algèbre Relationnelle


A la fin de cette deuxième partie, l’étudiant doit être capable de :

1. Reconnaître et de définir formellement les différents opérateurs de


l’algèbre relationnelle.
2. Pouvoir traduire chaque requête nécessaire en algèbre relationnel à
l’aide des différents opérateurs.

Partie III: Le Langage SQL


A la fin de cette Troisième partie, l’étudiant doit être capable de :

1. Reconnaître les principales commandes SQL permettant de définir, de


manipuler et de contrôler les informations d’une Base de données,
2. Pouvoir traduire en langage SQL les différentes requêtes de l’algèbre
relationnelle.
Partie IV: L’Administration Oracle
A la fin de cette dernière partie, l’étudiant doit être capable d’installer et
de se familiariser avec le SGBD Oracle, de créer et de gérer une base de
données oracle et de l’administrer.

4
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

HISTORIQUE

Jusqu’aux années 60 les données sont gérées dans des fichiers. Les données
des fichiers sont alors décrites dans les programmes informatiques, et la
multiplication des fichiers entraînait la redondance de données, ce qui rendait
difficile les mises à jour. On introduit l'idée d'intégration et de partage des
données. Il fallait alors combler les lacunes des systèmes de fichiers et faciliter
la gestion qualitative et quantitative des données informatiques. Il a donc fallu
envisager un système compréhensible et utilisable par les êtres humains : Le
système devait alors proposer un langage. C’est en 1970 que Ted Codd, un
Chercheur d’IBM eu l’idée d’adapter la logique Mathématique du 1er Ordre
développée à la fin du 19e siècle pour définir le modèle relationnel comme un
modèle de gestion de données. Dans le modèle relationnel, les données sont
organisées en tableaux à deux dimensions que nous appellerons des relations.

Le Modèle Relationnel des bases de données de Codd, est celui qui a connu le
plus grand essor depuis ces dernières années, et qui reste encore aujourd'hui la
plus utilisé de tous. Pour implémenter les Bases de données relationnelles on a
mis en place des Systèmes de gestion des Bases de Données Relationnelles
(SGBDR). Et le langage SQL est le langage commun à tous les SGBDR, ce qui
permet de concevoir des bases de données relativement indépendamment des
systèmes utilisés. Ainsi les données de la base de données sont décrites hors
des programmes dans la base elle-même.

5
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Évolution des modèles de données

 Les fichiers et COBOL


A préciser que dans les années 60, le stockage des données se fait avec les
systèmes de gestion de fchiers et avec pour langage COBOL (Common Business
Oriented Language). Loin d’être dépassé, ce dernier fut le plus utilisé entre
1960 et 1980 bien que les bases de données relationnelles prenaient forme. Au
début des années 2000, il permettait alors une programmation de type objet,
la gestion des informations Unicode et une intégration avec XML. Le COBOL
manipulait près de 75 % des données de gestion stockées dans le monde. Le
principal inconvénient des applications COBOL est la forte dépendance qui
existe entre les données stockées et les traitements c’est-à-dire les
programmes. En effet, le fait de déclarer dans chaque programme les
fchiers utilisés impose une maintenance lourde si la structure d’un fchier doit
être modifée. De plus, les instructions de manipulation (ouverture, lecture,
écriture et modifcation) sont très liées à la structure de chaque fchier.

 Le modèle hiérarchique
Le Modèle hiérarchique donnait naissance aux bases de données
hiérarchiques. Il s’agissait mettre en place une arborescence de données où
l’accès à un enregistrement de niveau inférieur n’est pas possible sans passer
par le niveau supérieur. Promus par IBM et toujours utilisés dans
le domaine bancaire, les SGBD hiérarchiques souffrent toutefois de nombreux
inconvénients.
La figure suivante illustre un modèle hiérarchique de données dans lequel des
établissements d’enseignement peuvent embaucher plusieurs enseignants. Un
enseignant peut intervenir pour le compte de différents établissements.

Institut Africain Institut de Gestion Institut National de la Poste, des


d’Informatique de Libreville Technologies de l’Information et de la
Communication

M.NDONG M.MBA M.OYIBA M.MBA M.OSSA M.MBA M.Moussavou


500.000F 400.000F 200.000F 300.000F 350.000F 250.000F 600.000F

000000

6
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Ce modèle quant à lui montre des lacunes lors de l’accès aux données de la
base.
- Extraire la liste de tous les enseignants implique le parcours de tous les
établissements.
- L’insertion peut se révéler problématique : l’ajout d’un enseignant sans
l’établissement n’est pas possible, à moins d’ajouter un établissement fictif.

- La suppression peut se révéler dangereuse : Si un établissement est supprimé


tous les enseignants avec.

- La modifcation est souvent problématique : les incohérences proviennent


d’éventuelles redondances (le nom ou l’adresse d’un enseignant qui change
doit se répercuter à tous les enregistrements).

 Le modèle Réseau
Un peu plus tard, Bachman, pionnier dans le domaine de l’informatique,
s’intéresse pour une fois aux bases de données en inventant le modèle réseau
qui vient complètement écarter le modèle hiérarchique des données.
Les bases de données réseaux étaient nées avec le modèle CODASYL, première
norme décidée sans IBM. Bien que résolvant quelques limitations du modèle
hiérarchique et annonçant des performances en lecture-écriture honorables, le
modèle réseau n’était qu’une usine de pointeurs. Pour preuve, plus personne
n’utilise de tels SGBD où la dépendance entre les données stockées et les
méthodes d’accès existe toujours, et l’évolution d’une base de données est très
coûteuse en termes de recompilation de pointeurs.

Institut Africain Institut de Gestion Institut National de la Poste, des


d’Informatique de Libreville Technologies de l’Information et de la
Communication

500.000F 400.000F 200.000F 300.000F 350.000F 250.000F 600.000F

M.NDONG M.MBA M.OYIBA M.OSSA M.Moussavou

000000

7
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Dans la représentation ci-dessus qu’elle soit en bus, en anneau ou étoile, pas


question de stocker plus données, ce serait bien trop compliqué de concevoir le
bon graphe. Le modèle de données se doit d’être plus simple. L’inconvénient
comme on peut déjà le constater c’est la difficulté de recherche de données
spécifique, le temps coûte cher ici.

 Le modèle Relationnel
Après la publication en 1970 de l’article de référence posant les bases du
modèle relationnel par E.Ted Codd, D’un seul coup, toutes les limitations des
précédents modèles sont résolues. Le but initial de ce modèle était d’améliorer
l’indépendance entre les données et les traitements (programmes
informatiques). Basé sur la théorie des ensembles (algèbre relationnelle) on
réussi à résoudre de nombreux problèmes et parvenir à créer d’autres
fonctionnalités liées à la Normalisation (dépendances fonctionnelles) et
Cohérence des données (non-redondance et intégrité référentielle). Langage
SQL (déclaratif et normalisé) est créé à cet effet. Les liens entre les
enregistrements de la base de données sont réalisés non pas à l’aide de
pointeurs physiques, mais à l’aide des valeurs des clés étrangères et des clés
primaires.

Etablissement

ID_Et Nom_Etablissement

01 Institut Africain d’Informatique


02 Institut de Gestion de Libreville
03. Institut National de la Poste, et des TIC

Enseignants Rémunération

ID_En Nom_Enseignant ID_En ID_Et Salaire

01 M.NDONG 01 01 500.000F
02 M.MBA 02 01 400.000F
03. M.OYIBA 03. 02 200.000F
04. M.OSSA 02. 02 300.000F
05. M.MOUSSAVOU 04. 03 350.000F
02 03 250.000F
05 03 600.000F

8
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

La force du modèle relationnel de données réside dans le fait qu’il repose sur
des principes simples et permet de modéliser des données complexes. Le
modèle relationnel est à l’origine du succès que connaissent aujourd’hui les
grands éditeurs de SGBD, à savoir Oracle, IBM, Microsoft et Sybase dans
différents domaines :

- OLTP (OnLine Transaction Processing) où les mises à jour des données sont
fréquentes, les accès concurrents et les transactions nécessaires.

- OLAP (Online Analytical Processing) où les données sont


multidimensionnelles (cubes), les analyses complexes et l’informatique
décisionnelle.
- Systèmes d’information géographiques (SIG) où la majorité des données sont
exprimées en 2D ou 3D et suivent des variations temporelles.

 Le modèle NoSQL
Depuis quelques années, le volume de données à traiter sur le Web a mis à
rude épreuve les SGBD relationnels, qui ont été jugés non adaptés à de
nombreuses montées en charge. Les grands acteurs du Big Data, comme
Google, Amazon, LinkedIn ou Facebook, ont été amenés à créer leurs propres
systèmes de stockage et de traitement de l’information (BigTable, Dynamo,
Cassandra). Des implémentations d’architectures open source comme Hadoop
et des SGBD comme HBase, Redis, Riak, MongoDB ou encore CouchDB ont
permis de démocratiser ce nouveau domaine de l’informatique répartie.
On distingue plusieurs modèles de données parmi les SGBD NoSQL du
moment : clé-valeurs, orienté colonnes, documents et graphes. Plus le
modèle est complexe, moins le système est apte à évoluer rapidement en raison
de la montée en charge.

 Modèle de données clé-valeurs


Le mode de stockage du modèle clé-valeurs (key-value) s’apparente à
une table de hachage persistante qui associe une clé à une valeur (de
toute nature et de type divers, la clé 1 pouvant référencer un nom, la clé
2 une date, etc.). C’est à l’application cliente de comprendre la
structure de cette structure. L’intérêt de ces systèmes est de pouvoir
mutualiser cette table sur un ou plusieurs serveurs. Les SGBD les plus
connus sont Memcached, CouchBase, Redis et Voldemort (LinkedIn).

9
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

M.MBA BP123 37ans 077.25.24.11


25845552
I.A.I-400.000F IGL-300.000F INPTIC-250.000F

25845579 I.A.I

IGL
25844571

25844996 INPTIC

Modèle de données clé-valeurs

 Modèle de données orienté colonnes

Le modèle orienté colonnes ressemble à une table dénormalisée (sans la


présence de NULL, toutefois) dont la structure est dynamique. Les SGBD les
plus connus sont HBase (implémentation du BigTable de Google) et Cassandra
(projet Apache qui reprend à la fois l’architecture de Dynamo d’Amazon et
BigTable).

Nom : M.MBA Adresse : BP123 Age : 37 ans Tel : 077.25.24.11 Etab : IAI Salaire : 400.000F
25845552
Etab : IGL Salaire : 300.000F

Etab : INPTIC Salaire : 250.000F

25845579 Nom-Etb : IAI Adresse : BP3002 Ville : Libreville ID_Et : 01

 Modèle de données orienté documents

Le modèle orienté documents est toujours basé sur une association clé-valeur
dans laquelle la valeur est un document (JSON généralement, ou XML). Les
implémentations les plus populaires sont CouchDB (Apache), RavenDB, Riak
et MongoDB.

10
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

{“ Nom “ : “M.MBA“,“ Adresse “ : “ BP123“, “ Age “ : “37 ans“, “ Tel “ : “077.25.24.11“


25845552 “ Embauches “ : [ { “ Nom_Etab“ : “IAI“,“ Salaire“ : “400.000F“}
{ “ Nom_Etab“ : “IGL“,“ Salaire“ : “300.000F“}
{ “ Nom_Etab“ : “INPTIC“,“ Salaire“ : “250.000F“}] }

25845579 {“ Nom_Et “ : “IAI“,“ Adresse “ : “ BP3002“, “ Ville “ : “Libreville“, “ ID_ET “ : “01“}

Modèle de données orienté documents


 Modèle de données orienté graphes

Le modèle de données orienté graphes se base sur les nœuds et les arcs
orientés et éventuellement valués. Ce modèle est très bien adapté au traitement
des données des réseaux sociaux où on recherche les relations entre individus
de proche en proche. Les principales solutions du marché sont Neo4j (Java) et
FlockDB (Twitter).
Id : 2541 Id : 25845552
Salaire : 400.000F Nom : M.MBA
Adresse: BP123
Age : 37 ans
Id : 25845579 Tel : 077.25.24.11
Nom_Et : IAI
Adresse: BP3002
Ville : Libreville
Id : 2554
Salaire : 300.000F
Id : 2567
Salaire : 250.000F

Id : 25844571
Nom_Et : IGL Id : 25844996
Adresse: BP587 Nom_Et : INPTIC
Ville : Libreville Adresse: BP2630
Ville : Libreville

Modèle de données orienté graphes

11
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Partie I : Les concepts de Bases


I. Base de données
I.1 Définition
Une base de données est un ensemble de données mémorisées par
un ordinateur, organisées selon un modèle (relationnel, hiérarchique, réseau,
etc.) et accessible à de nombreuses personnes.

SERVEUR Client

I.2 Les Fonctions d'une base de données


Une base de données est structurée afin de pouvoir mieux répondre à des
fonctions fondamentales en informatique, telles que :

 Stocker l'information de façon fiable (c'est à dire être capable de


restituer l'information entrée dans le système)
 Traiter de grands volumes de données (massification)
 Traiter rapidement les données (optimisation)
 Sécuriser les accès aux données (gérer les autorisations selon les
utilisateurs)
 Contrôler la qualité des données (par exemple la cohérence par rapport
à un modèle pré-établi)
 Partager les données (entre plusieurs applications dédiées à plusieurs
métiers)
 Rendre accessible les données en réseau (gérer la concurrence des accès
parallèles)
 Etc.

12
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

I.3 Architecture d'une base de données


On retrouve essentiellement 3 types d’architecture globale de systèmes
d’information basés sur Oracle et dans la quasi-totalité des autres Systèmes de
gestion des Bases de données.

 architecture locale

Tout est sur le même serveur matériel, programme client et serveur de


données.

Bases de données
+
application cliente

 architecture client/serveur

On a un programme client (un exécutable) sur le poste client, dit alors ‘client
lourd’. Le PC communique avec le serveur de données sur un serveur distant,
via le réseau, et la couche Oracle Net pour les utilisateurs oracle.

Communication

SERVEUR de Base de
données
Application Cliente

 architecture 3 tiers

Ici pas de programme client. Un navigateur suffit sur le poste de travail (on
parle alors de ‘client léger’). Il dialogue avec le serveur de données distant via
http.

SERVEUR de Base de Serveur d’application Pc Client (http)


données

13
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

II. Système de gestion de Base de données (SGBD)


Un SGBD (Système de Gestion de Bases de données) représente un ensemble
coordonné de logiciels permettant de décrire, mémoriser, manipuler, traiter,
interroger les ensembles de données constituant la base.

Exemple : Oracle, Mysql, Access, PostGré, Sybase, SQL Server, Cassandra, etc.

Un SGBDR (ou RDBMS en Anglais) est un SGBD basé sur le modèle


relationnel comme Oracle.

II.1 Caractéristiques d’un SGBD


Un SGBDR doit disposer d’un certain nombre de caractéristiques
minimales : gestion de gros volumes de données (en consultation et en mise à
jour) et assurer la Sécurité des données qu’on peut résumer comme suite:

 disponibilité

Un SGBDR se doit d’offrir une bonne disponibilité des données. Une


disponibilité totale des données est possible (temps de reprise nul) il suffit de
s’en donner les moyens logiciels et matériels…

 fiabilité
Des mécanismes de sauvegarde variés (physique, logique, off-line, on-
line, totale, partielle, incrémentale), ainsi que des mécanismes de
journalisation, et de reprise permettent de restaurer une information
sans pratiquement aucune perte, dans tous les cas de problème matériel
ou logiciel.
 confidentialité
Tout n’est pas accessible à tout le monde! Se connecter à la base de
données, donne un certain nombre de droits et de ressources en fonction
d’un profil défini et maintenu par un administrateur. La granularité
d’accès peut aller jusqu’à la vision unique d’un champ d’un
enregistrement d’une table particulière. Encore une fois on ne manipule
plus des fichiers…
 cohérence
Que les données soient réparties ou non –dans ce dernier cas les
mécanismes mis en jeux seront plus complexes– elles doivent être
cohérentes. Cela sous entend, d’une part que les accès concurrents
d’utilisateurs, notamment lors de mises à jour, ne doivent pas
compromettre l’intégrité des données et d’autre part que ces dernières

14
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

satisfassent aux contraintes d’intégrité du modèle, mais aussi aux règles


de gestion de l’entreprise.
 traçabilité
On peut, notamment en cas de problème important ou en cas d’attaque
du système, recourir à l’analyse de traces ou de logs du SGBD. Le niveau
de détail de ces traces est paramétrable, et concerne soit les aspects
système, soit réseau, soit l’accès aux données élémentaires elles-mêmes.
 concurrence d’accès en lecture et écriture (avec une bonne granularité)
 gestion (efficace) des transactions
 portabilité sur différents OS, des données et du code
 Administrabilité :
Existence d’outils d’administration généraux : gestion des données, des
utilisateurs, des fichiers physiques, des espaces logiques, des droits, des
profils, des ressources systèmes, etc. existence d’outils de surveillance
En temps réel grâce à un moniteur, si possible graphique ou en temps
différé grâce à des journaux ou à des traces paramétrables
 possibilité d’export import : De, ou vers des fichiers “texte”, des
logiciels bureautiques ou des fichiers gros systèmes par exemple
optimisation de performances : Offrir de bonnes performances et des
outils permettant de les mesurer et de les contrôler via des paramètres
de configuration. Des processus d’optimisation en temps réel des
requêtes complexes sont également souvent présents. Les données
peuvent être indexées, de manière souple, dynamique et complète (index
simples, concaténés, multiples, tables de hashage, recherche textuelle,
etc.). Un nombre important d’utilisateurs, ainsi qu’un volume
conséquent de données peuvent être pris en compte.

III. Le SQL
SQL signifie Structured Query Language, c'est-à-dire Langage
d'interrogation structuré. En fait SQL est un langage complet de gestion
de bases de données, en particulier relationnelles. Il a été conçu par IBM
dans les années 70. Il est devenu le langage
standard des systèmes de gestion de bases de données (SGBD)
relationnelles (SGBDR).
SQL ne permet pas de faire de la programmation au sens courant du
terme et doit donc être associé avec un langage comme le C, le COBOL
ou JAVA pour réaliser des traitements complexes accédant à une base de
données.

15
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le SQL est composé de quatre sous ensembles : LDD, LCD, LMD, LCT
 Le Langage de Définition de Données (LDD, ou en anglais DDL,
Data Definition Language) pour créer et supprimer des objets dans la
base de données (tables, contraintes d'intégrité, vues, etc.).
Exemple de commandes : CREATE, DROP, ALTER
 Le Langage de Manipulation de Données (LMD, ou en anglais
DML, Data Manipulation Language) pour la recherche, l'insertion, la
mise à jour et la suppression de données. Le LMD est basé sur les
opérateurs relationnels, auxquels sont ajoutés des fonctions de calcul
d'agrégats et des instructions pour réaliser les opérations d'insertion,
mise à jour et suppression.
Exemple de commandes : INSERT, UPDATE, DELETE, SELECT
 Le Langage de Contrôle de Données (LCD, ou en anglais DCL, Data
Control Language) pour gérer les droits sur les objets de la base
(création des utilisateurs et affectation de leurs droits).
Exemple de commandes : GRANT, REVOKE
 Le Langage de Contrôle de Transaction (LCT, ou en anglais TCL,
Transaction Control Language) pour la gestion des transactions
(validation ou annulation de modifications de données dans la BD)
Exemple de commandes : COMMIT, ROLLBACK

IV. Autres définitions


schéma : ensemble de structures logiques de données (cluster, lien de
base de données, index, paquetage, procédure, séquence, cliché, journal
de cliché, table, vue, déclencheur, fonction)
cluster (ou groupement) : contient une ou plusieurs tables ayant une
ou plusieurs colonnes communes
lien de base de données (database link) : permet l’accès à une base
(Oracle ou non) distante
index : structure contenant l’adresse physique de chaque ligne d’une
table ou d’un cluster
paquetage (package) : collection de fonctions, de procédures et
autres objets stockés
procédure : programme PL/SQL stocké dans la base de données ne
retournant pas de valeur
séquence : permet de générer des entiers uniques
cliché (snapshot) : table contenant le résultat d’une requête définie
sur une base distante

16
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

journal de cliché (log snapshot) : table associée à la table maîtresse


utilisée par le cliché
table : structure de données contenant les données, composée de lignes
(occurrences) et de colonnes (champs)
vue : représentation logique combinant une ou plusieurs tables ou vues
déclencheur (trigger) : procédure stockée dans la base associée à un
événement
fonction : programme PL/SQL stocké dans la base de données
retournant une valeur
synonymes : re-dénomination de certains des objets de la base
segment d’annulation : sauvegarde des données permettant de valider
ou de défaire les transactions
espace de tables (tablespace) : allocation d’espace disque dans la
base de données pour stocker les objets
clé primaire : une ou plusieurs colonnes permettant d’identifier de
manière unique chaque ligne de la table
clé unique : une ou plusieurs colonnes permettant d’identifier de
manière unique chaque ligne de la table,
autorisant la valeur indéterminée
clé étrangère : une ou plusieurs colonnes dont les valeurs dépendent
d’une clé primaire
intégrité référentielle : consistance des relations des clés étrangères
référençant les clés primaires

V. Typologie des utilisateurs des bases de données


En pratique il existe 5 catégories d’utilisateurs, qui utilisent différents outils en
fonction de leur profil et du SGBD ciblé. Ceci est résumé de façon suivante :
Utilisateur final
Appelé aussi Utilisateur naïf: non spécialiste des SGBD au non
informaticien. L’outil utilisé peut être une application client serveur ou web, ou
progiciel, ou appli bureautique, outil d’aide à la décision.

Utilisateur final évolué


Non informaticien éclairé, exemple l’utilisation client QBE (Query by Example)

Développeur ou Programmeur

Technicien ou ingénieur informaticien avec utilisation de Bloc note,


environnement de développement, Atelier de développement logiciel.

17
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Administrateur application
Utilisateur final hiérarchiquement privilégié l’application elle même, via un
accès privilégié de l’application.

L’Administrateur de la Base de données (DBA)

Technicien ou ingénieur informaticien connaissant le fonctionnement interne


d’un SGBD et chargé d’administrer la base. Langage SQL, console d’admin
texte, console graphique, console web

V.1 Les métiers autour des bases de données


On trouve différents métiers autour des Bases de données

 Administrateur de la base de données


 Responsable de la sécurité
 Administrateur réseaux
 Développeurs d’application
 Administrateurs d’application
 Utilisateurs : modifier les données, créer des rapports

V.2 Rôles du DBA


Les principales tâches d’un administrateur d’une base de données sont les
suivantes:

 Installation et mise à jour du noyau serveur et des outils d'application


 Planification des ressources de mémorisation des données
 Organisation des structures logiques et physiques des données
 Création et gestion des utilisateurs et de leurs droits d’accès (privilèges)
 Gestion et optimisation des performances du système
 Gestion de la sécurité du système: gestion des accès concurrents
 Gestion de la sécurité du système: sauvegardes, restaurations et
archivages de la base
 Gestion de bases de données réparties

 Les autres utilisateurs assurent les tâches suivantes:


 Développeurs d’application:
 Conception et réalisation d’une application
 Conception de la structure de la base de données
 Evaluation des besoins en ressources de mémorisation
 Optimisation des performances de l’application

18
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Etablissement des mesures de sécurité


 Utilisateurs d’application
 Saisie, modification et suppression de données
 Génération des états de sortie

VI. Etapes de conception d'une base de données


 Analyse de la situation existante et des besoins (clarification)
 Création d'un modèle conceptuel qui permet de représenter tous les
aspects importants du problème
 Traduction du modèle conceptuel en modèle logique (et normalisation
de ce modèle logique)
 Implémentation d'une base de données dans un SGBD, à partir du
modèle logique (et optimisation)

Domaine d’étude
Analyse et Représentation
Position du problème

MODEL
CONCEPTUEL

BDD Implémentation
Solution A() ; B() ; X() ;Y() ; Z() ;
MODEL
LOGIQUE

VII. Le Modèle Conceptuel de données (MCD)


La modélisation des données vise à définir la structure logique de classement
(temporaire ou permanent) de toutes les données représentatives de
l'organisation. La méthode s'appuie sur un formalisme particulier de
modélisation. La procédure d'élaboration permet de rendre la construction du
MCD fiable en permettant des points de contrôle selon une approche de
Qualité Totale documentée.

19
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Entité : Une entité est un objet, une chose concrète ou abstraite qui
peut être reconnue distinctement Ex : Jean-Claude, Momo, Ma Voiture,
Son 4x4, Libreville, classe de 6ème, etc.
 Entité type : Une entité type est la représentation commune que l’on
adopte pour des entités qui possèdent les mêmes caractéristiques Ex :
Personne, Voiture, Région, classe, établissement, etc.

Une entité est une occurrence d’une entité type (ou instance)

 Propriété : caractéristique associée à une entité type Ex : L’âge d’une


personne, le prénom d’une personne, la puissance d’une voiture, le
numéro d’un produit....
 Domaine : On associe un domaine à chaque propriété, qui définit
l’ensemble des valeurs possibles que peut prendre la propriété. Exemple
Numérique, alphanumérique, etc.
 Valeur : C’est la valeur que prend une propriété (à l’intérieur du
domaine) pour une entité particulière Ex : 28 ans pour l’âge de Jean-
Claude, 150cv pour la puissance de son 4x4, Arnauld pour le prénom
d’une personne, etc. Une propriété est dite calculée si sa valeur
dépend des valeurs des propriétés du même entité ou non.

 Identifiant d’une entité : une ou plusieurs propriétés d’une entité ou


d’une association qui ont une valeur unique pour chaque occurrence de
l’entité ou de l’association Ex : Le numéro d’une personne, le numéro
d’immatriculation d’une voiture... On souligne les identifiants d’une
entité.

 Au niveau implémentation : Entité_type = Relation ; Propriété =


Attribut; Identifiant = Clé primaire

 Une relation a donc plusieurs attributs, et le degré d’une relation est le


nombre des attributs qu’elle porte

ETUDIANT Entité-type = Etudiant


N°ELV Nom Age Les Entités sont = MBA, OYIBA, MBOU, OSSA et OYANE
001 MBA 25 Les propriétés sont : N°ELV, Nom et Age
002 OYIBA 28 Age et N°ELV ont pour domaine : Numérique
003 MBOU 33 La propriété Age a des valeurs suivantes : 25, 28, 33, 38, 30
004 OSSA 38
005 OYANE 30 Etudiant a pour Identifiant : N°ELV

Etudiant est de degré 3 c’est le nombre de propriété qu’il possède (N°ELV, Nom et Age)
Chaque ligne du tableau est une occurrence de la relation. (Il en a 5)
Le nombre d’occurrences de la relation dans la base est appelé cardinalité
Etudiant est donc de cardinalité 5.
20
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Association : On appelle Association (conceptuel) le lien entre deux


ou plusieurs Entités-types. Lorsque la base est implémentation on
parlera de jointure entre les relations ou entre les tables.
 Identifiant de relation : L'identifiant d'une relation est le produit
cartésien (concaténation) des identifiants des entités associées par la
relation.
 Dimension d'une relation : Le nombre d'entités associées par une
relation (relation binaire, ternaire, quaternaire...).

ENTREPRISE
FOURNISSEUR
Livraison Matricule
ID_Four Nom
NOM Date Adresse
Adresse Quantité Tel
Montant
Ici, la valeur de la propriété « Montant » de la
livraison dépend de « quantité » et « prix-
unitaire »
PRODUIT
Car : Montant = Qté×Prix-unitaire
N°Prod
On dit que Montant est une propriété
Libellé
calculée
Prix_unitaire

Livraison est une association reliant les entités-types Fournisseur, Entreprise


et Produit. L’identifiant de Livraison sera donc le produit cartésien des 3
identifiant des entités-types qui forme l’association. (Id_Four, N°Prod,
Matricule).

 Type d’association

Association réflexive : Une association dont plusieurs « pattes » lient la


même entité. Dans ce cas, plusieurs occurrences de la même entité seront
associées. En fait, l’entité est en relation avec elle-même.

PERSONNE
Se Marier
N°Pers Une personne ne peut se marier
NOM qu’avec une autre personne
Adresse

21
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Association de type hiérarchique : (père & fils)

ETUDIANT (1, 1) Apprendre (1, n) CLASSE


ID_CL
N°ETU Libelle
NOM
Adresse

Fils
Père
(1, 1) (1, n)
Et sont des cardinalités respectives des entités
Etudiant et Classe. Les règles de gestion sont telles que :

La cardinalité (1, 1) signifie qu’un étudiant ne peut apprendre que dans une et
une seule salle de classe à la fois. Et (1, n) signifie qu’une salle de classe peut
recevoir un ou plusieurs étudiants.
Association de type fonctionnel :

EMPLOYE (0, 1) Avoir (1, 1) VOITURE_SERVICE


Matricule_V
N°EMP Libelle
NOM Marque
Adresse Puissance

La cardinalité (0, 1) signifie qu’un employé ne peut avoir zéro ou une seule
voiture de service à la fois. Et (1, 1) signifie qu’une voiture de service ne peut
être affectée qu’à un et un seul employé à la fois.
Association de type Maillé (N :M)

ETUDIANT (1, n) (1, n) MATIERE


Composer ID_MAT
N°ETU Libelle
Note
NOM
Adresse

La cardinalité (1, n) signifie qu’un étudiant peut composer dans une ou


plusieurs matières. Et (1, n) côté matière signifie qu’un ou plusieurs étudiants
peuvent composer dans une même matière.

NB : Dans ce type d’association, l’association devient elle-même une relation,


car elle porte de nouvelles propriétés, ici c’est la « Note ».

22
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

VIII. Le Modèle Logique de données (MCD)


Ce modèle permet de décrire une solution, en prenant une orientation
informatique générale formelle, mais indépendamment du choix
d'implémentation spécifiques. Ce modèle on l’appelle ici le modèle relationnel
ou Schéma relationnel. La production du MLD obéit aux règles suivantes :

1. Chaque Entité-type est une relation R. Une relation étant définie comme
un sous-ensemble du produit cartésien de plusieurs domaines
R ⊂ D1 × D2 × ... × Dn
D1, D2, ... , Dn sont les domaines de R, n est le degré ou l’arité de R. (plus haut)
Ex : ETUDIANT (N°Etud, Nom, Date_naiss) ;
R = Etudiant ; D1=Domaine (N°Etud) : Numérique; D2=Domaine(Nom) : Texte ;
D3=Domaine(Date_naiss) : Date
Numérique, Texte et Date étant tous les domaines de ETUDIANT

2. Les associations de type Maillé (N :M) deviennes elles aussi des relations
sa clé primaire est le produit cartésien des clés primaires de toutes les
entités qui interviennent dans l’association.
3. La clé primaire d’une relation est soulignée.
4. La clé étrangère est précédée du signe #
5. Dans une association réflexive, on ajoute à la relation une clé étrangère
de la même nature que la clé primaire.

PERSONNE (1, 1)
Se Marier
N°Pers
NOM
Adresse (1, 1)

PERSONNE ( N°Pers , #N°Pers_CE, Nom, Adresse) ;

6. Dans l’association de type hiérarchique, la clé primaire de l’entité Père


migre comme clé étrangère dans la relation Fils.

ETUDIANT (1, 1) Apprendre (1, n) CLASSE


ID_CL
N°ETU Libelle
NOM_ETU Nbre_Etudiant
Adresse_ETU

CLASSE ( ID_CL , Libelle_CL, Nbre_Etudiant) ;


ETUDIANT ( N°ETU , #ID_CL, NOM_ETU, Adresse_ETU) ;

23
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

7. Dans l’association de type Fonctionnel, la clé primaire de chaque entité


migre comme clé étrangère dans l’autre relation.

EMPLOYE (0, 1) Avoir (1, 1) VOITURE_SERVICE


Matricule_V
N°EMP Libelle
NOM Marque
Adresse Puissance

EMPLOYE ( N°EMP, #Matricule_V, NOM_EMP, Adresse_EMP) ;


VOITURE_SERVICE (Matricule_V, #N°EMP, Libelle, Marque, Puissance) ;

8. Dans l’association de type Maillé, l’association devient elle-même une


nouvelle relation et sa clé primaire est le produit cartésien des clés
primaires de toutes les entités qui interviennent dans l’association

ETUDIANT (1, n) (1, n) MATIERE


Composer ID_MAT
N°ETU Libelle
Note
NOM_ETU Coeficient
Adresse_ETU

ETUDIANT ( N°ETU, NOM_ETU, Adresse_ETU) ;


MATIERE (ID_MAT, Libelle, Coeficient) ;
COMPOSER (#N°ETU, #ID_MAT, NOTE) ;

24
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

IX. Les 12 règles de Codd


Il s’agit des règles de bonne conduite d’élaboration et de mise en place d’une
base de données.

1- L'information est représentée de façon logique sous forme de tables.

2- Les données doivent être accessibles de façon logique par les tables, les clés
primaires et les colonnes.

3- Les valeurs nulles doivent être traitées uniformément comme des


"informations absentes", et non pas comme des chaînes vides, ni des blancs, ni
des zéros.

4- Les méta-données doivent être stockées dans la base au même titre que les
données normales.

5- Un langage unique doit permettre de définir les données, les vues sur ces
données, les contraintes d'intégrité, les autorisations d'accès, les transactions,
et enfin, la manipulation des données.

6- Les vues doivent refléter les mises à jour de leurs tables de base, et vice-
versa.

7- Chaque action suivante doit pouvoir être réalisée par une et une seule action
: retrouver, insérer, mettre à jour et supprimer une donnée.

8- Il doit y avoir séparation logique entre les opérations (interactives ou non),


et le stockage physique des données et leurs méthodes d'accès.

9- Les opérations (interactives ou non) peuvent modifier le schéma de la base


de données sans qu'elle n'ait à être recréée, et sans que les applications
construites au dessus d'elle n'aient à être réécrites.

10- Les contraintes d'intégrité doivent être disponibles, et stockées dans les
meta-données et non pas dans un quelconque programme d'application.

11- Le langage de manipulation des données (LMD) ne doit pas se soucier d'où
ni de comment les données sont stockées et/ou distribuées.

12- Le traitement d'une ligne doit respecter les mêmes règles et contraintes
d'intégrité que les opérations portant sur des ensembles.

25
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

X. Dépendances fonctionnelles
Une propriété (ou un groupe de propriétés) Y dépend fonctionnellement d’une
autre propriété (ou groupe de propriétés) X si Etant donné une valeur de X, il
lui correspond une valeur unique de Y. On note X → Y (X détermine Y) Cette
relation est transitive : si X → Y et Y → Z alors X → Z Cependant, on ne
représente que les DF élémentaires.

ETUDIANT (1, n) (1, n) MATIERE


Composer ID_MAT
N°ETU Libelle
NOM_ETU Note Coeficient
PRENOM_ETU Date_compo
Adresse_ETU

 Les propriétés non « identifiant» d’une entité dépendent


fonctionnellement de l’ensemble des identifiants.

Ex : N°ETU ------> NOM_ETU, Prénom_ETU, Adresse_ETU

 L’identifiant et les autre propriété d’une association de type n :m nous


l’avons vu plus haut dépend fonctionnellement des identifiants des
entités liées

Ex : N°ETU, ID_MAT ------> Note, Date_compo

 Une cardinalité (1,1) ou (0,1) est la source d’une dépendance


fonctionnelle de l’identifiant du côté (1,1) ou de (0,1) vers l’autre côté de
l’association

ETUDIANT (1, 1) Apprendre (1, n) CLASSE


ID_CL
N°ETU Libelle
NOM_ETU Nbre_Etudiant
Adresse_ETU

Père Fils
Ex : ID_CL ------> N°ETU, le fils dépend du père D’où,

CLASSE ( ID_CL , Libelle_CL, Nbre_Etudiant) ;


ETUDIANT ( N°ETU , #ID_CL, NOM_ETU, Adresse_ETU) ;

26
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

XI. Les Formes normales de Boyce-Codd


Ces règles permettent d’éliminer totalement les possibilités de doublons et
des incohérences dans une base de données et d’appliquer toutes les
intégrités référentielles possibles

 1ère Forme Normale (1FN)


-Toutes les entités et les associations possèdent un identifiant
-Aucune propriété n’est à valeurs multiples (propriétés atomiques)

CLASSE Ici la propriété « Liste d’Etudiants » n’est pas


ID_CL atomique, il faut donc éliminer cette propriété ;
Libelle
Nbre_Etudiant Ici ID_CL est l’identifiant de l’entité classe, il
Liste d’Etudiants permet d’identifier une classe de façon unique.

 2ème Forme Normale (2FN)


-Le modèle est en 1FN
-Toutes les DF entre les propriétés sont élémentaires
-Toute propriété n’appartenant pas à une clé ne dépend pas seulement
d’une partie de son identifiant

ETUDIANT (1, n) (1, n) MATIERE


ID_MAT
Composer
N°ETU Libelle
NOM_ETU Note
PRENOM_ETU Date_compo
Adresse_ETU coeficient

(N°ETU, ID_MAT) est l’identifiant de la relation Composer, or

ID_MAT--------->Coefficient, la propriété coefficient ne dépend pas de


N°ETU, car le coefficient n’a aucun lien en principe avec l’étudiant. Et comme
coefficient dépend seulement d’une partie de l’identifiant, la propriété
coefficient doit être supprimée de la relation composer et la ramener dans
l’entité matière.

27
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 3ème Forme Normale (3FN)


-Le modèle est en 2FN
-Toutes les DF entre les propriétés sont directes
-Les propriétés d’une entité doivent dépendre de l’identifiant de l’entité
de manière directe
- Toute propriété n’appartenant pas à un identifiant ne dépend pas d’un
attribut non identifiant

ETUDIANT (1, n) (1, n) MATIERE


ID_MAT
Composer
N°ETU Libelle
NOM_ETU Note
PRENOM_ETU Date_compo
Adresse_ETU Moyenne

Note --------->Moyenne, or Note n’est pas l’identifiant de la relation


Composer, on va devoir supprimer la propriété Moyenne dans composer.

28
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exercice de synthèse: Livraison des Produits


Un fournisseur doit mettre en place un système d’informations lui permettant de
mieux gérer la livraison et la vente de ses nombreux produits auprès de sa clientèle
dans les trois communes suivantes : Libreville, Owendo et Akanda. On donne les
informations suivantes :

Dans chaque commune la livraison se fait par arrondissement et par quartier.


Une commune a au plus 6 arrondissements. Un client est identifié par son numéro,
un nom, un prénom et un Numéro de téléphone. Un produit comprend un numéro,
un libellé et un prix unitaire. Afin d’être livré, un client effectue sa commande auprès
du fournisseur. Une seule commande peut concerner plusieurs produits, avec pour
chaque produit la quantité commandé. Une commande aura le Numéro, les produits
commandés, la date de la commande et le montant de la commande.

Question : Produite le MCD et le MLD du futur système

Solution MCD
(1, 6) (1, 1) (1, n) (1, 1)
COMMUNE ARRONDISSEMENT
QUARTIER
Se Divise N°QUART
Code_COM Code_ARR Se
NOM_COM NOM_ARR NOM_QUART
compose

(1, n)

PRODUIT
Habite
N°PROD
Libelle_PROD CLIENT
Prix_Unitaire N°Client
NOM_CL
PRENOM_CL
(0, n) TEL_CL (1, 1)
(1, n)
COMMANDE (1, n)
Ligne_Commande N°CMD
Date_CMD Fait
Quantité Montant_CMD (1, 1)
Montant_Produit
-
29
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Déduction du Modèle Relationnel

COMMUNE (Code_COM, NOM_COM) ;

ARRONDISSEMENT (Code_ARR, #Code_COM, NOM_ARR) ;

QUARTIER (N°_QUART, #Code_ARR, NOM_QUART) ;

CLIENT (N°Client, #N°_QUART, NOM_CL, PRENOM_CL, TEL_CL) ;

COMMANDE (N°CMD, #N°Client, DATE_CMD, Montant_CMD) ;

PRODUIT (N°PROD, Libelle_PROD, Prix_Unitaire) ;

LIGNE_COMMANDE (#N°CMD, #N°PROD, Quantité, Montant_produit) ;

30
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Partie II : L’Algèbre Relationnelle

I. Définition
L'algèbre relationnelle associée au modèle relationnel est le fondement
théorique du langage standard SQL, qui est utilisé pour manipuler les données
stockées dans une Base de Données. C’est un langage opérationnel, une
requête s’écrit donc comme une succession d’opérations effectuées sur des
relations.

La représentation d'information sous forme relationnelle est


intéressante car les fondements mathématiques du relationnel, outre qu'ils
permettent une modélisation logique simple et puissante, fournissent
également un ensemble de concepts pour manipuler formellement
l'information ainsi modélisée. Ainsi une algèbre relationnelle, sous forme d'un
ensemble d'opérations formelles, permet d'exprimer des questions, ou
requêtes, posées à une représentation relationnelle, sous forme d'expressions
algébriques

II. Les opérateurs de l’algèbre relationnelle


L’algèbre se compose d’un ensemble d’opérateurs, parmi lesquels 5 sont
nécessaires et suffisants et permettent de définir les autres par composition.

 Les opérateurs Unaires


Ils prennent en entrée une seule relation, il s’agit de :
- La sélection ()
Définition formelle

(r)={t / t r et(t)}, la sélection prend en entré r et 

Où r est une relation de schéma R et  une condition ou prédicat de


sélection (définie ci-après).

Le résultat est l’ensemble des n-uplets de la relation r pour lesquels la


condition  est vraie. Elle renvoie comme résultat les lignes d’une table r qui
respectent la condition donnée .

31
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exemple : Soit la relation Commande Suivante :


COMMANDE
N°CMD N°Client Date_CMD Montant
001 005 11/03/2015 35000
002 008 18/06/2017 55000
003 035 23/11/2019 15000
004 062 12/02/2020 75000
005 100 19/03/2020 48000

Q : Afficher les commandes de clients dont la date est inférieur au 01/01/2020


et le montant supérieur à 30.000FCFA.
La sélection se traduit comme suite :

Q= (Date_CMD<01/01/2020  Montant>30.000)( COMMANDE) ;

R = COMMANDE et  = Date_CMD<01/01/2020 Montant>30.000


L’opérateur  signifie « Et ». Cette sélection donne le résultat suivant :

COMMANDE
N°CMD N°Client Date_CMD Montant
001 005 11/03/2015 35000
002 008 18/06/2017 55000

- La Projection ()
Définition formelle
X(r)={t(X) / t r}, où r une relation de schéma R et X un ensemble
d’attributs tels que XR.

Le résultat est un sous ensemble de r inférieur ou égal au nombre d’attributs


que r. Elle renvoie comme résultat les colonnes d’une table r indiquées par X.

32
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exemple : Soit la relation Commande Suivante :


COMMANDE
N°CMD N°Client Date_CMD Montant
001 005 11/03/2015 35000
002 008 18/06/2017 55000
003 035 23/11/2019 15000
004 062 12/02/2020 75000
005 100 19/03/2020 48000
Q : Afficher les N°CMD et Montants de la table commande.
La Projection se traduit comme suite :

Q=  (N°CMD, Montant)( COMMANDE) ;


R = COMMANDE et X = N°CMD, Montant
Cette projection donne le résultat suivant :

COMMANDE

N°CMD Montant
001 35000
002 55000
003 15000
004 75000
005 48000

NB : la projection est un opérateur qui n’agit pas sur les lignes du


résultat mais sur les colonnes (c’est-à-dire sur le schéma).

 Les opérateurs Binaires


Ils prennent en entrée deux relations R1 et R2, il s’agit de :

- Le Produit cartésien
Définition formelle

r x s = {t / t(R) r et t(S) s}, r et s sont deux relations de


schéma R et S. (r x s) a pour schéma R+S
NB : R+S est l’union disjointe de R et S {R.A / AR} U {S.B / B S}

33
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

• Chacun des n-uplets de r1 est combiné avec chacun des n-uplets de r2


• Le schéma du résultat a l’union des attributs des relations
• NB : Si les deux relations ont un attribut de même nom, on renomme cet
attribut

Exemple de Produit cartésien soient les 2 relations suivantes :

R S
A B C B F
a1 b1 c1 b4 f1
a2 b2 c2 b5 f2
b6 f3
Le Produit cartésien RxS donne ce qui suit :

A R.B C S.B F
a1 b1 c1 b4 f1
a1 b1 c1 b5 f2
a1 b1 c1 b6 f3
a2 b2 c2 b4 f1
a2 b2 c2 b5 f2
a2 b2 c2 b6 f3

- La Jointure
Jointure naturelle : R1 R2
Soient R et S deux relations ayant X attributs communs. La jointure de R et de
S se définie comme suite :

R s = {t / t(R) r et t(S) s}

Le schéma du résultat est similaire au schéma du produit cartésien. Les


attributs X n’apparaissent qu’une fois. Au niveau des lignes : on combine les
lignes de R1 avec les lignes de R2 qui ont même valeur pour les attributs X.

La jointure peut être exprimée à l’aide des opérateurs de projection et de

sélection comme suite : r s = (R union S)(r x s)


Avec X= R S = {B1, ..., Bp} et : t(R.B1)= t(S.B1) ... t(R.Bp)= t(S.Bp)

34
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exemple de Jointure naturelle soient les 2 relations suivantes :

R S
A B C B F
a1 b1 c1 b4 f1
a2 b2 c2 b2 f2
b2 f3
Le Produit cartésien RxS donne ce qui suit :

A R.B C S.B F
a1 b1 c1 b4 f1
a1 b1 c1 b2 f2
a1 b1 c1 b2 f3
a2 b2 c2 b4 f1
a2 b2 c2 b2 f2
a2 b2 c2 b2 f3

Les lignes en blanc sont celle qui répondent au critère de la jointure


La jointure naturelle R S donne ce qui suit :

A R.B C F
a2 b2 c2 f2
a2 b2 c2 f3
Jointure avec condition ou Thêta jointure : R S,

Où est une condition

R S
A B C D E
3 5 3 1 2
2 6 7 4 1
9 1
On veut le résultat de la jointure avec = S.D > R.C

La jointure conditionnelle R S donne ce qui suit :

A B C D E
3 5 3 4 1
3 5 3 9 1
2 6 7 9 1

35
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Union, Intersection, Différence


• Tous ces opérateurs prennent en entrée 2 relations qui doivent avoir le
même schéma

• Union(R1R2) : ensemble de n-uplets qui sont dans R1 ou dans R2


• Intersection (R1 R2) : ensemble de n-uplets qui sont dans R1 et dans R2
• Différence (R1 \R2 ou R1 –R2) : ensemble de n-uplets qui sont dans R1
mais pas dans R2

EXEMPLES

R1 R2
A B A B
a1 b1 a1 b1
a2 b2 a2 b3
a3 b3 a3 b4

On obtient les résultats suivants :

(R1 R2) (R1R2) (R1 –R2)

A B A B A B
a1 b1 a1 b1 a2 b2
a2 b2 a3 b3
Les n-uplets à la fois a3 b3
dans R1 et dans R2 a2 b3
a3 b4 Les n-uplets de R1
qui ne sont pas dans
Les n-uplets de R1 R2
union ceux de R2

Par définition l’intersection, l’union et la différence se définissent de façon


suivante :

r s = { t / t r ou ts } ;
rs = { t / t r et ts} ;
r \s = { t / t r et t s}

36
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

III. Propriétés algébriques


 L’union  et l’intersection  sont commutatives et associatifs
rs = sr, r (s1 s2) = (rs1)s2;
De même pour 
r s = s r, r  (s1  s2) = (r s1)  s2;
 Le produit cartésien est associatif et commutatif
r X s = s X r, r X (s1 X s2) = (r X s1) X s2;
 La jointure est associative et commutative
r s=s r, r (s1 s2) = (r s1) s2;
Les relations d’équivalence de l’algèbre sont des égalités entre des formules.
Elles sont à la base des optimisations de requêtes.

Exercice : Sachant que les schémas de R et S sont les mêmes et si X R on a


les égalités suivantes : dites celles qui sont justes ou fausses.

• X (r s) = X (r) X (s) est une égalité fausse

• X(r –s) = X (r) -X (s) est une égalité fausse

• X(r s) = X (r) X (s) est une égalité correcte

La première égalité justifie la non Distributivité de l’intersection.

Contre exemple

R1 S
A B A B
a1 b1 a1 b2

 A (r s) =

Or,  A (r) = a1 ;  A (s) = a1 ;

  A (r)   A (s) = a1 ; d’où l’égalité 1 reste fausse !

37
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

La Non Distributivité de la différence

Contre exemple

R1 S
A B A B
a1 b1 a1 b2

 A (r - s)={a1} ;

Or,  A (r) = {a1} ;  A (s) = {a1} ;

  A (r) -  A (s) = ; d’où l’égalité 2 reste fausse !

X(r –s) = X (r) -X (s)


- La Distributivité de l’union : X (r s) = X (r) X (s)

Démonstration

On rappel que: X(r)={t(X) / t r} ; tX(r) t’ r et t’(X)=t

t X (r s) t’, t’(r s) et t’(X)=t // par définition de la projection

t’ ((t’r) ou (t’s)) et t’(X)=t // par définition de l’union

t’ ((t’r) et t’(X)=t) ou ((t’s) et t’(X)=t) // distrib. de «et» sur «ou»

(t’, t’r et t’(X)=t) ou (t’, t’s et t’(X)=t) // distributivité de 

t X (r) ou t X(s) // par définition de la projection

t (X(r) X(s)) // par définition de l’union

38
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

- Le renommage α
C’est une opération unaire, le renommage d’une table R permet d’obtenir une table R’
dont les tuples sont ceux de R et dont le schéma est celui de R dans lequel un attribut
a été renommé :
R’ = α [nom_attribut : nouveau_nom] R

• le schéma de R’ = (α [n, m] R) est le même que le schéma (R) avec n renommé en m


• précondition : le nouveau nom d’attribut n’est pas déjà le nom d’un attribut de R
• intérêt : permet de résoudre des problèmes de compatibilité entre noms d’attributs
de 2 tables opérandes d’une opération binaire :
Exemple : R2 = α [B: C] R1

- La jointure Externe
la jointure externe de 2 tables R et S est une table T obtenue par jointure de R et S et
ajout des tuples de R et de S ne participant pas à la jointure avec des valeurs nulles
pour les attributs de l’autre table :
T= R S (EXT-JOINT):

Intérêt : composer des vues sans perte d’information


On distingue :
• la jointure externe droite (REXT-JOINT): elle garde seulement les tuples
sans correspondant de la table de droite
• la jointure externe gauche (LEXT-JOINT): elle garde seulement les
tuples sans correspondant de la table de gauche
Où est une condition

R S
A B C A D
3 5 3 3 2
2 6 7 3 1
9 4

La jointure Externe R S donne ce qui suit :

A B C D
3 5 3 2
3 5 3 1
2 6 7 ----
9 ----- ----- 4

39
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

- La Division (R1\R2)
le quotient de la division d'une table D (a1, a2…ap, ap+1…an) par la sous table
d (ap …an) est la table Q (a1, a2…ap) dont les tuples sont ceux qui concaténés à
tout tuple de d donnent un tuple de D : Q = (D ÷ d), DIVISION (D, d)

Intérêts de la division :
• elle permet de rechercher dans une table les sous-tables qui sont complétées
par tous ceux d’une autre table
• elle permet ainsi de répondre à des requêtes de la forme « quel que soit x,
trouver y »

Exemple :

R
S
A B C D
A
a1 b1 c1 d1
a1
a2 b2 c2 d2
a3
a3 b3 c3 d3
a4
a4 b4 c4 d4

La Division de R par S donne ce qui suit :

R\S
B C D
b1 c1 d1
b3 c3 d3
b4 c4 d4
Les tuples de la table R\S, concaténés à chacun des tuples de la table
S donnent un tuple de la table R.

40
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exercice de synthèse: Gestion d’une Bibliothèque


Soit le modèle relationnel de la base Bibliothèque suivante:

Etudiant (NumEt, NomEtd, PrenomEdt, AdresseEtd)

Livre (NumLiv, TitreLiv, #NumAu, #NumEd, #NumT, AnneeEdit)

Auteur (NumAu, NomAu, AdresseAu)

Editeur (NumEd, NomEd, AdresseEd)

Theme (NumT, IntituléT)

Prêt (#NumEt, #NumLiv, DatePret, DateRetour)

Ecrire en langage algébrique les requêtes suivantes:

1. Le nom, le prénom et l’adresse de l’étudiant de nom ‘MBA’

2. Le numéro de l’auteur ‘MBA’

3. la liste des livres de l’auteur numéro 121

4. les livres (NumLiv, TitreLiv, AnneeEdit) de l’auteur de nom ‘MOUSSAVOU’

5. le numéro et le nom de l’auteur du livre « comment avoir 20 en BDD »

6. Les livres(NumLiv, TitreLiv) de l’auteur ‘MBA’ édités chez l’éditeur ‘OVONO’

7. les livres (NumLiv, TitreLiv) de l’auteur ‘MBA’ ou ‘MOUSSAVOU’

8. les livres qui n’ont jamais été empruntés

41
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Correction

Le nom, le prénom et l’adresse de l’étudiant de nom ‘MBA’

1. πNomEt, PrenomEt, AdresseEt ( σ NomEtd = ‘MBA’ (Etudiant)) ;

Le nom, le prénom et l’adresse de l’étudiant de nom ‘MBA’

2. πNumAu ( σNomAu = ‘MBA’ (Auteur)) ;


La liste des livres de l’auteur numéro 121

3. σNumAu= 121(Livre);
Les livres de l’auteur de nom ‘MOUSSAVOU’

4. π NumLiv, TitreLiv, AnneeEdit (σNomAu = ‘MOUSSAVOU’ (Livre ⋈Auteur))

Le numéro de l’auteur du livre « comment avoir 20 en BDD »

5. π NumAu, nomAu(σTitreLiv= ‘comment avoir 20 en BDD’ (Livre ⋈Auteur))


Les livres (NumLiv, TitreLiv, NomAu, NomEd) de l’auteur ‘MBA’ édités chez l’éditeur ‘OVONO’

6. π NumLiv, TitreLiv, NomAu, NomEd (σNomAu= ‘MBA’ and


NomEd=’OVONO’(Livre ⋈Editeur⋈Auteur)) ;

Les livres (NumLiv, TitreLiv, NomAu) de l’auteur ‘MBA’ ou ‘MOUSSAVOU’

7. π NumLiv, TitreLiv, NomAu (σNomAu= ‘MBA’ ou


NomAu= ‘Moussavou’ (Livre ⋈Auteur)) ;

les livres (NumLiv, TitreLiv) qui n’ont jamais été empruntés

8. π NumLiv, TitreLiv ((π NumLiv Livre -π NumLiv Prêt) ⋈Livre )) ;

42
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Partie III : Le Langage SQL

I. Définition
SQL (pour Structured Query Language = langage de requêtes structuré)
est un langage déclaratif destiné à la manipulation de bases de données au sein
des SGBD et plus particulièrement les SGBDR. SQL un langage standardisé,
implémenté par tous les, qui permet, indépendamment de la plate-forme
technologique et de façon déclarative, de définir le modèle de données, de le
contrôler et enfin de le manipuler.

Les SQLs
Le langage SQL a bénéficié de plusieurs normalisations.
● SQL1 (1986) : première norme
● SQL2 (1992) : SQL1 + de nouvelles instructions (par exemple : JOIN)
● SQL3 (1999) : SQL2 + approche orienté objet
● SQL2003 : SQL3 + quelques modifications mineures (ex: SQL/XML)
● SQL:2008 et SQL:2011 : quelques modifications

II. Les Classes d’instructions SQL


1. Selon le SQL2 (LDD, LCD, LMD, LCT)
Il est composé de quatre sous ensembles:

- Le Langage de Définition de Données (LDD, ou en anglais DDL,


Data Definition Language) pour créer et supprimer des objets dans la
base de données (tables, contraintes d'intégrité, vues, etc.).Exemple de
commandes : CREATE, DROP, ALTER
- Le Langage de Contrôle de Données (LCD, ou en anglais DCL,
Data Control Language) pour gérer droits sur les objets de la base
(création des utilisateurs et affectation de leurs droits). Exemple de
commandes : GRANT, REVOKE
- Le Langage de Manipulation de Données (LMD, ou en anglais
DML, Data Manipulation Language) pour la recherche, l'insertion, la
mise à jour et la suppression de données. Le LMD est basé sur les

43
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

opérateurs relationnels, auxquels sont ajoutés des fonctions de calcul


d'agrégats et des instructions pour réaliser les opérations d'insertion,
mise à jour et suppression. Exemple de commandes : INSERT, UPDATE
DELETE, SELECT.
- Le Langage de Contrôle de Transaction (LCT, ou en anglais TCL,
Transaction Control Language) pour la gestion des transactions (validation ou
annulation de modifications de données dans la BD) Exemple de commandes :
COMMIT, ROLLBACK

2. Selon le SQL3
On dénombre 7 classes d'instructions :

Instructions de connexion. ouvrir et fermer une connection à une


base (CONNECT, DISCONNECT)
Instruction de contrôle. Contrôler l'exécution d'un groupe
d'instructions (CALL, RETURN)
Instructions sur les données (ex-LMD). Effet
persistant sur les données (SELECT, INSERT, UPDATE,
DELETE)
Instruction de diagnostic. Accès à des informations de
diagnostic d'erreurs ou d'exceptions. Aussi : initient les levées
d'erreurs (GET DIAGNOSTICS).
Instruction sur les schémas (ex-LDD). Effet
persistant sur les schémas (ALTER, CREATE, DROP).
Instruction de session. Contrôlent les paramètres
d'une session de connexion (SET, SET CONSTRAINTS).
Instruction de transaction. Fixent le début et la fin
d'une transaction (COMMIT, ROLLBACK)

SQL n'est pas procédural (pas d'instruction conditionnelle, itérative) : c'est un


langage relationnel. Il assure la Gestion et traitement des erreurs : procédures
sont bien pratiques. Au sein des SGBDR : des langages définis pour ces
structures de contrôle (pas normalisés), proche des constructions SQL.
Ex.: PL/SQL d'Oracle, triggers en SQLite ; interfaçage par un autre langage de
programmation.

44
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

III. Les opérateurs


Un opérateur est un symbole (ou un mot court) qui précise une action à
effectuer sur des expressions.

Ex: + est l'opérateur d'addition, AND est celui du et-logique.


Il existe plusieurs types d'opérateurs :

Opérateurs de comparaison ; opérateurs arithmétiques ; opérateurs logiques


Et les opérateurs inclassables.
Les opérateurs sont principalement utilisés par le LMD (commandes SELECT,
INSERT, ...) et plus rarement par le LDD. Il existe des priorités entre
opérateurs (à connaître) Pas toujours tous implémentés dans le SGBDR : il
est fortement conseiller de regarder le manuel d'utilisation pour connaître les
opérateurs disponibles.

1. Opérateurs arithmétiques

● Entre 2 expressions numériques, 2 valeurs de types numériques différents.


● + : addition, concaténation de chaînes
● - : soustraction (d'entier, de date, ...), changement de signe
● * : multiplication
● / : division
● 1 opérande = NULL : résultat = NULL

2. Opérateurs de comparaison

● Testent si 2 expressions sont : égales, différentes, inférieure l'une à l'autre


(pour les types ordonnées)
● Résultat : valeur booléenne TRUE, FALSE, UNKNOWN.
● Si une des expressions a pour valeur NULL, le résultat est NULL.
● Opérateurs : =, !=, <, >, <=, >=, IN, NOT IN

3. Opérateurs logiques

● Utilisés (principalement) dans les clauses WHERE et ON (de JOIN).


● Résultats: valeur booléenne ou NULL
● Grand nombre d'opérateurs dans les SGBDR, pas dans la norme.
● Certains parfois classés dans d'autres catégories

45
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

(transparent suivant : g=opérateur d'expression régulière, q=opérateur de


sous-requête, t= opérateur sur les lignes ou table).

Opérateur Signification

AND Vrai si les deux opérandes valent vrai

OR Vrai si l’un des deux opérandes est vrai

NOT Inverse la valeur de l’opérande ; si l’opérande est un autre


comparateur, inverse la valeur finale de la comparaison. Par
exemple, NOT LIKE renverra Faux si le LIKE envoi Vrai

ALL Vrai si toutes les comparaisons d’un ensemble de comparaisons


valent vrai

ANY Vrai si l’une des comparaisons d’un ensemble de comparaisons


vaut vrai

SOME Vrai si certaines comparaisons d’un ensemble de comparaisons


valent vrai (équivalent à ANY)

EXISTS Vrai si une sous-requête envoie des lignes (n’a pas un résultat
vide)

LIKE Vrai si l’opérande correspond au motif indiqué. Par exemple : si


% est un caractère joker (c.-à-d. qui remplace n’importe quelle
chaine de caractères). L’expression mavar LIKE ‘%ert%’ est
évaluée à vrai si la variable mavar contient le motif (la sous-
chaîne) ‘ert’. Notons ici que PostGreSQL fournit lui aussi
l’opérateur Similar To qui permet aussi de comparer deux
chaînes, dont l’une est une vraie expression régulière.
BETWEEN Vrai si l’opérande appartient à l’intervalle spécifié

46
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

IN Vrai si l’opérande appartient à l’ensemble d’expressions spécifié,


ou si l’opérande est une ligne du résultat de la requête spécifiée.

Opérateur Signification

( et ) Délimiteurs d’expressions pour forcer les priorités

% Caractère ‘Joker’, remplace un caractère éventuellement vide ou


une chaîne de caractères quelconque, et ce à l’intérieur d’une
chaîne de caractères et s’utilise principalement avec l’opérateur
LIKE
_ (tiret du 8) Dans certains SGBD, l’underscore est ce caractère joker qui sert
à remplacer exactement un seul caractère dans une chaine.
Exemple : ‘_dd%’ dénote une chaine commençant par un
caractère quelconque, suivi de 2 caractères ‘d’ suivi d’une chaine
de caractère quelconque (éventuellement vide)
, La virgule sert de séparateur entre les éléments d’une liste (par
exemple une liste de colonne après un SELECT).

. Le point sert soit dans la représentation des Littéraux réels soit


comme séparateur pour qualifier un identificateur. (on préfixe
l’identificateur de son espace de nom englobant, par exemple
Acteur.nom
-- Délimiteur de commentaire sur une ligne : ce qui suit ce
délimiteur jusqu’à la fin de la ligne est un commentaire (comme
en langage C)
/* et */ Délimiteur de commentaire sur plusieurs lignes. Ce qui est entre
ces délimiteurs est un commentaire. (Comme en C)

- Outre la soustraction, cet opérateur permet aussi d’exprimer un


intervalle de caractères dans une chaine, notamment dans
l’expression de directives CHECK. Exemple : Num_étudiant
Like ‘[2-4]%’ pour spécifier qu’un numéro de l’étudiant doit
commencer par un chiffre compris entre 2 et 4 suivit de
n’importe quelle chaine de caractères.

47
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

; Fin d’une instruction à exécuter.

4. Priorité entre opérateurs


Par ordre de priorité :
 ( et )
 + et – unaires
 * et /
 + et – binaries
 =, !=, <, >, <=, >=
 NOT
 AND
 ALL, ANY, SOME, BETWEEN, LIKE, OR, IN

IV. MISE EN OEUVRE DU SQL


1) Les instructions liées aux schémas (ex-LDD)
(ALTER, CREATE, DROP).

CREATE

Création d’une Base de données


CREATE DATABASE Nom_de_Base ;
Ex : CREATE DATABASE BIBLIOTHEQUE ;

Dans certains SGBD, si une base de données porte déjà ce nom, la requête
retournera une erreur comme MySQL . Pour éviter d’avoir cette erreur, il
convient d’utiliser la requête suivante:

CREATE DATABASE IF NOT EXISTS BIBLIOTHEQUE;

48
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Création d’une Table

CREATE TABLE Nomtable ( -- définition des colonnes colonne


Type [ NOT NULL [UNIQUE] ]
[DEFAULT valeur ]
[PRIMARY KEY ]
[REFERENCES table]
[ CHECK condition ], ... ,
-- contraintes de table [ PRIMARY KEY (liste de colonnes) ],
[ UNIQUE (liste de colonnes) ] , ... ,
[ FOREIGN KEY (liste de colonnes) REFERENCES Nomtable
[ ON DELETE {RESTRICT | CASCADE | SET NULL} ]
[ ON UPDATE {RESTRICT | CASCADE | SET NULL} ] , ... , );
[ CHECK
Les différents types de condition ], ... de
contraintes ) colonne :

– UNIQUE : 2 tuples de cette table ne peuvent avoir la


même valeur pour cette colonne. Inutile si la colonne a la contrainte de clé
primaire.
– PRIMARY KEY : spécifie que cette colonne est la clé primaire. Si plusieurs
colonnes forment la clé primaire : contrainte de table.

– CHECK (exp) : spécifie que les valeurs de cette colonne doivent vérifier la
condition entre parenthèses

– COLLATE NOCASE : pour les chaines de caractères, ne pas tenir compte de


la casse.

49
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les contraintes de table (après la définition des colonnes) :


– nommées

– types : même que pour les colonnes.

– Contrainte : comme pour les spécifications d'une colonne, met


en jeu plusieurs colonnes OU clé étrangère

Contraintes de table : la contrainte de clé étrangère :

CONSTRAINT <nom_contrainte> FOREIGN KEY


( <nom_colonne_référente> [, ...]) REFERENCES
<nom_table_référencée>
( <nom_colonne_référencée> [ ,...] )
[ ON DELETE { CASCADE | SET NULL | SET DEFAULT | NO ACTION |
RESTRICT} ]
[ ON UPDATE { CASCADE | SET NULL | NO ACTION |RESTRICT} ]

Lors de la définition d'une contrainte de clé étrangère on peut


spécifier ce que l'on fait quand les colonnes de la table référencée
sont supprimées (ON DELETE)

● Supposons que la table T a une clé étrangère portant sur la table T' :
– CASCADE : mise à jour et suppression de T' répercutés sur T
– SET NULL : donne la valeur NULL aux éléments des colonnes de T
correspondant à celles de t' ayant été touchées.

– SET DEFAULT : donne la valeur de défaut


– NO ACTION : la table n'est pas modifié (action par défaut).
– RESTRICT : empêche la modification qui a amené le changement de la clé
étrangère, et génère une erreur.
Principaux types de données
CHAR(n) et VARCHAR(n) ;
SMALLINT
INTEGER
DECIMAL (n, m)

50
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

DATE
Contraintes d'intégrité
NOT NULL valeur null impossible
UNIQUE unicité d'un attribut
PRIMARY KEY clé primaire
FOREIGN KEY clé étrangère
CHECK plage ou liste de valeurs

Exemple
CREATE TABLE Client
( Id_Cli VARCHAR (4) PRIMARY KEY,
nom VARCHAR(20),
ville VARCHAR(30) CHECK (ville IN ('Nice', 'Paris', 'Rome'))) ;

CREATE TABLE Produit


(Id_Pro CHAR(6) PRIMARY KEY,
nom CHAR(30) NOT NULL UNIQUE,
marque CHAR(30),
prix DECIMAL(6,2),
qstock SMALLINT CHECK (qstock BETWEEN 0 AND 100) ,
-- contrainte de table CHECK (marque <> 'IBM' OR qstock < 10));

CREATE TABLE Vente


(Id_Cli VARCHAR(4) NOT NULL REFERENCES Client,
Id_Pro VARCHAR(6) NOT NULL REFERENCES Produit,
Date DATE NOT NULL,
qte SMALLINT CHECK (qte BETWEEN 1 AND 10) ,
PRIMARY KEY (Id_Cli, Id_Pro, date),

51
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

FOREIGN KEY (Id_Pro) REFERENCES Produit (Id_Pro) ON DELETE


CASCADE ON UPDATE CASCADE);

Création d’index
La commande CREATE INDEX permet de créer des index multi-colonne
Syntaxe :
CREATE [UNIQUE] INDEX Nom_index ON Nom_table (colonne
[ASC|DESC], ...)
L'option UNIQUE permet d'assurer l'unicité d'une clé
Ex.: CREATE UNIQUE INDEX index1 ON Client(Nom) ;
Les index permettent d'accélérer les recherches. Le système détermine sa
stratégie d'accès en fonction des index existants. Les index sont
automatiquement mis à jour.
Il est indispensable de créer les index appropriés pour accélérer le traitement
des requêtes.
Il ne faut cependant pas créer des index sur n'importe quel colonne ou groupe
de colonnes, car les mises à jour seraient ralenties inutilement par la
maintenance de ces index.
Création d’une vue
La vue est importante dans une base de données parce qu'elle sert
d'intermédiaire entre celle-ci et l'utilisateur. Il s'agit d'une table virtuelle. Il
faut bien comprendre qu'il s'agit juste d'une représentation des données pour
une exploitation visuelle. Autrement dit, les données ne sont pas dans une
table de la base de données.

Il est possible de rassembler dans une vue des informations provenant de


plusieurs tables. On parle de "vue" car il s'agit simplement d'une
représentation.

L'intérêt est de pouvoir regrouper les informations dans une entité et de


sélectionner les données à afficher. Cela rend plus sûr la sécurité des données
puisque l'accès à la table est restreinte pour l'utilisateur.

Les données présentes dans une vue sont alors définies par une clause SELECT
après avoir créé la vue à l'aide de la clause CREATE VIEW. Comme toujours, il
ne faut pas oublier de mettre le VIEW après CREATE pour préciser qu'il s'agit
bien d'une VIEW.

La création d'une vue se fait avec la syntaxe suivante :

52
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

CREATE [OR REPLACE] VIEW Nom_Vue (colonnes) AS SELECT ... ;

Ex : CREATE OR REPLACE VIEW VuClient (Id_client, nom_client) As


SELECT Id_Cl, nom From Client;

Et si la vue concerne une table entière :

Ex : CREATE OR REPLACE VIEW VuClient ON Client;

ALTER

La modification du schéma n'est pas prévue dans SQL1 ; cependant la plupart


des systèmes permettent la suppression ou la modification d'une table à l'aide
de La commande : ALTER

Exemple.: On veut par exemple ajouter la colonne téléphone à la table Client.

ALTER TABLE Client ADD COLUMN telephone VARCHAR(16);


De même on pourra modifier la structure d’une vue. On peut renommer les
objets :

ALTER TABLE Nom_table RENAME TO Nouveau_nom;

DROP

DROP permet de supprimer les objets d’une base de données. Faire


attention à son utilisation, il efface le schéma tout entier et il est
sans appel. Un objet supprimé ne pourra plus être récupéré.

DROP DATABASE Nom_de_la_BASE ; --Suppression de la base de données

DROP TABLE Client ; -- Suppression du schéma d’une table entière

Pour supprimer une colonne dans une table voici la requête SQL :

ALTER TABLE Client DROP COLUMN Ville;

2) Instructions de connexion. ouvrir et fermer une connection


à une base (CONNECT, DISCONNECT)
53
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Syntaxe de la commande SQLPLUS d’Oracle pour une connexion à une base de


données.

SQLPLUS {username[/password][@connect_identifier] | / } [AS


{SYSOPER|SYSDBA}] |/NOLOG

 username[/password].
Nom d'utilisateur et mot de passe avec lequel vous voulez vous connecter
à la base de données Oracle.

SQLPLUS MBA/Moimeme
@connect_identifier.
Identifiant de connexion Oracle Net. Il s’agit du descripteur de
connexion qui indique la base Oracle à laquelle vous voulez vous
connecter. Ce descripteur est présent dans votre fichier TNSNAMES.
ORA situé dans %ORACLE_HOME%\NETWORK\ADMIN.

SQLPLUS MBA/Moimeme@test

Ouverture de session en utilisant l'authentification du système


d'exploitation.

AS{SYSOPER|SYSDBA}.
La clause AS permet des connexions privilégiées pour les utilisateurs qui
ont les privilèges SYSOPER ou SYSDBA.
SQLPLUS SYS/monpasse AS SYSDBA

/NOLOG.
La clause /NOLOG permet d'ouvrir SQLPLUS sans établir de connexion
à une base de données. Vous devez utilisez la commande CONNECT
pour ouvrir une session sur la base de données Oracle.
SET ORACLE_SID=DBAPROD
SQLPLUS /NOLOG

SQL> CONNECT Entrez le nom utilisateur : MBA Entrez le mot de


passe : Moimeme.
SQL> ou bien SQL> CONNECT MBA / Moimeme Connecté.
SQL>

Une session SQLPLUS se termine par la commande EXIT.


Attention, les transactions en cours sont validées après un EXIT, sauf si la
commande ROLLBACK est exécutée.

54
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Vous terminez une session en cours à l'aide de l'instruction SQL ALTER


SYSTEM KILL SESSION. L'instruction suivante met fin à la session dont
l'identifiant système est 7 et le numéro de série 15:

ALTER SYSTEM KILL SESSION '7, 15';

Pour voir l’identifiant et le numéro de série de session correspondants à un


utilisateur appelé MBA, on tape la requête suivante sous oracle.

SELECT SID, SERIAL#, STATUS


FROM V$SESSION
WHERE USERNAME = 'MBA';

3) Instruction de contrôle. Contrôler l'exécution d'un groupe


d'instructions (CALL, RETURN)
L'instruction CALL (PROCEDURE) est utilisée pour appeler des
procédures. Un appel à une procédure ne renvoie aucune valeur.

Lorsqu'une procédure avec les droits du définisseur est appelée, le


schéma par défaut actuel est défini sur le schéma nommé du nom du
définisseur. Par exemple, si l'utilisateur définissant est appelé OWNER,
le schéma par défaut sera également défini sur OWNER. Les droits du
définisseur comprennent le droit de définir le rôle actuel sur un rôle
pour lequel le définisseur a des privilèges. Lorsque la procédure est
invoquée pour la première fois, aucun rôle n'est défini; même si
l'appelant a défini un rôle actuel, la procédure exécutée avec les droits du
définisseur n'a pas de rôle actuel défini initialement.

Lorsqu'une procédure avec des droits d'invocateur est appelée, le


schéma par défaut actuel et le rôle actuel sont inchangés initialement
dans la procédure. De même, si le mode d'autorisation SQL n'est pas
activé, le schéma par défaut actuel est inchangé initialement dans la
procédure.

Lorsque l'appel revient, toutes les modifications apportées à l'intérieur


de la procédure au schéma actuel par défaut (et au rôle actuel, le cas
échéant) sont réinitialisées (sautées).

Syntax

CALL Nom_procedure ( [ expression [, expression]* ] );

55
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Example

CREATE PROCEDURE SALES.TOTAL_REVENUE (IN S_MONTH INTEGER,


IN S_YEAR INTEGER, OUT TOTAL DECIMAL (10, 2))
EXTERNAL NAME

CALL SALES.TOTAL_REVENUE(2, 2020, 23);

RETURN
Ne confondez pas l'instruction RETURN avec la clause RETURN dans une
spécification de fonction, qui spécifie le type de données de la valeur de retour.

Un sous-programme peut contenir plusieurs instructions RETURN.


L'exécution de l'un d'eux termine immédiatement le sous-programme.
L'instruction RETURN n'est peut-être pas positionnée comme la dernière
instruction du sous-programme.

Dans les procédures, une instruction RETURN ne peut pas contenir


d'expression. L'instruction renvoie simplement le contrôle à l'appelant avant
que la fin normale de la procédure ne soit atteinte.

Dans les fonctions, une instruction RETURN doit contenir une expression, qui
est évaluée lorsque l'instruction RETURN est exécutée. La valeur résultante est
affectée à l'identificateur de fonction. Dans les fonctions, il doit y avoir au
moins un chemin d'exécution qui mène à une instruction RETURN. Sinon, PL
/ SQL lève une exception au moment de l'exécution.

L'instruction RETURN peut être utilisée dans un bloc anonyme pour quitter le
bloc (et tous les blocs englobants), mais l'instruction RETURN ne peut pas
contenir d'expression.

EXEMPLE : (Voir le cours PL/SQL)

DECLARE
FUNCTION num_rows (table_name VARCHAR2) RETURN
user_tables.num_rows%TYPE
IS
howmany user_tables.num_rows%TYPE;

56
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

BEGIN
EXECUTE IMMEDIATE 'SELECT num_rows FROM user_tables ' ||
'WHERE table_name = ''' || UPPER(table_name) || ''''
INTO howmany;
-- A function can compute a value, then return that value.
RETURN howmany;
END num_rows;

FUNCTION double_it(n NUMBER) RETURN NUMBER


IS
BEGIN
-- A function can also return an expression.
RETURN n * 2;
END double_it;

4) Instruction de diagnostic. Accès à des informations de


diagnostic d'erreurs ou d'exceptions. Aussi : initient les
levées d'erreurs (GET DIAGNOSTICS).

Sous oracle on utilise l’instruction EXTRACT


Nous expliquons ici comment utiliser la fonction EXTRAIT Oracle / PLSQL
avec la syntaxe et des exemples.
La fonction Oracle EXTRACT () extrait un composant spécifique (année, mois,
jour, heure, minute, seconde, etc.) à partir d'une date / heure ou d'une valeur
d'intervalle.

SYNTAX

EXTRACT (
{ YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }
| { TIMEZONE_HOUR | TIMEZONE_MINUTE }
| { TIMEZONE_REGION | TIMEZONE_ABBR }
FROM { date_value | interval_value } );

EXTRACT(YEAR FROM DATE '2003-08-22')


Resultat: 2003

EXTRACT(MONTH FROM DATE '2003-08-22')


Resultat: 8

EXTRACT(DAY FROM DATE '2003-08-22')


Resultat: 22

GET DIAGNOSTICS

57
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les instructions SQL produisent des informations de diagnostic qui


remplissent la zone de diagnostic. L'instruction GET DIAGNOSTICS permet
aux applications d'inspecter ces informations. Il est disponible à partir de
MySQL 5.6.4. (Vous pouvez également utiliser AFFICHER LES
AVERTISSEMENTS ou AFFICHER LES ERREURS pour voir les conditions ou
les erreurs.)

Aucun privilège spécial n'est requis pour exécuter GET DIAGNOSTICS.

Le mot-clé COURANT signifie récupérer des informations de la zone de


diagnostic actuelle. Dans MySQL, cela n'a aucun effet car c'est le
comportement par défaut.

GET DIAGNOSTICS est généralement utilisé dans un gestionnaire au sein d'un


programme stocké, mais c'est une extension MySQL qui est autorisée en
dehors du contexte du gestionnaire pour vérifier l'exécution de toute
instruction SQL. Par exemple, si vous appelez le programme client mysql, vous
pouvez entrer ces instructions à l'invite:

mysql> DROP TABLE test.no_such_table;


ERROR 1051 (42S02): Unknown table 'test.no_such_table'
mysql> GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
mysql> SELECT @p1, @p2;
+-------+------------------------------------+
| @p1 | @p2 |
+-------+------------------------------------+
| 42S02 | Unknown table 'test.no_such_table' |
+-------+------------------------------------+

Obtenez le nombre de lignes associées à l'instruction SQL précédente:


GET DIAGNOSTICS var_name = ROW_COUNT;

Obtenez le texte d'erreur:


GET DIAGNOSTICS EXCEPTION 1 var_name = MESSAGE_TEXT;

5) Instructions sur les données (ex-LMD). Effet


persistant sur les données (SELECT, INSERT, UPDATE,
DELETE)
INSERT

58
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

L’insertion de données dans une table s’effectue à l’aide de la commande


INSERT INTO. Cette commande permet au choix d’inclure une seule
ligne à la base existante ou plusieurs lignes d’un coup.

Pour insérer des données dans une base, il y a 2 syntaxes principales :

 Insérer une ligne en indiquant les informations pour chaque


colonne existante (en respectant l’ordre)
 Insérer une ligne en spécifiant les colonnes que vous souhaiter
compléter. Il est possible d’insérer une ligne renseignant seulement
une partie des colonnes

 Insérer une ligne en indiquant les informations pour


chaque colonne existante (en respectant l’ordre)

INSERT INTO Client VALUES ('c100', 'ESSONO', 'Libreville');

 Insérer une ligne en spécifiant les colonnes que vous


souhaiter compléter. Il est possible d’insérer une ligne
renseignant seulement une partie des colonnes

INSERT INTO Client (Id_Cli, nom, ville) VALUES ('c100', 'MBA', 'LBV');

Insertion de plusieurs lignes à la fois

Il est possible d’ajouter plusieurs lignes à un tableau avec une seule requête.
Pour ce faire, il convient d’utiliser la syntaxe suivante :

INSERT INTO Client (Id_Cli, nom, ville, Age)


VALUES
('001', 'NDONG', 'Libreville', 25),
('002', 'MOUELE', 'Lambaréné', 30),
('003', 'OYANE', 'OYEM', 45),
('004', 'MOUSSAVOU', 'MOUILA', 48);

DELETE
La commande DELETE en SQL permet de supprimer des lignes dans une
table. En utilisant cette commande associée à WHERE il est possible de
sélectionner les lignes concernées qui seront supprimées. Avant d’essayer de

59
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

supprimer des lignes, il est recommandé d’effectuer une sauvegarde de la


base de données, ou tout du moins de la table concernée par la suppression.
Ainsi, s’il y a une mauvaise manipulation il est toujours possible de restaurer
les données.

Supprimer une ligne


DELETE FROM Client WHERE Id_Cli = ‘002’ ;
(elle supprime la 2ème ligne du tableau précédent, c-à-d le client Mouélé)
Supprimer plusieurs lignes
DELETE FROM Client WHERE Age > 30 ;

(Elle supprime les clients OYANE et MOUSSAVOU qui ont un âge supérieur à 30)

Supprimer toutes les données d’une table


Pour supprimer toutes les lignes d’une table il convient d’utiliser la commande
DELETE sans utiliser de clause conditionnelle.

DELETE FROM Client;


(elle supprime toutes les lignes contenues dans la table client, elle redevient
vide)
Supprimer toutes les données d’une table
Pour supprimer toutes les lignes d’une table, il est aussi possible d’utiliser la
commande TRUNCATE, de la façon suivante :

TRUNCATE FROM Client;

Cette requête est similaire. La différence majeure étant que la commande


TRUNCATE va ré-initialiser l’auto-incrémente s’il y en a un. Tandis que la
commande DELETE ne ré-initialise pas l’auto-incrément.

UPDATE
La commande UPDATE permet d’effectuer des modifications sur des lignes
existantes. Donc elle modifie les données d’une table contrairement à la
commande ALTER qui modifie la structure de la table. Très souvent la
commande UPDATE est utilisée avec WHERE pour spécifier sur quelles
lignes doivent porter la ou les modifications.

60
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Modifier une ligne

Pour modifier l’âge et la ville du client MOUELE, il est possible d’utiliser la


requête SQL suivante :

UPDATE Client
SET Age = 50,
ville = ‘FOUGAMOU'
WHERE id_Cli = ‘002’ ;

Id_Cli Nom Ville Age


001 NDONG Libreville 25
002 MOUELE FOUGAMOU 50
003 OYANE OYEM 45
004 MOUSSAVOU MOUILA 48

Modifier toutes les lignes

Il est possible d’effectuer une modification sur toutes les lignes en omettant
d’utiliser une clause conditionnelle. Il est par exemple possible de mettre la
valeur “FRANCEVILLE” dans la colonne “ville” pour toutes les lignes de la
table, grâce à la requête SQL ci-dessous.

UPDATE Client
SET ville = ‘FRANCEVILLE';

Id_Cli Nom Ville Age


001 NDONG FRANCEVILLE 25
002 MOUELE FRANCEVILLE 50
003 OYANE FRANCEVILLE 45
004 MOUSSAVOU FRANCEVILLE 48

SELECT
SELECT * FROM Client; Affiche toutes les lignes de la table client

Id_Cli Nom Ville Age


001 NDONG FRANCEVILLE 25
002 MOUELE FRANCEVILLE 50
003 OYANE FRANCEVILLE 45

61
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

004 MOUSSAVOU FRANCEVILLE 48

En algèbre relationnelle, il n'y a pas de doublons dans les relations. Mais


dans les bases de données, il peut y avoir des doublons dans une table (c'est-
à-dire de lignes identiques). Si vous souhaitez éliminer les doublons d'un
résultat d'une requête SQL, il faut utiliser SELECT DISTINCT au lieu
de SELECT.

On écrira : SELECT DISTINCT * FROM Client;

Avec la table suivante :

Id_Cli Nom Ville Age


001 NDONG OYEM 25
002 MOUELE FRANCEVILLE 50
003 OYANE OYEM 45
004 MOUSSAVOU BITAM 48

SELECT Ville FROM Client;

Ville
OYEM
FRANCEVILLE
OYEM
BITAM

SELECT DISTINCT Ville FROM Client;

Ville
OYEM
FRANCEVILLE
BITAM

La projection

La projection, c'est l'affaire du mot clé SELECT. C'est lui qui sera chargé de
sélectionner les colonnes que vous souhaitez afficher.

SELECT Nom, Ville FROM Client;

Nom Ville

62
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

NDONG OYEM
MOUELE FRANCEVILLE
OYANE OYEM
MOUSSAVOU FRANCEVILLE

La restriction ou Sélection

Vous vous souvenez que la restriction (Sélection) consiste à ne sélectionner


que certaines lignes de la table selon une condition. Pour faire cela, nous
spécifions cette condition grâce au mot clé WHERE.

SELECT * FROM Client Where Age >25;

Id_Cli Nom Ville Age


002 MOUELE FRANCEVILLE 50
003 OYANE OYEM 45
004 MOUSSAVOU BITAM 48

On peut combiner avec les opérateurs logiques.

Ex : SELECT * FROM Client Where (Age >25) AND (Ville=’OYEM’);

Id_Cli Nom Ville Age


003 OYANE OYEM 45

Le produit cartésien

Pour effectuer le produit cartésien entre deux tables, il faut simplement spécifier
ces deux tables derrière la clause FROM. Rien de plus simple !

R S
A B C B F
a1 b1 c1 b4 f1
a2 b2 c2 b5 f2
b6 f3

SELECT * FROM R, S;

A R.B C S.B F
a1 b1 c1 b4 f1
a1 b1 c1 b2 f2

63
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

a1 b1 c1 b2 f3
a2 b2 c2 b4 f1
a2 b2 c2 b2 f2
a2 b2 c2 b2 f3

Les opérateurs AS et ||

L’opérateur AS permet de renommer une colonne et l’opérateur || est un


opérateur de concaténation.

SELECT ABS( (- id) *2 ) AS abcisse, ordonnée FROM POINTS ;

Sans ce mot clé, la colonne résultat du calcul mathématique qui calcul


l’abscisse du point aurait comme nom "ABS((-id)*2)", ce qui n'est pas très
compréhensible par un utilisateur naïf! Je l'ai donc renommée en "Abcisse".

ABS((-id)*2) ordonnée Abcisse ordonnée


-20 10
-20 10 -30 15
-30 15
Il existe beaucoup de types de fonctions ! Par exemple, des fonctions sur des
chaînes de caractères. Si on souhaite obtenir le nom d'un Client et ajouter à
cette chaîne son Age entre parenthèses, on peut utiliser l'opérateur de
concaténation || :

Id_Cli Nom Ville Age


002 MOUELE FRANCEVILLE 50
003 OYANE OYEM 45
004 MOUSSAVOU BITAM 48

SELECT nom || '(' || Age || ')' AS Nom_Et_Age FROM Client ;

-- Version MySQL :

SELECT concat (nom,'(', Age,')') AS Nom_Et_Age FROM Client ;

Il y a également des fonctions utilisant des dates, ou des fonctions binaires (qui
renvoient Vrai ou Faux). Voici un exemple.

64
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

SELECT CURRENT_DATE () > date_vente FROM Vente ;

Ici, CURRENT_DATE () renvoie la date actuelle. Celle-ci est ensuite


comparée à l'attribut date_vente grâce à l'opérateur >, qui renvoie TRUE(ou
1 selon votre SGBD) c'est-à-dire Vrai si date_vente est inférieure à la date
actuelle, et FALSE(ou 0 ) c'est-à-dire Faux sinon.

Union, différence et intersection


Union
Pour avoir la liste de toutes les Clients de R1 ainsi que la liste de tous les client
de R2, il faut utiliser le mot clé UNION :

R1 R2
A B A B
a1 b1 a1 b1
a2 b2 a2 b3
a3 b3 a3 b4

On rappelle que les relations doivent avoir les mêmes Schémas.

SELECT A, B FROM R1 A B
UNION a1 b1
SELECT A, B FROM R2; a2 b2
a3 b3
a2 b3
a3 b4
Différence
La liste des clients de la table R1 qui ne sont pas des clients de R2 est donnée
par :
A B
SELECT A, B FROM R1
a2 b2
EXCEPT
a3 b3
SELECT A, B FROM R2;

Intersection

A B
65
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Si nous souhaitons connaître les clients à la fois a1 b1


présents dans la table R1 et dans la table R2 :

SELECT A, B FROM R1
INTERSECT
SELECT A, B FROM R2;

Malheureusement. La différence et l'intersection sont rarement effectuées


de cette manière. D'ailleurs, certains SGBDR n'acceptent même pas les mots
clés EXCEPT et INTERSECT ! C'est notamment le cas de MySQL.

Par exemple, on veut savoir si une ligne d'une première table est présente dans
une seconde table. On doit donc comparer la valeur de chacun de ses attributs
un à un. S'il y a beaucoup d'attributs, ceci n'est pas optimal. En fait il y a plus
simple, mais à une condition : que les deux tables soient extraites d'une table
originelle contenant au moins une clé candidate. Dans notre exemple on
supposera que R1 et R2 ont pour clé primaire la colonne A.

Intersection Difference

SELECT A, B SELECT A, B
FROM R1 FROM R1
WHERE A IN ( WHERE A NOT IN (
SELECT A FROM R2) ; SELECT A FROM R2);

Lister les clients dont le nom comporte la lettre A en 2ième position

SELECT * FROM client C WHERE C.nom LIKE '_A%‘;

Lister les produits dont le prix est compris entre 5000F et 12000F

SELECT * FROM produit P WHERE P.prix BETWEEN 5000 AND 12000;

Lister les produits de marque IBM, Apple ou Dec

SELECT * FROM produit P WHERE P.marque IN ('IBM', 'Apple', 'Dec');

Lister les produits dont le prix est inconnu

SELECT * FROM produit P WHERE P.prix IS NULL;

Lister les produits de marque IBM dont le prix est inférieur à 12000F

SELECT * FROM produit P WHERE P.marque = 'IBM' AND P.prix < 12000

66
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

JOINTURE Etudiant Classe


Id_Etu Id_Cl Nom Tel Age Id_Cl Libelle
002 C001 MOUELE 066.52.30.01 19 C001 L1
003 C003 OYANE 065.02.32.06 20 C002 L2
004 C001 MBA 077.23.15.24 25 C003 L3
005 C002 OYIBA 062.12.36.25 24

Notre objectif : "coller" les tables Etudiant et Classe pour obtenir une table
dans laquelle les lignes contiennent les informations sur les étudiants, avec
pour chacun d'entre eux leur classe respective. En SQL, il y a deux manières
principales d'écrire des jointures :

Vous vous souvenez qu'une jointure était en fait l'enchaînement d'un produit
cartésien et d'une restriction. On commence donc par effectuer le produit
cartésien des deux tables...

SELECT * FROM Etudiant, Classe;

... auquel j'ajoute la condition de restriction :

SELECT E.Id_Etu, E.nom, E.Tel, C.Libelle As Classe FROM Etudiant E, Classe C


WHERE E.Id_Cl = C.Id_Cl;

Voilà, notre jointure est faite et donnera le résultat suivant!

Id_Etu Nom Tel Classe


002 MOUELE 066.52.30.01 L1
003 OYANE 065.02.32.06 L3
004 MBA 077.23.15.24 L1
005 OYIBA 062.12.36.25 L2

La seconde méthode introduit les nouveaux mots clés JOIN et ON :

SELECT E.Id_Etu, E.nom, E.Tel, C.Libelle AS Classe

FROM Etudiant E

JOIN Classe C ON E.Id_Cl = C.Id_Cl;

67
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Id_Etu Nom Tel Classe


002 MOUELE 066.52.30.01 L1
003 OYANE 065.02.32.06 L3
004 MBA 077.23.15.24 L1
005 OYIBA 062.12.36.25 L2

Joindre sur plusieurs colonnes

Si votre clé étrangère contient 2 attributs (ou plus), alors il faut utiliser AND.
Prenons l'exemple d'une table t1 ayant une clé étrangère de 2 attributs
: fk1 et fk2. Cette clé étrangère référence la table t2, dont la clé primaire est elle
aussi composée de 2 attributs : pk1 et pk2 :

-- Première méthode :

SELECT * FROM t1, t2 WHERE (t1.fk1 = t2.pk1 AND t1.fk2 = t2.pk2);

-- Seconde méthode :

SELECT * FROM t1 JOIN t2 ON (t1.fk1 = t2.pk1 AND t1.fk2 = t2.pk2);

les jointures externes


Vous vous souvenez des jointures externes ? Elles permettent de garder des
lignes qui auraient été ignorées lors d'une jointure interne. Si nous souhaitons
obtenir une table avec tous les étudiants de ETUDIANT avec leur classe, sans
oublier les étudiants dont la classe est inconnue, alors il nous faut une
jointure externe à gauche.

SELECT * FROM Etudiant E

LEFT OUTER JOIN Classe C ON E.id_Cl = C.id_Cl;

Si au contraire, nous voulons garder toutes les Classes (qu'elles correspondent


à un étudiant ou non), il faut alors faire une jointure externe à droite :

SELECT * FROM Etudiant E

RIGHT OUTER JOIN Classe C ON E.id_Cl = C.id_Cl;

68
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

NB: Etudiant et Classe peuvent être inversées le résultat ne change pas dans
les deux méthodes de jointures.

Jointure de plus de deux tables : On ajoute la table établissement


Etudiant Classe

Id_Cl Id_Etab Libelle


Id_Etab Libelle C001 ET007 L1
ET004 INPTC C002 ET005 L2
ET005 ITO C003 ET004 L3
ET007 IAI
issement

Cette fois, on souhaite afficher dans une même table l’Etudiant, sa classe et
l’établissement d’origine.

SELECT E.Id_Etu, E.nom, E.Tel, C.Libelle As Classe, ET.libelle As Etablissement


FROM Etudiant E, Classe C, Etablissement ET
WHERE E.Id_Cl = C.Id_Cl AND C.Id_Etab = ET.Id_Etab ;

Id_Etu Nom Tel Classe Etablissement


002 MOUELE 066.52.30.01 L1 IAI
Id_Etu Id_Cl Nom Tel Age
002 C001 MOUELE 066.52.30.01 19
003 C003 OYANE 065.02.32.06 20
004 C001 MBA 077.23.15.24 25
005 C002 OYIBA 062.12.36.25 24
003 OYANE 065.02.32.06 L3 INPTIC
004 MBA 077.23.15.24 L1 IAI
005 OYIBA 062.12.36.25 L2 ITO

Jointure avec conditions (Phi Jointure)


Afficher dans une même table l’Etudiant, sa classe et l’établissement d’origine,
n’afficher que les étudiants de INPTIC et de ITO.

SELECT E.Id_Etu, E.nom, E.Tel, C.Libelle As Classe, ET.libelle As Etablissement


FROM Etudiant E, Classe C, Etablissement ET

69
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

WHERE E.Id_Cl = C.Id_Cl AND C.Id_Etab = ET.Id_Etab AND


ET.libelle IN (‘INPTIC’, ‘ITO’);

Id_Etu Nom Tel Classe Etablissement


003 OYANE 065.02.32.06 L3 INPTIC
005 OYIBA 062.12.36.25 L2 ITO

Fonctions de calculs : SQL fournit des fonctions de calcul opérant sur


l'ensemble des valeurs d'une colonne de table

COUNT : nombre de valeurs

SUM : somme des valeurs

AVG : moyenne des valeurs

MAX : plus grande valeur

MIN : plus petite valeur

Id_Cli Nom Ville Age


002 MOUELE FRANCEVILLE 50
003 OYANE OYEM 45
004 MOUSSAVOU BITAM 48
Donner le nombre total de clients

SELECT COUNT (Id_Cli) AS Nombre_Clients FROM Client;

Nombre_Clients
3

Les Opérateurs ALL et HAVING

Afficher l’établissement qui a le plus grand nombre d’étudiant ;

SELECT ET.Id_Etab, ET.libelle As Etablissement, COUNT (E.Id_Etu) As


Nbre_Et
FROM Etudiant E, Classe C, Etablissement ET
WHERE E.Id_Cl = C.Id_Cl AND C.Id_Etab = ET.Id_Etab AND
HAVING COUNT (E.Id_Etu) >= ALL ( SELECT COUNT (E2.Id_Etu)
FROM Etudiant E2, Classe C2, Etablissement ET2
WHERE E2.Id_Cl = C2.Id_Cl AND C2.Id_Etab = ET2.Id_Etab
GROUP BY ET.Id_Etab, ET.libelle);

70
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Id_Etab Etablissement Nbre_Et


ET007 IAI 2

GROUP BY et ORDER BY
Quelle est la différence entre GROUP BY et ORDER BY ? – Les clauses
GROUP BY et ORDER BY les deux sont utilisées pour organiser les
données. La différence clé entre la clause Group By et Order By est que la
clause Group By est utilisée lorsque nous souhaitons appliquer la fonction
d’agrégation sur plusieurs tuples et que la clause Order By est utilisée lorsque
nous voulons trier les données obtenues par une requête.

ORDER BY: triez les données par ordre croissant ou décroissant,


considérons la table CLIENTS suivante:

Id_Cli Nom Ville Age


002 MOUELE FRANCEVILLE 50
003 OYANE OYEM 45
004 BOUASSA BITAM 48

Voici un exemple qui trierait le résultat par ordre croissant selon le NOM du
client:

SELECT * FROM CLIENTS ORDER BY NOM;


Cette requête est équivalente à :
SELECT * FROM CLIENTS ORDER BY NOM ASC;

Id_Cli Nom Ville Age


004 BOUASSA BITAM 48
002 MOUELE FRANCEVILLE 50
003 OYANE OYEM 45
Par ordre décroissant selon le NOM du client:

Id_Cli Nom Ville Age


003 OYANE OYEM 45

71
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

002 MOUELE FRANCEVILLE 50 SELECT *


004 BOUASSA BITAM 48 FROM
CLIENTS ORDER BY NOM DESC;

On peut toutefois ordonner une liste de plusieurs colonnes

SELECT * FROM Etudiant ORDER BY Id_Classe, NOM ASC;


Cette requête permet d’ordonner les étudiant par classe et par leurs noms.

GROUP BY: organisez des données identiques en groupes. Maintenant, la


table CLIENT a les enregistrements suivants avec des noms en double:
+----+----------+-----+-----------+----------+
| ID | NOM | AGE | ADRESSE | SALAIRE |
+----+----------+-----+-----------+----------+
| 1 | NBAN | 21 | OYEM’ | 9000.00 |
| 2 | NBAN | 24 | LBV’ | 9000.00 |
| 3 | NBAN | 31 | Niort | 9000.00 |
| 4 | Bob | 15 | Rabat | 2500.00 |
| 5 | Bob | 25 | Lile | 2500.00 |
| 6 | Ali | 13 | Casablanca| 3000.00 |
| 7 | Emily | 26 | Lyon | 4500.00 |
| 8 | Thomas | 29 | Chingaho | 7500.00 |
+----+----------+-----+-----------+----------+

Si on veut souhaiter regrouper les noms identiques en un seul nom, la requête


GROUP BY sera la suivante:

SELECT * FROM CLIENTS GROUP BY NOM;

Cela produirait le résultat suivant: (pour les noms identiques, il choisirait le


dernier et trierait enfin la colonne par ordre croissant)

+----+----------+-----+-----------+----------+
| ID | NOM | AGE | ADRESSE | SALAIRE |
+----+----------+-----+-----------+----------+
| 3 | Alex | 31 | Niort | 9000.00 |
| 6 | Ali | 13 | Casablanca| 3000.00 |
| 5 | Bob | 25 | Lile | 2500.00 |
| 7 | Emily | 26 | Lyon | 4500.00 |
| 8 | Thomas | 29 | Chingaho | 7500.00 |

72
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

+----+----------+-----+-----------+----------+

Une clause GROUP BY fonctionne sur les lignes renvoyées par une requête en
récapitulant des lignes identiques dans un groupe unique/distinct et renvoie
une seule ligne avec le résumé pour chaque groupe, en utilisant la fonction
d’agrégation appropriée dans SELECT, comme COUNT (), SUM. (), MIN
(), MAX (), AVG (), etc.

Maintenant, si on veut connaître le montant total du salaire de chaque client,


la requête GROUP BY sera la suivante:

SELECT NOM, SUM(SALAIRE) FROM CLIENT GROUP BY NOM;

Cela produirait le résultat suivant: (somme des salaires qui ont des noms
identiques et trie la colonne NOM après avoir supprimé les noms identiques)

+---------+-------------+
| NOM | SUM(SALAIRE)|
+---------+-------------+
| Alex | 270000.00 |
| Ali | 3000.00 |
| Bob | 5000.00 |
| Emily | 4500.00 |
| Thomas | 7500.00 |
+---------+-------------+

Différence entre Clé primaire et Clé unique

La clé primaire et la clé unique sont utilisées pour identifier un tuple de


manière unique et appliquer l’unicité dans une colonne ou une combinaison de
colonnes.

La différence clé entre la clé primaire et la clé unique est que la clé
primaire n’accepte pas les valeurs NULL alors que les valeurs NULL sont
autorisées dans les contraintes de clé uniques.

73
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Table de comparaison
Clé primaire Clé unique

Il est utilisé pour servir Il détermine également de manière


Définition d’identifiant unique pour unique une ligne, qui n’est pas définie
chaque ligne d’une table. en tant que clé primaire.

Valeur NULL La clé primaire n’acceptera pas La clé unique acceptera une valeur
acceptée les valeurs NULL. NULL.

Nombre de
clés pouvant
Une seule clé primaire Peut avoir plusieurs clés uniques
être définies
dans la table

Index Crée un index cluster Crée un index non cluster

Instruction de session. Contrôlent les paramètres


d'une session de connexion (SET, SET CONSTRAINTS).

SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

SET CONSTRAINTS définit le comportement de la vérification des


contraintes dans la transaction en cours. Les contraintes IMMEDIATE sont
vérifiées à la fin de chaque instruction. Les contraintes DEFERRED ne sont
pas vérifiées avant la validation de la transaction. Chaque contrainte a son
propre mode IMMEDIATE ou DEFERRED.
Lors de la création, une contrainte se voit attribuer l'une des trois
caractéristiques suivantes: DEFERRABLE INITIALLY DEFERRED,
DEFERRABLE INITIALLY IMMEDIATE ou NOT DEFERRABLE.
La troisième classe est toujours IMMEDIATE et n'est pas affectée par la
commande SET CONSTRAINTS. Les deux premières classes démarrent
chaque transaction dans le mode indiqué, mais leur comportement peut être
modifié dans une transaction par SET CONSTRAINTS.

SET CONSTRAINTS avec une liste de noms de contraintes change le mode de


ces contraintes (qui doivent toutes être reportables). Le chemin de recherche
de schéma actuel est utilisé pour rechercher le premier nom correspondant si
aucun nom de schéma n'est spécifié. SET CONSTRAINTS ALL change le mode
de toutes les contraintes reportables

74
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Lorsque SET CONSTRAINTS change le mode d'une contrainte de DEFERRED


à IMMEDIATE, le nouveau mode prend effet rétroactivement: toutes les
modifications de données en suspens qui auraient été vérifiées à la fin de la
transaction sont vérifiées à la place lors de l'exécution de la commande SET
CONSTRAINTS. Si une telle contrainte est violée, SET CONSTRAINTS échoue
(et ne change pas le mode de contrainte). Ainsi, SET CONSTRAINTS peut être
utilisé pour forcer la vérification des contraintes à se produire à un point
spécifique d'une transaction.

Actuellement, seules les contraintes de clé étrangère sont affectées par ce


paramètre. Le contrôle et les contraintes uniques ne sont toujours pas
reportables. Les déclencheurs déclarés comme «déclencheurs de contrainte»
sont également affectés.

IMMEDIATE
Spécifiez IMMEDIATE pour que les contraintes spécifiées soient vérifiées
immédiatement lors de l'exécution de chaque instruction DML contrainte.
Oracle Database vérifie d'abord toutes les contraintes qui ont été différées plus
tôt dans la transaction, puis continue immédiatement de vérifier les
contraintes de toute autre instruction dans cette transaction, tant que toutes
les contraintes vérifiées sont cohérentes et qu'aucune autre instruction SET
CONSTRAINTS n'est émise. Si une contrainte échoue à la vérification, une
erreur est signalée. À ce stade, une instruction COMMIT entraîne l'annulation
de l'ensemble de la transaction.

Rendre les contraintes immédiates à la fin d'une transaction est un moyen de


vérifier si COMMIT peut réussir. Vous pouvez éviter les annulations
inattendues en définissant les contraintes sur IMMEDIATE comme dernière
instruction d'une transaction. Si une contrainte échoue à la vérification, vous
pouvez ensuite corriger l'erreur avant de valider la transaction.

DEFERRED

Spécifiez DEFERRED pour indiquer que les conditions spécifiées par la


contrainte de report sont vérifiées lorsque la transaction est validée.

Instruction de transaction. Fixent le début et la fin


d'une transaction (COMMIT, ROLLBACK)

Notion de Transaction :

Pour commencer cette partie, nous allons voir ce que sont les transactions, à
quoi elles servent exactement, et comment les utiliser avec ORACLE ou
MySQL.

75
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les transactions sont une fonctionnalité absolument indispensable,


permettant de sécuriser une application utilisant une base de données. Sans
transactions, certaines opérations risqueraient d'être à moitié réalisées, et la
moindre erreur, la moindre interruption pourraient avoir des conséquences
énormes. En effet, les transactions permettent de regrouper des requêtes dans
des blocs, et de faire en sorte que tout le bloc soit exécuté en une seule fois, cela
afin de préserver l'intégrité des données de la base.

Les transactions ont été implémentées assez tard dans MySQL, et qui plus est,
elles ne sont pas utilisables pour tous les types de tables. C'est d'ailleurs un des
principaux arguments des détracteurs de MySQL.

Une transaction, c'est un ensemble de requêtes qui sont exécutées en


un seul bloc. Ainsi, si une des requêtes du bloc échoue, on peut décider
d'annuler tout le bloc de requêtes (ou de quand même valider les requêtes qui
ont réussi).

À quoi cela sert-il ?

Imaginez que M. Durant fait un virement de 300.000 FCFA à M. NDONG via


sa banque en ligne. Il remplit toutes les petites cases du virement, puis valide.
L'application de la banque commence à traiter le virement quand soudain, une
violente panne de courant provoque l'arrêt des serveurs de la banque.

Deux jours plus tard, M. Durant reçoit un coup de fil de M. NDONG, très
énervé, qui lui demande pourquoi le paiement convenu n'a toujours pas été
fait. Intrigué, M. Durant va vérifier son compte, et constate qu'il a bien été
débité de 300.000 FCFA.

Mais que s'est-il donc passé ?

Normalement, le traitement d'un virement est plutôt simple, deux étapes


suffisent :

 étape 1 : on retire le montant du virement du compte du donneur d'ordre


 étape 2 : on ajoute le montant du virement au compte du bénéficiaire.

Seulement voilà, pas de chance pour M. Durant, la panne de courant qui a


éteint les serveurs est survenue pile entre l'étape 1 et l'étape 2. Du coup, son
compte a été débité, mais le compte de M. NDONG n'a jamais été crédité.

76
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

La banque de M. Durant n'utilisait pas les transactions. Si cela avait été le cas,
la seconde requête du traitement n'ayant jamais été exécutée, la première
requête n'aurait jamais été validée.

Comment se déroule une transaction ?

Voici un schéma qui devrait vous éclairer sur le principe des transactions.

Début Transaction

Exécution requête suivante

Requête
NON OK ?

OUI

Dernière NON
requête ?

OUI

NON Tout OUI


OK ?

Annulation Validation
des Requêtes des Requêtes

Fin Transaction

Lorsque l'on valide les requêtes d'une transaction, on dit aussi que l'on
commite les changements. À l'inverse, l'annulation des requêtes s'appelle un
rollback.

77
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Comportement par défaut

Vous l'aurez compris, par défaut, MySQL ne travaille pas avec les transactions.
Chaque requête effectuée est directement commitée (validée). On ne peut pas
revenir en arrière. On peut donc considérer que chaque requête constitue une
transaction qui est automatiquement commitée. Par défaut, MySQL est donc
en mode "autocommit".

Pour quitter ce mode, il suffit de lancer la requête suivante :


SET autocommit=0;

Une fois que vous n'êtes plus en autocommit, chaque modification de donnée
devra être commitée pour prendre effet. Tant que vos modifications ne sont
pas validées, vous pouvez à tout moment les annuler (faire un rollback).

Valider/annuler les changements

Les commandes pour commiter et faire un rollback sont relativement faciles à


retenir :

COMMIT; -- pour valider les requêtes


ROLLBACK; -- pour annuler les requêtes
Exemples de transactions en mode non-autocommit

Si ce n'est pas déjà fait, changez le mode par défaut de MySQL grâce à la
commande que nous venons de voir.

Première expérience : annulation des requêtes.

Exécutez ces quelques requêtes : -- Insertion de 3 rats bruns

INSERT INTO Animal (nom, espece_id, date_naissance, sexe)


VALUES ('Baba', 5, '2012-02-13 15:45:00', 'F');
INSERT INTO Animal (nom, espece_id, date_naissance, sexe)
VALUES ('Bibo', 5, '2012-02-13 15:48:00', 'M');
INSERT INTO Animal (nom, espece_id, date_naissance, sexe)
VALUES ('Buba', 5, '2012-02-13 18:32:00', 'F');

UPDATE Espece
SET prix = 2000
WHERE espece_id = 5;
-- Les rats bruns coûtent maintenant 2000 FCFA au lieu de 1000FCFA

78
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Faites maintenant un SELECT sur les tables Espece et Animal.

SELECT * FROM Animal WHERE espece_id = 5;

SELECT * FROM Espece WHERE espece_id = 5;

Les changements faits sont bien visibles. Les rats bruns valent maintenant
2000 FCFA, et nos trois nouvelles bestioles ont bien été insérées. Cependant,
un simple rollback va annuler ces changements.

ROLLBACK;

Nos rats coûtent à nouveau 1000 FCFA, et Baba, Bibo et Buba ont disparu.

Deuxième expérience : interruption de la transaction.

Exécutez à nouveau les trois requêtes INSERT et la requête UPDATE.


Ensuite, quittez votre client MySQL (fermez simplement la fenêtre, ou
tapez quit ou exit).

Reconnectez-vous et vérifiez vos données : les rats valent 1000 FCFA, et Baba,
Bibo et Buba n'existent pas. Les changements n'ont pas été commités, c'est
comme s'il ne s'était rien passé !

Le mode autocommit est de nouveau activé ! Le fait de faire SET autocommit


= 0; n'est valable que pour la session courante. Or, en ouvrant une nouvelle
connexion, vous avez créé une nouvelle session. Désactivez donc à nouveau ce
mode.

Troisième expérience : validation et annulation.

Exécutez la séquence de requêtes suivante : -- Insertion de 3 rats bruns

79
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

INSERT INTO Animal (nom, espece_id, date_naissance, sexe) VALUES


('Baba', 5, '2012-02-13 15:45:00', 'F');

INSERT INTO Animal (nom, espece_id, date_naissance, sexe) VALUES


('Bibo', 5, '2012-02-13 15:48:00', 'M');

INSERT INTO Animal (nom, espece_id, date_naissance, sexe) VALUES


('Buba', 5, '2012-02-13 18:32:00', 'F');

COMMIT;

UPDATE Espece SET prix = 20 WHERE id = 5;

-- Les rats valent 2000 FCFA

ROLLBACK;

Si vous n'avez pas oublié de réactiver le mode non-autocommit, vous avez


maintenant trois nouveaux rats bruns (les requêtes d'insertion ayant été
validées), et ils ne valent toujours que 1000 FCFA chacun (la modification de
l'espèce ayant été annulée).

Quatrième expérience : visibilité des changements non commités.

Exécutez la requête suivante :

UPDATE Animal SET commentaires = 'Queue coupée' WHERE nom =


'Bibo' AND espece_id = 5;

Ensuite, tout en laissant ce client MySQL ouvert, ouvrez-en un deuxième.


Connectez-vous comme d'habitude à la base de données. Vous avez
maintenant deux sessions ouvertes, connectées à votre base de données.

Sélectionnez les rats bruns.

SELECT id, sexe, nom, commentaires, espece_id, race_id FROM Animal


WHERE espece_id = 5;

80
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les commentaires de Bibo sont toujours vides. Les changements non


commités ne sont donc pas visibles à l'extérieur de la transaction qui les a faits.
En particulier, une autre session n'a pas accès à ces changements.

Annulez la modification de Bibo dans la première session avec un ROLLBACK.


Vous pouvez fermer la seconde session.

Démarrer explicitement une transaction

En désactivant le mode autocommit, en réalité, on démarre une transaction. Et


chaque fois que l'on fait un rollback ou un commit (ce qui met fin à la
transaction), une nouvelle transaction est créée automatiquement, et ce tant
que la session est ouverte.

Il est également possible de démarrer explicitement une transaction, auquel


cas on peut laisser le mode autocommit activé, et décider au cas par cas des
requêtes qui doivent être faites dans une transaction.

Repassons donc en mode autocommit : SET autocommit=1;

Pour démarrer une transaction, il suffit de lancer la commande suivante :

START TRANSACTION;

Avec MySQL, il est également possible de démarrer une transaction


avec BEGIN ou BEGIN WORK. Cependant, il est conseillé d'utiliser
plutôt START TRANSACTION, car il s'agit de la commande SQL standard.

Une fois la transaction ouverte, les requêtes devront être validées pour prendre
effet. Attention au fait qu'un COMMIT ou un ROLLBACK met fin
automatiquement à la transaction, donc les commandes suivantes seront à

81
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

nouveau commitées automatiquement si une nouvelle transaction n'est pas


ouverte.

Exemples de transactions en mode autocommit


-- Insertion d'un nouveau rat brun, plus vieux
INSERT INTO Animal (nom, espece_id, date_naissance, sexe)
VALUES ('Momy', 5, '2008-02-01 02:25:00', 'F');

-- Ouverture d'une transaction


START TRANSACTION;

-- La nouvelle rate est la mère de Buba et Baba


UPDATE Animal
SET mere_id = LAST_INSERT_ID()
WHERE espece_id = 5
AND nom IN ('Baba', 'Buba');

-- On annule les requêtes de la transaction, ce qui termine celle-ci


ROLLBACK;

-- La nouvelle rate est la mère de Bibo


UPDATE Animal
SET mere_id = LAST_INSERT_ID()
WHERE espece_id = 5
AND nom = 'Bibo';

-- Nouvelle transaction
START TRANSACTION;

-- Suppression de Buba
DELETE FROM Animal
WHERE espece_id = 5
AND nom = 'Buba';

-- On valide les requêtes de la transaction, ce qui termine celle-ci


COMMIT;

Si vous avez bien suivi, vous devriez savoir les changements qui ont été faits.

 On a inséré Momy (insertion hors transaction).


 Momy n'est pas la mère de Baba (modification dans une transaction
dont les requêtes ont été annulées).
 Momy est la mère de Bibo (modification hors transaction).
 Buba a été supprimée (suppression dans une transaction dont les
requêtes ont été commitées).

82
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Jalon de transaction

Lorsque l'on travaille dans une transaction et que l'on constate que certaines
requêtes posent problème, on n'a pas toujours envie de faire un rollback depuis
le début de la transaction, annulant toutes les requêtes alors qu'une partie
aurait pu être validée. Il n'est pas possible de démarrer une
transaction à l'intérieur d'une transaction. Par contre, on peut poser
des jalons de transaction. Il s'agit de points de repère qui permettent
d'annuler toutes les requêtes exécutées depuis ce jalon, et non toutes les
requêtes de la transaction.

Syntaxe

Trois nouvelles commandes suffisent pour pouvoir utiliser pleinement les


jalons :

SAVEPOINT nom_jalon; -- Crée un jalon avec comme nom "nom_jalon"

ROLLBACK [WORK] TO [SAVEPOINT] nom_jalon;

-- Annule les requêtes exécutées depuis le jalon "nom_jalon", WORK et


SAVEPOINT ne sont pas obligatoires.

RELEASE SAVEPOINT nom_jalon;

-- Retire le jalon "nom_jalon" (sans annuler, ni valider les requêtes faites


depuis)

Exemple : exécutez les requêtes suivantes.

START TRANSACTION;

INSERT INTO Animal (nom, espece_id, date_naissance, sexe) VALUES


('Popi', 5, '2007-03-11 12:45:00', 'M');

SAVEPOINT jalon1;

INSERT INTO Animal (nom, espece_id, date_naissance, sexe) VALUES


('Momo', 5, '2007-03-12 05:23:00', 'M');

ROLLBACK TO SAVEPOINT jalon1;

83
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

INSERT INTO Animal (nom, espece_id, date_naissance, sexe) VALUES


('Mimi', 5, '2007-03-12 22:03:00', 'F');

COMMIT;

On n'utilise qu'une seule transaction, on valide à la fin, et pourtant, la seconde


insertion n'a pas été faite finalement, puisqu'elle a été annulée grâce au jalon.
Seuls Popi et Mimi existent.

Validation implicite et commandes non annulables

Vous savez déjà que, pour terminer une transaction, il faut utiliser les
commandes COMMIT ou ROLLBACK, selon que l'on veut valider les requêtes
ou les annuler.

Ça, c'est la manière classique et recommandée. Mais il faut savoir qu'un certain
nombre d'autres commandes auront aussi pour effet de clôturer une
transaction. Et pas seulement de la clôturer, mais également de valider
toutes les requêtes qui ont été faites dans cette transaction, exactement
comme si vous utilisiez COMMIT.

Par ailleurs, ces commandes ne peuvent pas être annulées par un ROLLBACK.

Commandes DDL

Toutes les commandes qui créent, modifient, suppriment des objets dans la
base de données valident implicitement les transactions.

Ces commandes forment ce que l'on appelle les requêtes DDL, pour Data
Definition Langage.

Cela comprend donc :

 la création et suppression de bases de données : CREATE


DATABASE, DROP DATABASE ;
 la création, modification, suppression de tables : CREATE
TABLE, ALTER TABLE, RENAME TABLE, DROP TABLE ;
 la création, modification, suppression d'index : CREATE INDEX, DROP
INDEX ;
 la création d'objets comme les procédures stockées, les vues, etc., dont
nous parlerons plus tard.

De manière générale, tout ce qui influe sur la structure de la base de


données, et non sur les données elles-mêmes.

84
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Utilisateurs

La création, la modification et la suppression d'utilisateurs (voir partie 7)


provoquent aussi une validation implicite.

Transactions et verrous

Je vous ai signalé qu'il n'était pas possible d'imbriquer des transactions, donc
d'avoir une transaction à l'intérieur d'une transaction. En fait, la
commande START TRANSACTION provoque également une validation
implicite si elle est exécutée à l'intérieur d'une transaction.
Le fait d'activer le mode autocommit (s'il n'était pas déjà activé) a le même
effet.

La création et suppression de verrous de table clôturent aussi une


transaction en la validant implicitement (voir chapitre suivant).

Chargement de données

Enfin, le chargement de données avec LOAD DATA provoque également une


validation implicite.

ACID

Derrière ce titre mystérieux se cache un concept très important !

Quels sont les critères qu'un système utilisant les transactions doit respecter
pour être fiable ?

Il a été défini que ces critères sont au nombre de quatre : Atomicité,


Cohérence, Isolation et Durabilité. Soit, si l'on prend la première lettre de
chaque critère : ACID. Voyons donc en détail ces quatre critères.

A pour Atomicité

Atome signifie étymologiquement "qui ne peut être divisé".


Une transaction doit être atomique, c'est-à-dire qu'elle doit former une entité
complète et indivisible. Chaque élément de la transaction, chaque requête
effectuée, ne peut exister que dans la transaction.

Si l'on reprend l'exemple du virement bancaire, en utilisant les transactions,


les deux étapes (débit du compte donneur d'ordre, crédit du compte

85
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

bénéficiaire) ne peuvent exister indépendamment l'une de l'autre. Si l'une est


exécutée, l'autre doit l'être également. Il s'agit d'un tout.

Peut-on dire que nos transactions sont atomiques ?

Oui. Si une transaction en cours est interrompue, aucune des requêtes


exécutées ne sera validée. De même, en cas d'erreur, il suffit de faire
un ROLLBACK pour annuler toute la transaction. Et si tout se passe bien,
un COMMIT validera l'intégralité de la transaction en une fois.

C pour cohérence

Les données doivent rester cohérentes dans tous les cas : que la
transaction se termine sans encombre, qu'une erreur survienne, ou que la
transaction soit interrompue. Un virement dont seule l'étape de débit du
donneur d'ordre est exécutée produit des données incohérentes (la disparition
de 300.000 FCFA jamais arrivés chez le bénéficiaire). Avec une transaction,
cette incohérence n'apparaît jamais. Tant que la totalité des étapes n'a pas été
réalisée avec succès, les données restent dans leur état initial.

Nos transactions permettent-elles d'assurer la cohérence des données ?

Oui, les changements de données ne sont validés qu'une fois que toutes les
étapes ont été exécutées. De l'extérieur de la transaction, le moment entre les
deux étapes d'un virement n'est jamais visible.

I pour Isolation

Chaque transaction doit être isolée, donc ne pas interagir avec une autre
transaction.

Nos transactions sont-elles isolées ?

Test

Dans votre client MySQL, exécutez les requêtes suivantes (ne commitez pas)
pour modifier le pere_id du rat Bibo :

START TRANSACTION; -- On ouvre une transaction

86
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

UPDATE Animal -- On modifie Bibo


SET pere_id = 73
WHERE espece_id = 5 AND nom = 'Bibo';

SELECT id, nom, commentaires, pere_id, mere_id


FROM Animal WHERE espece_id = 5;

À nouveau, ouvrez une deuxième session, tout en laissant la première ouverte


(démarrez un deuxième client SQL et connectez-vous à votre base de données).
Exécutez les requêtes suivantes, pour modifier les commentaires de Bibo.

START TRANSACTION; -- On ouvre une transaction

SELECT id, nom, commentaires, pere_id, mere_id FROM Animal WHERE


espece_id = 5;

UPDATE Animal -- On modifie la perruche Bibo


SET commentaires = 'Agressif' WHERE espece_id = 5 AND nom = 'Bibo';

SELECT id, nom, commentaires, pere_id, mere_id FROM Animal


WHERE espece_id = 5;

Le résultat n'est pas du tout le même dans les deux sessions. En effet, dans la
première, on a la confirmation que la requête UPDATE a été effectuée :

Et le SELECT renvoie bien les données modifiées (pere_id n'est plus NULL
pour Bibo) :

87
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Par contre, dans la deuxième session, on a d'abord fait un SELECT, et Bibo n'a
toujours pas de père (puisque cela n'a pas été commité dans la première
session). Donc on s'attendrait à ce que la requête UPDATE laisse pere_id
à NULL et modifie commentaires.

Seulement voilà, la requête UPDATE ne fait rien ! La session semble bloquée :


pas de message de confirmation après la requête UPDATE, et le
second SELECT n'a pas été effectué.

UPDATE Animal -- On modifie Bibo


SET commentaires = 'Agressif'
WHERE espece_id = 5 AND nom = 'Bibo';

Commitez maintenant les changements dans la première session (celle qui


n'est pas bloquée). Retournez voir dans la seconde session ; elle s'est débloquée
et indique maintenant un message de confirmation aussi :

Qui plus est, le SELECT a été exécuté (vous devrez peut-être appuyer sur
Entrée pour que ce soit envoyé au serveur) et les modifications ayant été faites
par la session 1 ont été prises en compte : commentaires vaut 'Agressif' et
pere_id vaut 73 !

88
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Il est possible que votre seconde session indique ceci :


ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction.
Cela signifie que la session est restée bloquée trop longtemps et que par
conséquent la transaction a été automatiquement fermée (avec un rollback des
requêtes effectuées). Dans ce cas, recommencez l'opération.

Il n'y a plus qu'à commiter les changements faits par la deuxième session, et
c'est terminé ! Si vous ne commitez pas, commentaires restera NULL. Par
contre, pere_id vaudra toujours 73, puisque ce changement-là a été commité
par la première session.

Conclusion

La deuxième session n'a pas interagi avec les changements faits par la
première session, chaque transaction est bien isolée.

Et la première session qui bloque la seconde, ce n'est pas une interaction, ça ?

Verrous : Le blocage de la deuxième session vient de ce que la première


session, en faisant sa requête UPDATE, a automatiquement posé un
verrou sur la ligne contenant Bobi le rat, empêchant toute modification tant
que la transaction était en cours. Les verrous faisant l'objet du prochain
chapitre, je n'en dis pas plus pour l'instant.

D pour Durabilité

Une fois la transaction terminée, les données résultant de cette transaction


doivent être stockées de manière durable et pouvoir être récupérées, en cas de
crash du serveur, par exemple.

Nos transactions modifient-elles les données de manière durable ?

Oui, une fois les changements commités, ils sont stockés définitivement
(jusqu'à modification par une nouvelle transaction).

89
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

V. Gestion des utilisateurs sous MYSQL et Oracle

Après avoir créé notre base de données : elevage. Vous avez peut-être créé
également d'autres bases de données pour vos tests et projets personnels.
Mais ce ne sont pas les seules bases de données existant sur votre serveur
MySQL. Connectez-vous avec l'utilisateur "root" (sinon certaines bases de
données vous seront cachées) et exécutez la requête suivante :

SHOW DATABASES;

La base elevage est bien là, en compagnie de quelques autres :

 information_schema : cette base de données stocke les informations sur


toutes les bases de données. Les tables, les colonnes, le type des
colonnes, les procédures des bases de données y sont recensés, avec
leurs caractéristiques. Nous verrons cette base de données plus en détail
dans le prochain chapitre.
 performance_schema : permet de stocker des informations sur les
actions effectuées sur le serveur (temps d'exécution, temps d'attente dus
aux verrous, etc.)
 test : il s'agit d'une base de test automatiquement créée. Si vous ne l'avez
pas utilisée, elle ne contient rien.
 mysql : contient de nombreuses informations sur le serveur. Entre
autres, c'est dans cette base que sont stockés les utilisateurs et leurs
privilèges.

Les utilisateurs et leurs privilèges

Privilèges des utilisateurs

Lorsque l'on se connecte à ORACLE ou MySQL, on le fait avec un utilisateur.


Chaque utilisateur possède une série de privilèges relatifs aux données
stockées sur le serveur : le privilège de sélectionner les données, de les
modifier, de créer des objets, etc. Ces privilèges peuvent exister à plusieurs
niveaux : base de données, tables, colonnes, procédures, etc.

90
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Par exemple sur MySQL, tout au début de ce cours, vous avez créé un
utilisateur, puis lui avez donné des privilèges avec la commande suivante :

GRANT ALL PRIVILEGES ON elevage TO 'student'@'localhost';

Cette requête a donné tous les droits sur la base de données elevage à
l'utilisateur 'student'@'localhost'.

Stockage des utilisateurs et privilèges

Toutes ces informations sont stockées dans la base de données mysql.


Les utilisateurs sont stockés dans la table user, avec leurs privilèges globaux
(c'est-à-dire valables au niveau du serveur, sur toutes les bases de données). La
base mysql possède par ailleurs quatre tables permettant de stocker les
privilèges des utilisateurs à différents niveaux.

 db : privilèges au niveau des bases de données.


 tables_priv : privilèges au niveau des tables.
 columns_priv : privilèges au niveau des colonnes.
 proc_priv : privilèges au niveau des routines (procédures et fonctions
stockées).

Modifications

Il est tout à fait possible d'ajouter, de modifier et de supprimer des utilisateurs


en utilisant des requêtes INSERT, UPDATE ou DELETE directement sur la
table mysql.user. De même pour leurs privilèges, avec les tables mysql.db,
mysql.tables_priv, mysql.columns_priv et mysql.procs_priv.

Cependant, en général, on utilise plutôt des commandes dédiées à cet usage.


Ainsi, pas besoin de se soucier de la structure de ces tables, et le risque d'erreur
est moins grand. Ce sont ces commandes que nous allons décortiquer dans la
suite de ce chapitre.

Tout comme on peut préciser la table à laquelle appartient une colonne en


préfixant le nom de la colonne par le nom de la table,
nom_table.nom_colonne, il est possible de préciser à quelle base de données
appartient une table, nom_bdd.nom_table, voire de préciser à la fois la table et
la base de données dans laquelle se trouve une colonne :
nom_bdd.nom_table.nom_colonne.

91
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Syntaxe pour la création et la suppression

Voici les requêtes à utiliser pour créer et supprimer un utilisateur :

-- Création

CREATE USER 'login'@'hote' [IDENTIFIED BY 'mot_de_passe'];

-- Suppression

DROP USER 'login'@'hote';

Sous ORACLE :
Pour pouvoir accéder aux données, on doit se connecter via un compte
utilisateur qui aura certains privilèges et une certaine visibilité de la base
de données.
Il existe 2 utilisateurs par défaut sur toute base Oracle :
 L’utilisateur SYS, propriétaire des tables et des vues du dictionnaire
 L’utilisateur SYSTEM, qui a simplement le droit de consultation de ces
objets.
Ces 2 utilisateurs ont par défaut le rôle DBA, ce qui veut dire qu'ils ont
accès à tous les objets de tous les autres utilisateurs de la base, et qu'ils
ont le droit d'exécuter certaines commandes d'exploitation et
d'administration. Un DBA peut créer des utilisateurs en utilisant la
requête CREATE USER. Lorsqu’un utilisateur est créé, il ne possède
aucun privilège. Le DBA doit lui donner des privilèges souhaités. A
chaque création d’un utilisateur correspond la création d’un schéma de
même nom Un compte utilisateur = Un schéma de BDD
C'est un ensemble de d'objets : tables, vues, index,...L'utilisateur crée,
modifie,... ses objets

Etapes de création d‘un utilisateur


Choisir un nom d'utilisateur et un mécanisme d'authentification

Par Oracle
Par le SE2.

Identifier les tablepaces dans lesquels l'utilisateur va stocker ses objets


 typiquement 3 tablespaces pour les données, les tris et les index
 Revient à affecter un tablespace par défaut et un tablespace

92
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

temporaire. Décider des quotas pour chaque tablespace. Créer


l’utilisateur et Accorder des privilèges et des rôles à l'utilisateur

Exemples:
CREATE USER Toto
IDENTIFIED [BY xyz /EXTERNALLY]
DEFAULT TABLESPACE data01
TEMPORARY TABLESPACE temp
QUOTA 15m ON data01 [UNLIMITED]
PROFILE Profil1
PASSWORD EXPIRE
ACCOUNT UNLOK [LOCK];

Modification
Avec ordre ALTER USER

 Force changement de mot de passe


ALTER USER Toto PASSWORD EXPIRE;

 Suppression de quota
ALTER USER Toto QUOTA 0 ON data01;

 Les données existantes restent


 mais plus possible d'en insérer d'autres

 Quota illimité
ALTER USER Toto QUOTA UNLIMITED ON data01;

 Interdiction temporaire de connexion


ALTER USER Toto ACCOUNT LOCK ;

Suppression
Syntaxe : DROP USER utilisateur [CASCADE]
Option CASCADE : supprime tous les objets du schéma puis
supprime l'utilisateur

93
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exemple : DROP USER Toto CASCADE;


Remarque : impossible de supprimer un utilisateur connecté !

Informations sur les utilisateurs


Utiliser les vues
DBA_USERS
DBA_TS_QUOTAS
Exemples :
SELECT Nom_Utilisateur, default_tablespace, temporary_tablespace
FROM dba_users
WHERE username = ‘Toto';

SELECT * FROM dba_ts_quotas WHERE username= ‘Toto';

Gestion des profils


Ensembles nommés de limites de ressource

 nombre de sessions (connexion) simultanées par utilisateur


 durée d'inactivité
 durée totale de connexion
 durée de vie du mot de passe (jours)
...
Affectés aux utilisateurs
 lors de leur création
 par modification

Peuvent être activés/désactivés

Sont utilisés sur les gros systèmes pour contrôler l’utilisation des
ressources d’un groupe d’utilisateur par rapport à un autre

Gestion des ressources à l'aide des profils


Etapes à suivre :

Créer les profils : ordre CREATE PROFILE

94
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les affecter à l'utilisateur

 Ordre CREATE/ALTER USER

Activer les limites de ressources


 soit ALTER SYSTEM SET RESOURCE_LIMIT =TRUE or FALSE
 soit fichier de paramètres d'initialisation

CREATE PROFILE developer_prod LIMIT


SESSIONS_PER_USER 2 [UNLIMITED / DEFAULT]
// nb sessions simultanées
IDLE TIME 60 [UNLIMITED / DEFAULT]
// durée d'inactivité
CONNECT TIME 480 [UNLIMITED / DEFAULT]
// durée totale de connexion...
PASSWORD_LIFE_TIME 30 [UNLIMITED / DEFAULT]
// durée de vie du mot de passe (jours);
ALTER USER Toto
PROFILE developer_prod;

Modification/suppression
Modification
ordre ALTER PROFILE
Exemple :

ALTER profile developer_prod limit


sessions_per_user 3
IDLE_TIME 2;

Suppression
ordre DROP PROFILE [CASCADE]
option CASCADE : assure que tous les utilisateurs ayant ce profil
seront mis à jour!

Le profile DEFAULT ne peut être supprimé

Exemple : DROP PROFILE developer_prod CASCADE;


Entre en vigueur pour les sessions suivantes

95
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Informations sur les profils


Utiliser les vues
 DBA_USERS
 DBA_PROFILES

Exemples :
select distinct profile from dba_profiles;
select * from dba_profiles where profile='DEFAULT';

Gestion des privilèges


Les privilèges sont des droits pour exécuter des requêtes

Deux types de Privilèges

SYSTEME
- permet aux utilisateurs d'effectuer des opérations touchant la structure
de la base (create tablespace, create database, alter system , create table,
create user, alter profile …)

- Il existe a peu prés 127 privilèges système qui sont classés par catégories
OBJET
- Un privilège objet permet d’exécuter une action particulière sur une
table, vue, fonction, séquence, procédure, package d’un schéma.
- Par exemple y accéder, la mettre a jour ou même y insérer des
information (select, update, insert, references, execute…)
Ordre GRANT permet d'ajouter un privilège à un utilisateur

Exemple :
GRANT create index, create table TO Toto;

Ordre REVOKE pour le supprimer

Exemple :
REVOKE create table FROM Toto;

96
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Attribution de privilèges systèmes

Avec l'option

GRANT … TO …WITH ADMIN OPTION;

Pour accorder un privilège système, il faut posséder le privilège WITH ADMIN


OPTION

Privilèges SYSDBA et SYSOPER (AS SYSDBA / AS SYSOPER)

SYSOPER (startup, shutdown, archive log, recover, Alter database,


open/mount et alter database backup, restricted session)

SYSDBA = tous les privilèges systèmes avec (WITH ADMIN OPTION),


tous les privilèges SYSOPER + CREATE DATABASE et de faire de
recouverement basé sur le temps

Privilèges Objets

Les principaux privilèges Objet :

ALTER, DELETE, INDEX, REFERENCES SELECT, UPDATE (pour


les tables), EXECUTE (pour les procédures)

Exemples:
GRANT execute ON dbms_pipe TO Toto;

GRANT select, update (nom, sal) ON emp TO Bob WITH GRANT OPTION;
REVOKE execute ON dbms_pipe FROM scott;

Attention à la formulation : pour donner le privilège "with admin option", il


faut faire : GRANT … WITH GRANT OPTION

Exercice de synthèse:
Soit le schéma relationnel de la base de données suivante:
Voiture (numserie, couleur, prix, cout, marque, modele, nomp, prenomp)
Arrivee (numserie, date, magasin)
Client (nom, prenom, adresse)

Vendeur(nom, prenom, adresse, salairefixe, magasin)


Vente(numero, date, prixachat, numserie, noma, prenoma, nomv, prenomv)
Chaque vendeur touche une prime de 5% de la différence entre le prix d’achat affiché et le coût de la voiture.

97
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

(a) Donner la liste des voitures (numero) vendues après le 15 avril 2007.

SELECT Voiture.numserie
FROM Voiture, Vente
WHERE Voiture.numserie = Vente.numserie AND date > ’2007-04-15;

(b) Donner la voiture qui a rapporté le plus d’argent.

SELECT Voiture.numserie
FROM Voiture, Vente
WHERE Voiture.numserie = Vente.numserie
AND prixachat-cout >= ALL (SELECT prixachat-cout FROM Voiture,
Vente WHERE Voiture.numserie = Vente.numserie) ;

(c) Donner le vendeur ayant accordé le plus gros rabais.

SELECT nomv, prenomv


FROM Vente, Voiture
WHERE Voiture.numserie = Vente.numserie
AND prix-prixachat >= ALL (SELECT prix-prixachat
FROM Voiture, Vente
WHERE Voiture.numserie = Vente.numserie) ;

(d) Les bénéfices de chaque magasin pour le mois de janvier 2007.

SELECT magasin, SUM (benef) as benefice


FROM (SELECT nom, prenom, magasin, SUM(prixachat-cout-0.5*(prix-cout))-salaire as benef
FROM Voiture, Vente, Vendeur
WHERE Voiture.numserie = Vente.numserie
AND nomv = nom AND prenomv = prenom
AND date BETWEEN ’2007-01-01’ AND ’2007-01-31’
GROUP BY nom, prenom, magasin) BeneficesVendeurs
GROUP BY magasin;

(e) Le meilleur client (celui ayant rapporté le plus d’argent à l’entreprise).

SELECT nomc, prenomc


FROM Vente,Voiture
WHERE Voiture.numserie = Vente.numserie
GROUP BY nomc, prenomc
HAVING SUM(prixachat-cout-0.5*(prix-cout)) >= ALL(SELECT SUM(prixachat-cout-
0.5*(prix-cout))
FROM Vente, Voiture
WHERE Voiture.numserie =
Vente.numserie
GROUP BY nomc, prenomc) ;

98
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Partie IV: L’Administration Oracle

Cette partie est une suite logique de la partie III que nous venons de voir. Car
nous avons largement abordé une partie de l’administration Oracle tout au
long de la partie précédente notamment dans la gestion des utilisateurs.

Les entreprises choisissent la base de données Oracle plus qu'aucune autre


pour ses performances, sa fiabilité et sa sécurité. Oracle Database 11g est
adapté aux environnements transactionnels et décisionnels sophistiqués, et
plus particulièrement au grid computing. Non seulement ce SGBD améliore
nettement les performances de 10g mais aussi, et surtout, il offre des avantages
tels qu'une installation simple et rapide, et des fonctions complètes d'auto-
gestion.

La version oracle database 11g release 2 est disponible depuis septembre


2010. La version 11.2 pour Windows est disponible depuis avril 2010.

Les différents produits d’Oracle DATABASE sont proposés en trois


gammes :

 Enterprise Edition - La gamme pour les grosses applications


critiques de l’entreprise, intégrant des options supplémentaires telles
que le partitionnement des tables.
 Standard Edition - La gamme destinée à des serveurs possédant 4
processeurs et ne proposant que l’option RAC/ASM.
 Standard Edition ONE - la gamme destinée aux serveurs
biprocesseurs, sans option.
 Personal Edition - La gamme pour l’utilisateur indépendant
(développeur, consultant, …), elle utilise un noyau Enterprise Edition.

Quatre nouvelles options apparaissent dans Oracle Database 11g


Enterprise Edition

 Oracle Real Application Testing : aide ses clients à réduire les


délais, les risques et les coûts de test de ses modifications de leur
environnement informatique, de façon contrôlée et économique. Outil
de tests et de gestion des changements, cet outil est bienvenu là où les
infrastructures et environnements sont plus que jamais multiples.
 Oracle Advanced Compression : intègre de nouveaux mécanismes
de compression applicables à tous les types de données permettant
d’atteindre des taux de compression de 2x ou 3x, et parfois plus.

99
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Associé à de nouveaux mécanismes de partitionnement, Oracle


Advanced Compression permet de déployer dans la base de données des
stratégies de gestion du cycle de vie des informations, sans avoir
à modifier les applications, afin de réduire encore plus les besoins de
stockage.
 Oracle Total Recall : permet de conserver et de retrouver les
historiques des données modifiées, mais aussi d’en simplifier l’accès. Les
administrateurs peuvent intervenir plus tôt dans les processus, ce qui
apporte une nouvelle dimension de temps dans la gestion des données,
comme le tracking (suivi, en temps réel des flux d’informations), les
audits ou le respect des règles.
 Oracle active DATA GUARD : porte la protection des données
jusqu’aux risques de défaillances des systèmes et de désastres.
L’application permet simultanément d’écrire et récupérer les données
d’une base de données, ce qui augmente les performances et apporte une
solution économique de ‘Disaster Recovery’.
 Oracle Active Data Guard : peut être employé pour améliorer la
performance des bases de données de production en transférant vers
une base de données physique secondaire des opérations
requérant beaucoup de ressources, telles que certaines requêtes ou les
sauvegardes. Cette solution améliore fortement le retour sur
investissement pour une base de données physique de secours, car
celle-ci peut être utilisée à la fois pour la protection en cas de panne
générale et pour l’amélioration de la qualité de service de
l’environnement de production.
1. Notion de Grid Computing
A partir de la version 10g, la base de données intègre la notion de Grid
Computing (réseau distribué d’ordinateurs hétérogènes en grille).
Le but du Grid est de créer des pools de ressources :
de stockage de serveurs Le Grid Computing autorise un accès transparent et
évolutif (en termes de capacité de traitement et de
stockage), à un réseau distribué d’ordinateurs hétérogènes.

Oracle 11g permet à ces machines d’intéropérer ; l’ensemble étant considéré


comme une seule ressource unifiée. Chaque ressource est vue comme un
service !

Il est possible de mettre en place des réseaux grille nationaux, voire mondiaux.
Ainsi chaque nouveau système peut être rapidement mis à disposition à partir
du pool de composants.

100
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Exemple d’application en Grid Computing

Les deux applications présentées ci-dessous, Facturation et Comptabilité


se partagent des ressources de deux serveurs. Chacune peut être hébergée sur
n’importe lequel d’entre eux et les fichiers de base de données peuvent
se trouver sur n’importe quel disque.

Facturation Comptabilité

HP-UNIX LINUX

Informatique en Grille

2. La gestion ASM (gestionnaire de fichiers :


Automatic Storage Management)
La nouvelle fonctionnalité Automatic Storage Management (ASM) permet à
la base de données de gérer directement les disques bruts, elle élimine le
besoin pour un gestionnaire de fichiers de gérer à la fois des fichiers de
données et des fichiers de journaux. L’ASM répartit automatiquement toutes
les données de bases de données entre tous les disques,
délivrant le débit le plus élevé sans aucun coût de gestion.
Au fur et à mesure de l’ajout et de l’abandon de disques, l’ASM actualise
automatiquement la répartition des données. Pour utiliser ASM vous devez
démarrer une instance appelée « ASM instance » qui doit être démarrée
avant de démarrer l’instance de votre propre base de données.
Les instances ASM ne montent pas de base de données (ensemble de fichiers
constituant la base) mais gère les metadatas requises pour rendre les fichiers
ASM disponibles à n’importe quelle instance de base
de données. Les deux, instance ASM et instance « ordinaire » ont accès au

101
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

contenu des fichiers. Communicant avec l’instance ASM seulement pour


connaître le layout des fichiers utilisés.

Les composants développés par Oracle pour le Grid Computing

Real Application cluster (RAC) : Supporte l’exécution d’Oracle sur un


cluster d’ordinateurs qui utilisent un logiciel de cluster indépendant de la plate
forme assurant la transparence de l’interconnexion

Automatic Storage Management (ASM) : Regroupe des disques de


fabricants différents dans des groupes disponibles pour toute la grille. ASM
simplifie l’administration car au lieu de devoir gérer de
nombreux fichiers de bases de données, on ne gère que quelques groupes de
disques.
Oracle Ressource Manager : Permet de contrôler l’allocation des
ressources des nœuds de la grille.

Oracle Scheduler : Contrôle la distribution des jobs aux nœuds de la grille


qui disposent de ressources non utilisées.

Oracle Streams : Transfère des données entre les nœuds de la grille tout en
assurant la synchronisation des copies. Représente la meilleure méthode de
réplication.

Outils de développement
Oracle offre l’accès à un choix d’outils et processus de développement, avec de
nouvelles fonctionnalités comme Client Side Caching, Binary XML, un
nouveau compilateur Java, l’intégration native avec Microsoft Visual Studio
2005 pour les applications « .NET », Oracle Application Express pour les
outils de migration, ou encore SQL Developer pour coder rapidement les
routines SQL et PL/SQL.

ORACLE reste disponible sous Solaris (SUN), HP/UX (Hewlett Packard),


Aix(IBM), Windows, Linux, etc.

La documentation Oracle est consultable à partir du serveur :


http://www.oracle.com et http://tahiti.oracle.com

102
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le site Metalink est le site de hotline en ligne : http://metalink.oracle.com


remplacé par support.oracle.com On y trouve des résolutions d’erreurs
référencées, des patchs et des scripts d’administration.

3. Notion de schéma
Le terme SCHÉMA désigne l’ensemble des objets qui appartiennent à un
utilisateur, ces objets sont préfixés par le nom de l’utilisateur qui les a créés. Il
s’agit d’une notion logique désignant la totalité des objets créés par un
utilisateur.
C’est ainsi que la base Oracle peut faire la différence entre la table AVION
appartenant à l’utilisateur ESSONO (ESSONO.AVION) et la table avion
appartenant à l’utilisateur MBA (MBA.AVION). Chacun des utilisateurs
propriétaire des objets à tous les droits sur ces objets !

En général on indique sous le terme de schéma, l’ensemble des tables et des


index d’une même application. Les schémas d’exemple fournis par Oracle sont
décrits dans la documentation Oracle Database Sample Schémas. Ces schémas
peuvent être installés lors de la création de la base de données (appelée par
défaut ORCL) au moment de l’installation des binaires d’Oracle.

Principaux types d’objets de schéma :

 Tables et index
 Directory
 Vues, séquences et synonymes
 Programmes PL/SQL (procédures, fonctions, packages, triggers)
4. Le dictionnaire de données
C’est un ensemble de tables et de vues qui donne des informations sur le
contenu d’une base de données. Il contient :

 Les structures de stockage


 Les utilisateurs et leurs droits
 Les objets (tables, vues, index, procédures, fonctions, …)

Il appartient à l’utilisateur SYS et est stocké dans le tablespace SYSTEM.


Sauf exception, toutes les informations sont stockées en MAJUSCULE.

Il est créé lors de la création de la base de données, et mis à jour par Oracle
lorsque des ordres DDL (Data Définition Langage) sont exécutés, par exemple

103
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

CREATE, ALTER, DROP … Le dictionnaire de données chargé en mémoire est


utilisé par Oracle pour traiter les commandes SQL.

5. Les tables et vues statiques


Les vues statiques sont basées sur de vraies tables stockées dans le tablespace
SYSTEM, et sont accessibles uniquement quand la base est ouverte.
Les vues statiques sont caractérisées par leur préfixe :

USER_* : Informations sur les objets qui appartiennent à l’utilisateur


ALL_* : Information sur les objets auxquels l’utilisateur a accès (les siens et
ceux sur lesquels il a reçu des droits)

DBA_* : Information sur tous les objets de la base


Derrière le préfixe, le reste du nom de la vue est représentatif de l’information
accessible, au pluriel.

6. Les tables et vues dynamiques de performance :


Ces tables sont basées sur des informations en mémoire ou extraites du fichier
de contrôle. Elles donnent des informations sur le fonctionnement de la base
de données, notamment sur les performances. Elles sont remises à zéro si on
arrête la base de données. Elles sont accessibles même lorsque la base n’est pas
complètement ouverte (MOUNT) Les vues dynamiques de performance
sont : Préfixées par « V$ » Derrière le préfixe, le reste du nom de la vue est
représentatif de l’information accessible.

V$INSTANCE
V$DATABASE
V$SGA
V$DATABASE
V$PARAMETER

Les vues DICTIONARY et DICT_COLUMNS donnent la description de toutes


les tables et vues du dictionnaire (statiques et dynamiques).
- la liste complète des vues statiques est obtenue par la requête :

SELECT view_name FROM ALL_VIEWS WHERE ALL_VIEWS like


‘DBA*_%’ escape ‘*’;

104
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

7. Outils d’administration
Trois outils sont présents pour administrer une base de données Oracle
SQL*Plus (sqlplus), interface d’accès à la base de données en mode
commande. L’interface graphique de SQL*Plus n’est plus disponible sous la
version 11g d’Oracle.

iSQL*Plus, peut être utilisé en application indépendante ou connecté à un


référentiel Oracle Management Server (OMS) ;

Oracle Enterprise Manager (OEM), appelé Grid Control ou Database


Control. Database control est créé à la création d’une base oracle et ne permet
d’administrer graphiquement que cette base de données. Grid control est un
outil qui permet d’administrer une ferme de bases de données (oracle ou non
oracle).

8. L’outil SQL*Plus
Outil ligne de commande nommé SQLPLUS.

SQLPLUS [ connexion ] [ @fichier_script [argument [,…]] ]

Il permet de saisir et d’exécuter des ordres SQL ou du code PL/SQL et dispose


en plus d’un certain nombre de commandes.

• sans connexion
C:\> SQLPLUS /NOLOG
• avec connexion
C:\> SQLPLUS system/ESSONO@ESSONO
• avec connexion et lancement d’un script sur la ligne de commande
C:\> SQLPLUS system/ESSONO@ESSONO @info.sql
• sous dos ---------------
set ORACLE_SID= ESSONO
• connection sans fichier de mots de passe
SQL> connect /as sysdba
ConnectÚ.
SQL> show user

105
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

USER est « SYS »


• sous unix ---------------
Export ORACLE_SID= ESSONO
• Connexion avec un fichier de mots de passe
SQL> connect sys/secret as sysdba
ConnectÚ.
SQL> show user
USER est “SYS”
SQL>
SQL*PLUS est avant tout un « interpréteur » de commandes SQL. Il est
également fortement interfacé avec le système d’exploitation. Par exemple,
sous UNIX, on pourra lancer des commandes UNIX sans
quitter sa session SQL*PLUS.

Un SGBDR est une application qui fonctionne sur un système d’exploitation


donné. Par conséquent, il faut se connecter au système avant d’ouvrir une
session ORACLE. Cette connexion peut être implicite ou
explicite.
Pour lancer SQL Plus sans se connecter à une base de données utilisez la
commande :
C:\> sqlplus /nolog

Quelques commandes SQL*Plus

SQL*Plus est un outil composé de commandes de mise en forme et d’affichage

 COL ADRESSE FORMAT A20, formater l’affichage d’une colonne


ADRESSE sur 20 caractères ;
 COL PRIXUNIT FORMAT 99.99, formater l’affichage d’une colonne
PRIXUNIT ;
 CLEAR COL, ré-initialiser la taille des colonnes par défaut
 SET LINESIZE 100, reformater la taille de la ligne à 100 caractères
 SET PAUSE ON, afficher un résultat page par page
 SHOW USER, visualiser le user sous lequel on est connecté
 CONNECT, se connecter à l’instance
 User/MotPass@adresseServeur, permet de changer de session
utilisateur ;

106
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 CLEAR SCREEN, ré-initialiser l’écran


 SET SQLPROMPT TEST>, afficher le prompt SQL en : TEST>
 DESC Nom_Table, afficher la structure d’une table ou d’une vue
 SPOOL nomfichier.txt, permet d’activer un fichier de format texte dans
lequel on retrouvera les commandes et résultats affichés dans SQL Plus
 SPOOL OFF, permet de désactiver le spool ouvert précédemment
 @ nom_ficher, permet d’exécuter le contenu d’un fichier sql
 /, ré-active la dernière commande
 SET ECHO ON/OFF, affiche ou non le texte de la requête ou de la
commande à exécuter
 SAVE nom_ficher [append|create|replace], permet de sauvegarder le
contenu du buffer courant dans un fichier « .sql »
 TIMING ON|OFF, provoque l’affichage d’informations sur le temps
écoulé, le nombre d’E/S après chaque requête
 TI ON|OFF, provoque l’affichage de l’heure avec l’invite de commande
 TERM [ON|OFF], supprime tout l’affichage sur le terminal lors de
l’exécution d’un fichier
 VER [ON|OFF], provoque l’affichage des lignes de commandes avant et
après chaque substitution de paramètre
 SQL }, spécifie le caractère « } » comme étant le caractère de
continuation d’une commande SQL*Plus
 SUFFIX txt, spécifie l’extension par défaut des fichiers de commande
SQL*Plus

9. L’outil iSQL*Plus

Outil Internet d’accès à une base de données Oracle, permettant d’écrire


des requêtes SQL (d’une façon plus ou moins graphique).

107
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Par défaut, seule la connexion en tant qu’utilisateur « normal » (non SYSDBA


ou SYSOPER) est autorisée. Par contre, la connexion en tant qu’utilisateur
SYSDBA ou SYSOPER est protégée par une authentification au niveau du
serveur http Pour l’autoriser, il faut au choix :

Ajouter des entrées (utilisateur / mot de passe) à l’aide de l’utilitaire htpasswd


dans un fichier d’authentification du serveur HTTP (défini par défaut dans le
fichier de configuration isqlplus.conf à :

ORACLE_HOME\sqlplus\admin\iplusdba.pw
Désactiver l’authentification du serveur HTTP pour ce type de connexion
(directive <Location /isqlplusdba> dans le fichier de configuration
isqlplus.conf) Lors d’une connexion SYSDBA ou SYSOPER, l’URL est modifiée
en : http://serveur[:port]/isqlplusdba

10. Le Database Control et le Grid control


À partir de la version 10g la base de données Oracle s’est dirigée vers le WEB
pour fournir une nouvelle version d’Entreprise Manager à la place de celui de
la 9i basé sur java possédant une apparence Windows; ainsi que des variantes
selon l’utilisation Dbcontrol pour une seule Base de données ou grid
control pour centraliser la gestion de plusieurs bases cibles.
Le Grid Control est la console graphique qui permet d’administrer un
ensemble de bases de données sur des serveurs distants, appelé « ferme de
bases de données ».

Le Database Contrôle est en réalité un sous ensemble du Grid Control,


correspondant à l’administration de la base de données choisie.
Contrairement au Grid Control, le Database Control est inclus dans
l’installation standard. Il contient un référentiel et est créé après la création de
la base de données.

Cette console permet d’administrer directement la base de données :


Arrêt/Démarrage, gestion du stockage, gestion des utilisateurs, gestion des
schémas, …Remontée d’alerte, de planification de tâche, de
sauvegarde/restauration, d’export/import, … Après création d’une base de
données Oracle, le Database Control peut être affiché sur demande dans le
navigateur.

108
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Présentation du database control

109
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

En cas de besoin, l’utilitaire Entreprise Manager Configuration Assistant


(EMCA) peut être utilisé pour créer l’environnement du Database Control pour
cette nouvelle base.

EMCA [ -r | -x <SID> ] Sans option l’utilitaire crée l’environnement complet


du Database Control.

–r le référentiel n’est pas créé

-x <SID> supprime l’environnement du Database control

Si vous utilisez successivement [ -x ] puis [ -r ] vous pouvez recréer


l’environnement tout en conservant le référentiel existant.
D:\cours_Admin11G>emca -x TAHITI
EMCA démarré Ó Sat Mar 19 12:57:58 CET 2005
La configuration d’Enterprise Manager a réussi.
EMCA arrêté Ó Sat Mar 19 12:57:58 CET 2005

connect “SYS”/”&&sysPassword” as SYSDBA startup ;


host C:\app\oracle\product\11.2.0\dbhome_1\bin\emca.bat config dbcontrol
db -silent – DB_UNIQUE_NAME tahiti PORT 1521 -EM_HOME
C:\app\oracle\product\11.2.0\dbhome_1 –LISTENER LISTENER -
SERVICE_NAME tahiti -SID tahiti -ORACLE_HOME
C:\app\oracle\product\11.2.0\dbhome_1 -HOST localhost -LISTENER_OH
C:\app\oracle\product\11.2.0\dbhome_1 -LOG_FILE
C:\app\oracle\admin\tahiti\scripts\emConfig.log;
spool off

11. L’architecture OFA


OFA, Oracle Flexible Architecture, est un ensemble de recommandations sur
l’arborescence et le nommage des fichiers du serveur contenant les produits et
les bases de données en tenant compte de la
possibilité d’avoir plusieurs bases de données et plusieurs versions d’Oracle
par plate-forme. Un des avantages est de séparer les produits Oracle des
fichiers des bases de données.
La norme de la version 11g est présentée page suivante.
Le répertoire /app/oracle/oradata/orcl/ contient les fichiers de la base de

110
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

données « orcl » Le répertoire /app/oracle/admin/orcl/ contient les


répertoires destinés aux exports Data Pump ou non de la base de données ainsi
qu’au fichier de paramètre utilisé lors de la création de la base de
données « orcl ».
/app/oracle/admin/orcl/
Adump
Dpdump
pfile
Le répertoire /app/oracle/diag/ contient les répertoires :
 /app/oracle/diag/rdbms/orcl/orcl/
 Alert dans lequel est stocké le fichier des alertes en format xml
 Cdump
 Hm
 Incident
 Incpkg
 Ir
 lck contient un ensemble de fichiers vide représentant des
 locks
 metadata contient un ensemble de fichiers binaires « .ams »
 stage
 sweep
 trace contient un ensemble de fichiers de traces de l’instanc
 /app/oracle/flash_recovery_area/orcl/ contient les fichiers de controle
multiplexes, et un repertoire ONLINELOG destine aux fichiers de
flashback.
Le répertoire /app/oracle/product/11.2.0/dbhome_1 contient les répertoires
des binaires d’oracle. On y retrouve les répertoires
 BIN qui contient les binaires d’oracle et certains outils comme
« sqlplus.exe ».
 Database qui contient sous Windows les fichiers de mot de passe et
SPFILE ainsi qu’un sous répertoire d’archive de Redo Log lorsque
l’archivage est activé
 Dbs qui contient sous unix, les fichiers de mot de passe et SPFILE ainsi
qu’un sous répertoire d’archive de Redo Log lorsque l’archivage est
activé
 NETWORK qui contient le listener et tnsnames.ora

111
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

I. Téléchargement
Rendez-vous à l’adresse suivante : https://www.oracle.com

Si vous disposez déjà d’un compte Oracle, il suffit de vous connecter sur le
compte personnel en entrant vos paramètres de connexion.

112
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Et si vous vous connectez pour la première fois sur le site, il vous faudra créer
un compte personnel Oracle

Une fois votre compte est créé, connectez vous.

Et télécharger la version Oracle Database 11g Release 2. Celle que nous


utilisons dans ce cours. Vous pouvez évidement télécharger tout autre version
de préférence.

Une fois le téléchargement terminé, télécharger SQL Developer sur le même


site que nous allons également installer, et nous verrons son utilité plus tard.
Télécharger par la suite le dernier JDK (Java Development Kit). Pour les
utilisateurs java, ils peuvent s’en passer, car le JDK se trouve déjà sur leur
machine.

113
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

II. Installation
Décompresser le fichier téléchargé

114
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Décocher la case « Je souhaite recevoir les mises à jour de sécurité via My


Oracle Support. » Cliquez ensuite Suivant;

Confirmer par OUI et faites Suivant ;

115
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Confirmer par Suivant ;

Laisser l’option Classe de Bureau cochée et faites suivant :

116
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Dans le 1er champ, Essono c’est l’utilisateur ;

A l’intérieur le système créera un utilisateur Essono qui aura les droits


d’administrateur. Il place ensuite un fichier product et le fichier 11.2.0 qui est
la version de la Base de données et à l’intérieur il placera dbhome_1 une
nouvelle base de données.

On laissera ORCL le nom clobal de base de données.

Le Mot de passe sera « orcl2020ADMIN » ; vous pouvez ajouter le votre


éventuellement.

117
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Installer ensuite sqldeveloper ;

A la fin de l’installation vous avez la configuration suivante :

Oracle SQL Developer est un environnement de développement intégré gratuit


qui simplifie le développement et la gestion de la base de données Oracle à
plusieurs reprises dans les déploiements traditionnels et dans le Cloud. SQL
Developer propose un développement de bout en bout complet de vos
applications PL / SQL, une feuille de travail pour l'exécution des requêtes et
des scripts, une console DBA pour la gestion de la base de données, une
interface de rapports, une solution de modélisation de données complètes et
d'une plateforme pour la migration de vos bases de données tierces vers
Oracle.

118
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Architecture d’ORACLE
L’architecture d’oracle est constituée d’une instance et d’une base de données
appelée Database.

Une instance est constituée de :

 Une zone de mémoire partagée appelée System Global Area (SGA)


 Un ensemble de processus d’arrière plan ayant chacun un rôle bien
précis
 Un ensemble de processus serveur chargés de traiter les requêtes des
utilisateurs

Une Base de données est un ensemble de fichiers permettant de gérer les


données de la Base. Une Base de données est composée de :

 Un fichier de contrôle, contenant les informations sur tous les autres


fichiers de la base (nom, emplacement, taille).
 Fichiers de Redo Log, contenant l’activité des sessions connectées à la
base. Ce sont des journaux de transactions de la base. Ils sont organisés
en groupe possédant le même nombre de membres. Et éventuellement,
de fichiers de Redo Log archivés contenant les archives d’anciens
fichiers de Redo Log.
 D’un ou plusieurs fichiers de données qui contiennent les données des
tables de la base.

Le PGA (Program Global Area)


Pour un processus serveur, le PGA contient :

 Une zone de tri (allouée dynamiquement lors d’un tri)


 Des informations sur la session
 Des informations sur le traitement des requêtes de la session
 Les variables de session

Lorsqu’un utilisateur se connecte à la BD, il ouvre automatiquement une


session. Les processus utilisateurs sont alors pris en charge par les processus
serveur qui sont chargés de traiter les requêtes des utilisateurs, exemple de
charger les données nécessaires dans le Database Buffer Cache.

Le processus serveur communique localement ou en réseau avec un processus


utilisateur correspondant à l’application de l’utilisateur. Dans sa configuration
par défaut Oracle lance un processus serveur dédié à chaque utilisateur

119
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

(dedicated server configuration). Mais Oracle peut toutefois être configuré en


multithreaded server (MTS) de manière à avoir des processus server partagés
par plusieurs processus utilisateurs.

Chaque instance est dimensionnée par un ensemble de paramètres stockés


dans le fichier de paramètres système SPFILE<SID>.ora, il a été créé à la
création de la base de données à partir d’un fichier de paramètres caractère :
PFILE<SID>.ora. <SID> correspond au nom de l’instance.

Le SGA (System Global Area)


Cette zone de mémoire partagée par les différents processus de l’instance est
allouée au démarrage de l’instance et est arrêtée à l’arrêt de celle-ci.

Les composants du SGA sont :

 SPA : Shared Pool Area : zone de partage des requêtes et du


dictionnaire Oracle. La Shared Pool Area est la partie de la SGA qui est
utilisée par Oracle pour partager les requêtes (Library Cache) et le
dictionnaire de données (Dictionary Cache) entre les différents
processus. La Shared Pool est globalement dimensionnée par le
paramètre SHARED_POOL_SIZE ; la répartition entre le Library Cache
et le Dictionary Cache est assurée par Oracle.
Dimensionnée par le paramètre SHARED_POOL_SIZE.
 Database Buffer Cache : Le Database Buffer Cache est un cache de
données qui joue le même rôle que la Shared Pool mais pour les données
de la base. Les données de la base ne sont accessibles, en lecture ou en
mise à jour, qu’après avoir été chargées dans le Database Buffer Cache.
Dans la pratique, le Database Buffer Cache ayant une taille finie, Oracle
utilise un algorithme LRU (Least Recently Used) pour gérer le cache : en
cas de manque de place, Oracle supprime du cache les données utilisées
le moins récemment. Généralement, augmenter la taille du Database
Buffer Cache améliore les performances. La taille du bloc
(DB_BLOCK_SIZE) étant fixée à la création de la base, la taille du
Database Buffer Cache est définie par la valeur du paramètre
DB_BLOCK_BUFFERS qui fixe le nombre de buffers en
mémoire, chaque buffer ayant une taille égale à DB_BLOCK_SIZE.
Le paramètre DB_BLOCK_BUFFERS est typiquement compris entre un
millier (pour une petite base de test) et plusieurs dizaines/centaines de
milliers d’octets. Dimensionné par le paramètre DB_CACHE_SIZE.

120
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Redo Log Buffer : Le Redo Log Buffer stocke les informations sur les
modifications apportées à la base, avant leur écriture dans un fichier de
Redo Log. L’écriture dans le Redo Log Buffer est séquentielle (les
modifications de plusieurs transactions se mélangent) et circulaire
(quand le buffer est plein, il repart au début … après avoir été écrit sur
disque dans les fichiers de Redo Log). Dimensionné par le paramètre
LOG_BUFFER.

 Large Pool (à partir de la Version 8), Ajouté en version 8 à l’extérieur


du pool partagé pour procurer de l’espace spécifique aux opérations
parallèles, à l’usage de la configuration MTS et du module
RMAN. En version 10g, la mise en œuvre de l’ASM utilise le Large Pool.
Oracle conseille de le dimensionner à 100 Mo dans ce cas.
Dimensionnée par le paramètre LARGE_POOL_SIZE.

 Java Pool (à partir de la Version 8), zone réservée aux programmes


Java. Dimensionné par le paramètre JAVA_POOL_SIZE.
L’installation des composants Java impose que cette zone soit
configurée, les instructions Java s’y exécutent. Il faut réserver au
minimum 100Mo pour permettre une installation correcte.

 Reserved Area (à partir de la version 7.3), zone réservée destinée à


l’enregistrement d’objets SQL de grande taille (y compris des packages,
des procédures et des fonctions). Dimensionnée par le paramètre
SHARED_POOL_RESERVED_SIZE.

Toutes ces zones mémoires sont configurées à l’aide du paramètre


contenu dans le fichier de paramètre SPFILE. En dehors de la SGA,
chaque processus possède une zone de mémoire privée appelée PGA
(Program Global Area).

La version 11g offre la possibilité d’automatiser la gestion de l’instance


grâce aux paramètres MEMORY_TARGET et MEMORY_MAX_SIZE.

121
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le fichier de paramètres (init.ora ou SPFILE.ora)


Au démarrage l’instance lit un fichier de paramètres qui contient les
paramètres d’initialisation. Ce fichier est géré par le DBA. Ces paramètres
permettent notamment de :

 allouer la mémoire souhaitée aux différentes structures de la SGA


 De trouver le nom et l’emplacement des fichiers de contrôle de la base

 Les paramètres sont spécifiés sous la forme nom_paramètre = valeur


 Tous les paramètres sont optionnels et ont une valeur par défaut
Des commentaires peuvent être inclus et commencent par le
caractère #
 La valeur peut être spécifiée entre des guillemets doubles si elle
contient des caractères spéciaux (égal, espace, …)
 Les valeurs multiples sont spécifiées entre parenthèses, séparées par
des virgules

Les processus d’arrière plan


Il est important de distinguer les processus d’arrière plan des autres processus.
Ils sont indépendants de la connexion des utilisateurs. Ils sont lancés au
démarrage de l’instance et arrêtés lors de l’arrêt de l’instance.

Ils réalisent des opérations et les actions sur l’instance et sur la base de
données. Comme l’écriture des fichiers de données, la récupération de la base
de données et la résolution des erreurs. Certains processus aussi aident à
augmenter la performance globale du système. Les principaux processus sont :

 Database Writer (DBWRn) : écrit sur disque les données modifiées


dans le Database Buffer Cache. Les informations de la base de données
manipulées par les sessions transitent par ce cache dédié à cet usage.
 Log Writer (LGWR) : écrit sur disque le contenu du Redo Log Buffer
dans les fichiers Redo.
 Checkpoint (CKPT) : enregistre les checkpoints dans l’en-tête des
fichiers de données. Lorsque qu’un Checkpoint a lieu, toutes les
informations qui se trouvent en mémoire sont enregistrées sur
disque à l’emplacement prévu. Cet évènement correspond à un « jalon »
permettant la restauration des données jusqu’à ce point précis dans le
temps. CKPT peut à son tour déclencher DBWR et LGWR.

122
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Process Monitor (PMON) : chargé du nettoyage lors du plantage d’un


processus utilisateur. Il libère les ressources de sessions qui se sont mal
terminées.
 System Monitor (SMON) : restauration de l’instance après un arrêt
anormal. C’est le gardien de la cohésion des données. Une instance
cohérente est établie chaque fois que la base est démarrée.
 Job Queue Coordinator (CJQ) : utilisé par le Scheduler, il génère les
processus pour exécuter les jobs planifiés qui se trouvent dans la file
d’attente interne d’Oracle. Les utilisateurs peuvent créer des jobs et les
soumettre à ce coordinateur. JOB_QUEUE_PROCESSES > 0 permet de
définir le nombre de jobs soumis en simultané.
 MEMORY MANAGER (MMAN) : c’est un distributeur de mémoire et
coordonne la taille allouée aux différents composants.
 MEMORY MONITOR (MMON) : programme et déclenche ADDM
(l’Automatic Database Diagnostic Monitor) qui effectue des analyses
pour déterminer des problèmes potentiels.

Mais en fonction de la configuration de votre serveur, certains processus


peuvent être déclenchés en arrière plan comme :

 Archiver (ARCn) : en base « archivée » il archive des fichiers de Redo


Log chaque fois qu’un fichier Redo est plein.
 Recover (RECO) : gère les bases de données distribuées.
 Dispatcher (Dnnnn) : présent en serveur partagé.
 Global Cache service (LMS) : présent en option RAC (Real
Application Cluster).
 Job Queue (SNPn) : processus chargé de rafraîchir les snapshots ou
d’exécuter périodiquement des tâches programmées avec le package
DBMS_JOB.
La Base de données
La Base de données est l’ensemble des fichiers qui permettent de gérer les
données de la base.

 Un fichier de contrôle, contenant les informations sur tous les autres


fichiers de la base (nom, emplacement, taille).
 Fichiers de Redo Log, contenant l’activité des sessions connectées à
la base. Ce sont des journaux de transactions de la base. Ils sont
organisés en groupe possédant le même nombre de membres.

123
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Et éventuellement, de fichiers de Redo Log archivés contenant les


archives d’anciens fichiers de Redo Log.
 D’un ou plusieurs fichiers de données qui contiennent les données
proprement dites, elle contient à la création de la base de données au
minimum :
- Tablespace SYSTEM, contenant le dictionnaire de données.
- Tablespace SYSAUX, c’est le tablespace auxiliaire du tablespace
SYSTEM contenant des fonctions Oracle ou des données utilisées par
des outils tels que le référentiel d’OEM (Oracle Enterprise
Manager), placées avant dans un tablespace OEM_REPOSITORY,
situées aujourd’hui dans le Tablespace SYSAUX.
- Tablespace Temporaire TEMP, récupérant les segments temporaires
utilisés par les requêtes SQL de la base de données.
- Tablespace UNDO, récupérant la version précédente des données en
cours de modification par les transactions se déroulant sur la base.
- Tablespace USERS, tablespace de travail par défaut des utilisateurs.

 Un fichier de paramètres binaire SPFILE<SID>.ORA, contenant


les paramètres de démarrage de la base et d’autres valeurs qui
déterminent l’environnement dans lequel elle s’exécute. Créé à partir
d’un fichier de paramètres caractère (INIT<SID>.ora)
 Un fichier de mots de passe, contenant le mot de passe du privilège
SYSDBA

Les fichiers de données


Ils contiennent les données proprement dites de la base de données (Tables et
index notamment). Les fichiers sont logiques et rangés en tablespace.

Un tablespace est une unité logique de stockage composée d’un ou plusieurs


fichiers physiques.

La quasi-totalité des opérations d’administration relatives au stockage


s’effectue en travaillant sur le tablespace et non sur le fichier de données.

Dans la pratique, une base comportera donc d’autres fichiers de données


appartenant à d’autres tablespaces.
Tablespace System Tablespace DATA

System01.ora DATA01.ora DATA02.ora

124
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les fichiers de données sont découpés en blocs d’une taille définie à la création
de la base (2ko, 4ko, 8ko, …..). la taille du bloc oracle est définie par le
paramètre DB_BLOC_SIZE.

L’espace occupé par un objet dans un tablespace est désigné par le terme
générique de segment. Un segment appartient à un tablespace et est constitué
d’extents. Un extent est un ensemble de blocs contigus dans un fichier de
données.

Utilisateurs et Connexion à la Base de données


A la création d’une base de données, un ensemble d’utilisateurs est créé, dont
SYSTEM et SYS.

SYSTEM est l’utilisateur que l’on préfèrera pour créer les objets de schéma tels
que les users, les tables, les index, …. (SYSTEM est un utilisateur qui a des
privilèges DBA).

Pour démarrer ou arrêter la base de données, l’utilisateur SYSTEM ne suffit


pas, aussi doit on utiliser l’utilisateur SYS (Super utilisateur) avec le privilège
SYSDBA, qui lui permet de manipuler la base de données et l’instance.

Syntaxe pour la connexion classique

La connexion d’un utilisateur quelconque à une base de données oracle se fait


en suivant la syntaxe :

CONNECT utilisateur/mot_de_passe@service_OracleNet

SQLPLUS /nolog
SQL> Connect ESSONO/monpass@bora
Connecté.
SQL> Connect SYSTEM/manager@bora
Connecté.

Syntaxe pour la Connexion spéciale SYSDBA ou SYSOPER

Avec une identification pour la connexion spéciale SYSDBA ou SYSOPER

CONNECT / AS { SYSDBA | SYSOPER }


$ Export ORACLE_SID=ESSONO
$ sqlplus /nolog
SQL> Connect /as sysdba
Connecté.

125
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Avec une identification par un fichier de mot de passe.


CONNECT utilisateur/mot_de_passe AS { SYSDBA | SYSOPER }

SQL> Connect SYS/secret as sysdba


Connecté.

Les connexions SYSDBA et SYSOPER

SYSDBA : permet toutes les opérations « lourdes » d’administration


(création, arrêt, démarrage, restauration, …)

SYSOPER : même droits que SYSDBA, à l’exception de la création de la


base et des restaurations partielles.

Sur un serveur Unix ou Windows, on va vérifier que la variable


d’environnement est bien positionnée avant de se connecter à la base de
données.
S’ASSURER QUE L’INSTANCE SOUHAITEE EST BIEN DESIGNEE PAR LA VARIABLE D’ENVIRONNEMENT
ORACLE_SID, ET SE CONNECTER EN SYSDBA

 Utiliser un autre compte (SYSTEM par exemple) pour l’administration


courante (objet de schémas).
 Réserver le compte SYS pour les connexions AS SYSDBA
 Ne jamais créer d’objets dans le schéma SYS (autres que ceux du
dictionnaire)

Sous DOS
C:\>set oracle_sid=ESSONO
C:\>sqlplus /nolog
SQL > CONNECT /AS SYSDBA

Sous UNIX
Export ORACLE_SID=ESSONO
Echo ORACLE_SID
TAHITI
SQLPLUS /nolog
SQL> Connect /as sysdba
Connecté.

126
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le fichier de mot de passe


Autrefois créé avec l’utilitaire ORAPWD, il est aujourd’hui créé
automatiquement lors de la création de la base de données avec l’outil dbca.

Ce fichier protège le compte SYS associé au privilège SYSDBA permettant une


administration lourde (création, démarrage, arrêt, restaurations).

orapwd file=<fichier> password=<mot de passe> [entries=<valeur>]


rem *** Création du fichier de mots de passe ***

C> REM orapwd


FILE=/app/oracle/product/11.2.0/dbhome_1/database/PWDtahiti.ORA
PASSWORD=secret ENTRIES=10

Mettre le paramètre Remote_login_passwordfile à exclusive

Se connecter au système d’exploitation.

Lancer l’outil d’administration et se connecter, en tant que SYS à l’aide du mot


de passe défini avec le privilège SYSDBA ou SYSOPER

CONNECT sys/mot_de_passe AS { SYSDBA | SYSOPER }

SQLPLUS /nolog
SQL> Connect SYS/secret@bora as SYSDBA
Connecté.

Les variables d’environnement


Ces variables doivent être positionnées avant le lancement de l’outil
SQL*PLUS en mode commande sous le système d’exploitation.

Set ORACLE_SID=orcl
Sqlplus /NOLOG
Connect as sysdba

Sous Unix

export ORACLE_SID=orcl
echo ORACLE_SID
orcl
Sqlplus /NOLOG
Connect as sysdba

127
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Les principales variables d’environnement sont:

 ORACLE_HOME = définie l’emplacement du noyau Oracle


C:\oracle\product\11.2.0\dbhome_1
 ORACLE_BASE = définie l’emplacement des bases oracle C:\app\oracle
 ORACLE_SID = désigne le nom de l’instance sur laquelle on veut se positionner
 NLS_LANG = langage du système d’exploitation
FRENCH_FRANCE.WE8MSWIN1252

Démarrage et arrêt d’une base de données


Une instance peut être démarrée avec 3 niveaux successifs de disponibilité de
la base :

OPEN :
- Les utilisateurs peuvent se connecter
- Création de tablespaces, de tables et d’index. Tous les fichiers de la base sont
ouverts

MOUNT :
- Administrer et modifier la structure de la base (ajout de fichiers)
- sauvegarde et restaurations. Fichiers de contrôle ouverts

NOMOUNT :
- Création de la base de données
- re-créer le fichier de contrôle

Pour rendre une base de données accessible à tous les utilisateurs, il faut
démarrer une instance et ouvrir la base avec cette instance. Il y a trois étapes
dans le processus de démarrage :

 Démarrage de l’instance
 Montage de la base
 Ouverture de la base

Un fichier de paramètres SPFILE est lu lors du démarrage de l’instance. Il


permet de configurer les paramètres de l’instance.

128
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

SQL> startup
Instance ORACLE lancée

Total System Global Area 135338868 bytes

Fixed Size 453492 bytes

Variable Size 117440512 bytes

Database Buffers 16777216 bytes

Redo Buffers
Base de données montée. 667648 bytes
Base de données ouverte.

SQL>

De même il y a trois étapes dans le processus d’arrêt :

Fermeture de la base
Démontage de la base
Arrêt de l’instance

SQL> shutdown immediate


Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

Démarrage de la Base de données


Dans SQL*PLUS, la commande Startup permet de démarrer une instance et
de lui associer une base de données avec le niveau de disponibilité souhaité.

STARTUP [NOMOUNT | MOUNT [nom_base] | OPEN [nom_base]]


[RESTRICT] [PFILE=nom_fichier];
NOMOUNT | MOUNT | OPEN : niveau de disponibilité souhaité
nom_base : nom de la base à monter ou à ouvrir
RESTRICT : restreint l’accès à la base aux utilisateurs ayant le privilège
RESTRICTED SESSION
PFILE : nom du fichier de paramètres à utiliser ;

129
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

S’assurer que l’instance souhaitée est bien désignée par la variable


d’environnement ORACLE_SID, et se connecter en SYSDBA.

Tapez la commande Startup avec les options souhaitées, puis démarrer une
instance sans associer de base (en vue d’en créer une nouvelle ou de recréer le
fichier de contrôle).

Démarrer une instance à l’état MOUNT pour effectuer certaines tâches


d’administration :
SQL> startup mount
ORACLE instance started.
Total System Global Area 159383552 bytes

Fixed Size 788204 bytes

Variable Size 141293844 bytes

Database Buffers 16777216 bytes


Redo Buffers
524288 bytes
Database mounted.

Démarrer avec un fichier de paramètres caractère (PFILE)


SQL> startup pfile='D:\cours_admin10G\inittahiti02.ora';
ORACLE instance started.
Total System Global Area 159383552 bytes

Fixed Size 788204 bytes

Variable Size 141293844 bytes

Database Buffers 16777216 bytes

Redo Buffers
Database mounted. 524288 bytes
Database opened.

130
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Modifier la disponibilité de la base de données


Si l’instance a été démarrée dans un niveau intermédiaire (NOMOUNT ou
MOUNT), il est possible de la faire passer au niveau supérieur grâce à la
commande SQL ALTER DATABASE.

NOMOUNT----- MOUNT

ALTER DATABASE MOUNT;

MOUNT--------OPEN

ALTER DATABASE OPEN;

La commande SQL ALTER DATABASE ne permet pas de revenir au niveau


inférieur. Pour cela vous devez arrêter la base et la redémarrer au niveau
souhaité.

SQL> shutdown immediate


Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 159383552 bytes

Fixed Size 788204 bytes

Variable Size 141293844 bytes

Database Buffers 16777216 bytes


Redo Buffers
524288 bytes
SQL>

SQL> alter database mount;


Base de données modifiée.
SQL> alter database open;
Base de données modifiée.

Pour forcer la base de données à redémarrer vous pouvez utiliser la


commande : STARTUP FORCE ;

131
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

SQL> startup force


ORACLE instance started.
Total System Global Area 159383552 bytes
Fixed Size 788204 bytes
Variable Size 141293844 bytes
Database Buffers 16777216 bytes
Redo Buffers
Database mounted.
524288 bytes
Database opened.
SQL>
Arrêter la base de données
Dans SQL*PLUS, la commande SHUTDOWN permet d’arrêter l’instance et la
base de données.

SHUTDOWN [NORMAL | IMMEDIATE | TRANSACTIONNAL | ABORT] ;

NORMAL : Oracle attend que tous les utilisateurs soient déconnectés (pas de
nouvelle connexion autorisée) puis ferme proprement la base.
IMMEDIATE : Oracle déconnecte tous les utilisateurs (en effectuant un
ROLLBACK des éventuelles transactions en cours) puis ferme proprement la
base.

TRANSACTIONNAL : Oracle attend que toutes les transactions en cours se


terminent avant de déconnecter les utilisateurs (pas de nouvelle transaction
autorisée) puis ferme et démonte proprement la base.

ABORT : Oracle déconnecte tous les utilisateurs (sans effectuer de


ROLLBACK des éventuelles transactions en cours) puis ferme brutalement la
base ; une restauration de l’instance sera nécessaire lors du prochain
démarrage.

Lancer l’outil d’administration et se connecter AS SYSDBA, en s’assurant que


l’instance souhaitée est correctement désignée.

SQL> connect /@ESSONO as sysdba


Connecté.
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
ESSONO

132
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Ouverture de la base de données en mode RESTRICT


Pour ouvrir la base en mode restreint, il suffit d’ouvrir la base en précisant la
clause : ENABLE RESTRICTED SESSION.

Lorsque vous avez placé l’instance en mode restricted session vous pouvez
effectuer des tâches d’administration en étant seul connecté.

Pour ouvrir la base en mode RESTRICT il faut avoir les privilèges system :
CREATE SESSION et RESTRICTED SESSION.

Pour ouvrir l’instance en mode restrict, exécutez la commande :

STARTUP RESTRICT ;

SQL> startup restrict


ORACLE instance started.
Total System Global
159383552 bytes
Area
Fixed Size 788204 bytes
Variable Size 141293844 bytes
Database Buffers 16777216 bytes
Redo Buffers
Database mounted. 524288 bytes
Database opened.
SQL> select instance_name, logins from v$instance;

INSTANCE_NAME LOGINS
ESSONO RESTRICTED

Puis pour repasser l’instance en mode normal, exécutez la commande :

ALTER SYSTEM DISABLE RESTRICTED SESSION;

SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;


System altered.
SQL> select instance_name, logins from v$instance;
INSTANCE_NAME LOGINS
ESSONO ALLOWED

133
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Mettre l’instance dans un état QUIESCE


Oracle permet de mettre l’instance dans un état QUIESCE où seule l’activité
de SYS et SYSTEM est autorisée pour réaliser des manipulations sur la base de
données en évitant les accès concurrents. Les autres utilisateurs ne peuvent
pas travailler même s’ils possèdent un rôle DBA ou le privilège SYSDBA.

Oracle laisse les sessions actives (reqêtes en cours) se terminer avant de passer
l’instance dans l’Etat QUIESCE (ce qui peut être long). Pendant de ce temps,
aucune session inactive ne peut devenir active (pas de nouvelle requête
autorisée). Pendant que l’instance est en état QUIESCE, les demandes de
connexion ou les nouvelles requêtes sont mises en attente sans message (la
session paraît alors bloquée).La colonne ACTIVE_STATE de la vue
V$INSTANCE donne l’état de la base de données :

 NORMAL = l’instance autorise tous les utilisateurs à travailler.


 QUIESCING = l’instance est en train de passer dans l’état QUIESCE,
elle attend que les sessions actives deviennent inactives.
 QUIESCED = l’instance est dans l’état QUIESCE

Nécessite que la fonctionnalité de gestion des plans de ressource soit activée


(Database Ressource Manager). Positionner le paramètre
RESOURCE_MANAGER_PLAN = nom du plan (INTERNAL_PLAN qui
est le plan par défaut).

SQL> alter system quiesce restricted;


alter system quiesce restricted

ERREUR Ó la ligne 1 :
ORA-25507: le gestionnaire de ressources n'a pas été continuellement actif

-- Mettre l’instance dans l’état QUIESCE


ALTER SYSTEM QUIESCE RESTRICTED;
-- Arrêt de l’état QUIESCE
ALTER SYSTEM UNQUIESCE;

134
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Vues du dictionnaire de données


Au niveau du dictionnaire de données, pour trouver les informations sur les
bases identifiées sur un server, consulter les vues suivantes qui sont accessibles
par un utilisateur de type administrateur.

• V$INSTANCE : informations sur l’instance


• V$DATABASE : informations sur la base

• V$SGA : informations sur la SGA


• V$PARAMETER : informations sur les paramètres actifs
• V$VERSION : informations sur la version d’Oracle
• V$OPTION : informations sur les options disponibles
• DATABASE_PROPERTIES : informations sur les propriétés par défaut de
la base de données
• DATABASE_SUMMARY : informations de la base sur les service déclarés,
le nom du serveur, et le characterset.
• NLS_DATABASE_PARAMETERS : paramètre NLS de la base

Gestion de l’instance
Au démarrage l’instance lit un fichier de paramètres binaire qui contient les
paramètres d’initialisation. Ce fichier est géré par le DBA. Il s’agit d’une sorte
de référentiel centralisé des paramètres d’initialisation de l’instance au
démarrage de la base de données.

Quelques règles sur l’écriture des paramètres :

 Les paramètres sont spécifiés sous la forme nom_paramètre = vale


 Tous les paramètres sont optionnels et ont une valeur par défaut
 Des commentaires peuvent être inclus et commencent par le caractère #
 La valeur peut être spécifiée entre des guillemets doubles si elle contient
des caractères spéciaux (égal, espace, …)
 Les valeurs multiples sont spécifiées entre parenthèses, séparées par des
virgules

Les modifications de paramètres se font avec la commande ALTER SYSTEM


pendant le fonctionnement de l’instance. Ces paramètres sont pris en compte
directement en mémoire ou uniquement dans le SPFILE.

135
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Dans ce dernier cas il faut arrêter puis redémarrer pour que la modification
soit prise en compte par l’instance.

Créer le fichier de paramètres SPFILE


Un fichier de paramètres serveur peut être exporté au format Texte par l’ordre
SQL :

CREATE SPFILE [ = 'nom_pfile' ] FROM PFILE [ = 'nom_spfile' ];

Cette action nécessite une connexion SYSDBA ou SYSOPER.

-- se connecter as sysdba
SQL> connect /@ESSONO as sysdba
Connecté.
-- créer le fichier de paramètres SPFILE
SQL> create spfile from pfile='d:\tahiti\pfile\inittahiti.ora';
Fichier créé.

Dans l’optique de l’utilisation d’un fichier de paramètres commun à plusieurs


instances, ceux-ci peuvent être spécifiés sous la forme :
« instance.paramètre », le symbole * désigne n’importe quelle instance.

(*_SHARDE_POOL_SIZE)

C’est cette syntaxe qui est utilisée lors de l’export d’un fichier SPFILE.

Exporter un fichier de paramètres server SPFILE


Le fichier généré peut être utilisé à des fins de simples consultations ou de
modifications, pour créer le SPFILE à partir du PFILE (init<SID>.ora) modifié
ou pour effectuer des démarrages particuliers.

CREATE PFILE [ = 'nom_pfile' ] FROM SPFILE [ = 'nom_spfile' ];

-- Exporter le fichier de paramètres SPFILE


SQL> create pfile from spfile ;
File created.

Le fichier INITorcl.ora est généré dans le répertoire


ORACLE_HOME\Database sous windows et dans ORACLE_HOME\Dbs
sous Unix.

136
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

INITorcl.ORA

orcl.__db_cache_size=96468992
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='C:\app\oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=146800640
orcl.__sga_target=281018368
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=163577856
orcl.__streams_pool_size=4194304
*.audit_file_dest='C:\app\oracle\admin\orcl\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='C:\app\oracle\oradata\orcl\control01.ctl',
'C:\app\oracle\flash_recovery_area\orcl\control02.ctl'
*.db_block_size=8192
*.db_domain='26.1.15'
*.db_name='orcl'
*.db_recovery_file_dest='C:\app\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='C:\app\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.local_listener='LISTENER_ORCL'
*.memory_target=425721856
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'

Les colonnes ISSES_Modifiable et ISSYS_Modifiable de la vue


V$PARAMETER donnent des informations sur le type de paramètre.

 La colonne ISSES_MODIFIABLE vaut TRUE ou FALSE selon que le


paramètre est modifiable ou non au niveau de la session.
 La colonne ISSYS_MODIFIABLE vaut FALSE si le paramètre n’est pas
modifiable au niveau du système, et DEFERRED ou IMMEDIATE selon
qu’il est modifiable en différé ou immédiatement.

137
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

SQL> set pagesize 100


SQL> col name format A16
SQL> col value format A40
SQL> select name, value, isses_modifiable, issys_modifiable
2 from v$parameter
3 where name='control_files'
4 or name='shared_pool_size'
5 or name='sort_area_size'
6 order by name;
NAME VALUE ISSES ISSYS_MOD
D:\Oracle\oradata\TAHITI\control01.ctl, FALSE FALSE
control_files D:\Oracle\oradata\essono\control02.ctl
shared_pool_size 16777216 FALSE IMMEDIATE
sort_area_size 65536 TRUE DEFERRED

Modifier les paramètres de l’instance ou du SPFILE


L’ordre SQL ALTER SYSTEM permet de modifier dynamiquement la valeur
des paramètres d’initialisation.

ALTER SYSTEM SET paramètre = valeur […] [ COMMENT = 'texte' ]


[ DEFERRED ] [ SCOPE = MEMORY | SPFILE | BOTH ];

- Paramètre : nom du paramètre


- Valeur : valeur attribuée au paramètre
- « COMMENT = 'texte' » : commentaire associé à la modification du
paramètre. Inséré dans le
fichier de paramètres serveur si ce dernier est la cible de la modification (voir
la clause SCOPE).
- DEFERRED : si présent, indique que la modification ne concerne que les
futures sessions, pas
celles actuellement connectées. N’a de sens que si la mémoire est la cible de la
modification (voir
la clause SCOPE). Peut être obligatoire pour certains paramètres.
- SCOPE : définit la cible de la modification.
- MEMORY : la mémoire seulement
- SPFILE : le fichier de paramètres serveur seulement
- BOTH : les deux

138
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

-- Modification d'un paramètre uniquement en mémoire


SQL> SELECT value FROM v$parameter WHERE name = 'shared_pool_size';
VALUE
----------------------------------------
167772168
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE = 80M
2 SCOPE = memory;
Système modifié.

Les paramètres dans le dictionnaire de données


Plusieurs vues du dictionnaire permettent de visualiser les paramètres.

• V$PARAMETER = valeur actuelle des paramètres.

• V$PARAMETER2 = identique à V$PARAMETER mais avec un affichage sur


plusieurs lignes des paramètres qui ont une liste de valeurs (comme le
paramètre CONTROL_FILES par exemple).

• V$SPPARAMETER = contenu actuel du fichier de paramètres serveur actif.


(le contenu de la vue est vide si l’instance n’utilise pas de fichier de paramètres
serveur). Donne la valeur du paramètre situé dans le SPFILE.

• SHOW parameter SGA : affiche tous les paramètres contenant le mot SGA

Créer une base de données


La naissance d’une base de données oracle se fait lors de sa conception. Toute
erreur à ce niveau verra la base de données affligée par des dégradations de
performances importantes. Le processus complet de création d’une nouvelle
base pour une application comporte les grandes étapes suivantes.

 Conception du modèle conceptuel de données (MCD)


 Conception du modèle logique puis physique de données (MLD et MPD)
 Création de la base proprement dite (présenté dans ce chapitre)

Les différentes étapes de création d’une base de données sont :

Créer les répertoires sur les disques


Préparer un nouveau fichier de paramètres init<SID>.ora
Créer un fichier de paramètres serveur à partir du fichier init<SID>.ora
Créer et démarrer une instance : positionner ORACLE_SID
Sous Windows uniquement, créer le service associé à l’instance en utilisant

139
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

l’outil ORADIM (qui gère les services rattachés aux instance des bases oracle)
Démarrer l’instance en état NOMOUNT
Créer la base en utilisant l’outil DBCA ou en exécutant les scripts de création
de la base de données
générés par l’outil DBCA
Remplir la base de données
- Création des structures de stockage adaptées
- Création du compte Oracle qui va contenir les objets de l’application
- Création des objets de l’application dans ce compte Oracle
- Création des utilisateurs finaux de l’application
- Sauvegarde de la base de données

A partir de la version 10g, il faut utiliser DBCA pour créer une Base de
données.

Présentation du script de création :


set verify off

ACCEPT sysPassword CHAR PROMPT 'Enter new password for SYS: ' HIDE
ACCEPT systemPassword CHAR PROMPT 'Enter new password for SYSTEM: ' HIDE
ACCEPT sysmanPassword CHAR PROMPT 'Enter new password for SYSMAN: ' HIDE
ACCEPT dbsnmpPassword CHAR PROMPT 'Enter new password for DBSNMP: ' HIDE
host C:\app\oracle\product\11.2.0\dbhome_1\bin\orapwd.exe

file=C:\app\oracle\product\11.2.0\dbhome_1\database\PWDtahiti.ora force=y

OLD_UMASK=`umask`
umask 0027
mkdir C:\app\oracle\admin\tahiti\dpdump
mkdir C:\app\oracle\admin\tahiti\pfile
mkdir C:\app\oracle\cfgtoollogs\dbca\tahiti
mkdir C:\app\oracle\flash_recovery_area
mkdir C:\app\oracle\flash_recovery_area\tahiti
mkdir C:\app\oracle\oradata\tahiti
mkdir C:\app\oracle\product\11.2.0\dbhome_1\database
umask ${OLD_UMASK}
set ORACLE_SID=tahiti
set PATH=%ORACLE_HOME%\bin;%PATH%
C:\app\oracle\product\11.2.0\dbhome_1\bin\oradim.exe -new -sid TAHITI -startmode
manual -spfile
C:\app\oracle\product\11.2.0\dbhome_1\bin\oradim.exe -edit -sid TAHITI -startmode auto
-srvcstart system
C:\app\oracle\product\11.2.0\dbhome_1\bin\sqlplus /nolog
@C:\app\oracle\admin\tahiti\scripts\tahiti.sql

140
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Creation de la base

SET VERIFY OFF


connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool C:\app\oracle\admin\tahiti\scripts\CreateDB.log append
startup nomount pfile="C:\app\oracle\admin\tahiti\scripts\init.ora";
CREATE DATABASE "tahiti"
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
USER SYS IDENTIFIED BY "&&sysPassword"
USER SYSTEM IDENTIFIED BY "&&systemPassword"
DATAFILE 'C:\app\oracle\oradata\tahiti\system01.dbf' SIZE 700M REUSE
AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE 'C:\app\oracle\oradata\tahiti\sysaux01.dbf' SIZE 600M REUSE
AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE
'C:\app\oracle\oradata\tahiti\temp01.dbf' SIZE 20M REUSE
AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE
'C:\app\oracle\oradata\tahiti\undotbs01.dbf' SIZE 200M REUSE
AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
LOGFILE
GROUP 1 ('C:\app\oracle\oradata\tahiti\redo01.log') SIZE 51200K,
GROUP 2 ('C:\app\oracle\oradata\tahiti\redo02.log') SIZE 51200K,
GROUP 3 ('C:\app\oracle\oradata\tahiti\redo03.log') SIZE 51200K
;
spool off
creation du tablespace USERS
SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool C:\app\oracle\admin\tahiti\scripts\CreateDBFiles.log append
CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE

'C:\app\oracle\oradata\tahiti\users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K


MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE
MANAGEMENT
ALTER DATABASE DEFAULT TABLESPACE "USERS";
spool off
AUTO;

141
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

creation du dictionnaire de données

SET VERIFY OFF


connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool C:\app\oracle\admin\tahiti\scripts\CreateDBCatalog.log append
@C:\app\oracle\product\11.2.0\dbhome_1\rdbms\admin\catalog.sql;
@C:\app\oracle\product\11.2.0\dbhome_1\rdbms\admin\catblock.sql;
@C:\app\oracle\product\11.2.0\dbhome_1\rdbms\admin\catproc.sql;
@C:\app\oracle\product\11.2.0\dbhome_1\rdbms\admin\catoctk.sql;
@C:\app\oracle\product\11.2.0\dbhome_1\rdbms\admin\owminst.plb;
connect "SYSTEM"/"&&systemPassword"
@C:\app\oracle\product\11.2.0\dbhome_1\sqlplus\admin\pupbld.sql;
connect "SYSTEM"/"&&systemPassword"
set echo on
spool C:\app\oracle\admin\tahiti\scripts\sqlPlusHelp.log append
@C:\app\oracle\product\11.2.0\dbhome_1\sqlplus\admin\help\hlpbld.sql helpus.sql;
spool off

L’outil DBCA

142
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Valeurs des paramètres


Les paramètres utilisés dans le SPFILE sont modifiables :
DB_NAME
Nom de la base (jusqu’à 8 caractères)
Généralement égal au nom de l’instance (ORACLE_SID)
DB_DOMAIN
Localisation logique de la base sur le réseau (jusqu’à 128 caractères)
Permet à Oracle de construire le nom global de la base =
DB_NAME.DB_DOMAIN
Important si la base appartient à un système distribué (ou est susceptible de
l’être)
Valeur par défaut : WORLD
DB_DOMAIN = PARIS.ORA.FR
CONTROL_FILES
Emplacement des fichiers de contrôle de la base
En spécifier au minimum 2, si possible sur des disques différents (dans l’idéal,
un par disque)
CONTROL_FILES =
C:\ORACLE\PRODUCT\10.1.0\ORADATA\TAHITI\CONTROL01.CTL,
D:\ORACLE\PRODUCT\10.1.0\ORADATA\TAHITI\CONTROL02.CTL

PROCESSES
Permet de limiter le nombre de processus simultanés sur le serveur.

143
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Pour connaître le nombre de processus d’arrière plan utilisez la vue


V$BGPROCESS.
DB_BLOCK_SIZE
Taille en octets d’un bloc de données (compris entre 2 ko et 32 ko)
Doit être un multiple de la taille de bloc du système d’exploitation
Ne peut pas être modifié ultérieurement sans recréer la base
DB_BLOCK_SIZE = 8192
MEMORY_TARGET
Apparu en version 11, si ce paramètre a une valeur différente de zéro, la gestion
automatique de la
mémoire est activée. Dans ce cas les paramètres SGA_TARGET et
PGA_AGREGATE sont dépréciés.
Oracle aura une réserve de mémoire vive en cas de besoin.
MEMORY_MAX_SIZE
Apparu en version 11, ce paramètre délimite la taille totale de la SGA et de la
PGA utilisée par
l’instance sur le serveur. Il doit être adapté à MEMORY_TARGET.
COMPATIBLE
Paramètre de compatibilité, prend la valeur 11.2.0.0 par défaut.
compatible = 11.2.0.0
CLUSTER_DATABASE_INSTANCES = 1
Description : nombre d'instances actuellement configurées comme éléments de
la base de données
de cluster. Ce paramètre permet de définir la taille des structures SGA, qui
dépend du nombre
d'instances configurées. L'attribution d'une valeur appropriée à ce paramètre
optimisera l'utilisation de
la mémoire SGA. Plusieurs paramètres sont calculés via ce nombre.

Plage de valeurs : toute valeur non nulle


Valeur par défaut : 1
CLUSTER_DATABASE = FALSE
Description : paramètrer CLUSTER_DATABASE sur TRUE pour activer
l'option Real Application
Clusters.
Plage de valeurs : TRUE | FALSE
Valeur par défaut : FALSE
UNDO_TABLESPACE
Permet de spécifier le nom du tablespace contenant les segments d’annulation.
Si le nom du tablespace spécifié ne correspond pas au nom du tablespace

144
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

UNDO de la base une


erreur apparaîtra dans le fichier des alertes.
Valeur par défaut : chaque base de données contient 0 ou plusieurs espaces
disque logiques
d'annulation. En mode SMU, un seul espace disque logique de ce type est
affecté à chaque instance
ORACLE.
UNDO_TABLESPACE = UNDOTBS
AUDIT_FILE_DEST =
{ORACLE_BASE}\ADMIN\{DB_UNIQUE_NAME}\ADUMP
Description : chaque connexion SYSDBA ou INTERNAL à la base de données
génère un fichier
d'audit dans ce répertoire (UNIX uniquement).
Plage de valeurs : tout nom de répertoire valide
Valeur par défaut : ORACLE_HOME/rdbms/audit
AUDIT_TRAIL = DB
Description : active ou désactive l'option d'audit de la base de données. Les
enregistrements d'audit
sont écrits dans la table SYS.AUD$ lorsque le paramètre a la valeur TRUE ou
DB, ou dans un fichier
du système d'exploitation lorsque le paramètre a la valeur OS.
Plage de valeurs : NONE | FALSE | DB | TRUE | OS
Valeur par défaut : NONE
CORE_DUMP_DEST = ?\RDBMS\TRACE
Description : nom de répertoire, indiquant l'emplacement de vidage de la
mémoire (sous UNIX).
Plage de valeurs : tout nom de répertoire valide
Valeur par défaut : ORACLE_HOME/dbs
DB_RECOVERY_FILE_DEST
Emplacement de la zone de récupération rapide (flash recovery area). Si ce
paramètre est spécifié, il
faut spécifier le paramètre DB_RECOVERY_FILE_DEST_SIZE .
DB_RECOVERY_FILE_DEST = d:\oracle\Flash_recovery_area
DB_RECOVERY_FILE_DEST_SIZE
Taille maximum autorisée des fichiers stockés dans la zone de récupération
rapide, définie en octets,
Ko (K), Mo (M) ou en Go (G).
DB_RECOVERY_FILE_DEST_SIZE = 30G

145
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

REMOTE_LOGIN_PASSWORDFILE
A positionner selon la stratégie adoptée pour l’identification SYSDBA
NONE = pas de fichier de mots de passe – identification par l’OS
EXCLUSIVE = utilisation d’un fichier de mots de passe dédié à une base
SHARED = utilisation d’un fichier de mots de passe partagé entre plusieurs
bases
REMOTE_LOGIN_PASSWORDFILE = NONE
OPEN_CURSOR
Nombre maximum de curseurs ouverts en simultané. Compter 1 pour chaque
session ouverte en
simultanée et un pour chaque utilisateur interne à Oracle comme SYSMAN ou
DBSNMP. .
Ouvrir un grand nombre de curseurs évite une erreur de dépassement et n’a
aucune incidence sur la
base.
OPEN_CURSOR = 500
CURSOR_SHARING = EXACT
Description : ce paramètre contrôle les instructions SQL qui peuvent partager
le même curseur.
Plage de valeurs :
FORCE : oblige les instructions ne différant que par certains littéraux à
partager un curseur, à
moins que les littéraux ne modifient le sens de l'instruction.
EXACT : seules les instructions SQL identiques partagent un curseur.
Valeur par défaut : EXACT
STATISTICS_LEVEL
Niveau de collecte des statistiques sur la base de données et le système utilisés.
Valeurs possibles : BASIC, TYPICAL (par défaut), ALL
BASIC désactive la gestion automatique des statistiques
TYPICAL permet de bénéficier des fonctionnalités de la gestion automatique
de la version 10g
ALL collecte d’avantage de statistiques mais a un impact sur les performances
NLS_LANGUAGE
Langage par défaut de l’instance, utilisé pour les messages, la date et l’heure.
La valeur par défaut est
dérivée du paramètre NLS_LANG.
NLS_LANGUAGE = french
NLS_TERRITORY
Territoire par défaut de l’instance, utilisé pour la numérotation des jours et des
semaines. Détermine

146
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

également la valeur par défaut des formats de date, des séparateurs


numériques et des symboles
monétaires.
NLS_TERRITORY = France

Vues du dictionnaire de données


• V$INSTANCE : informations sur l’instance
• V$DATABASE : informations sur la base de données
• V$VERSION : informations sur la version Oracle utilisée par la base de données
• DATABASE_PROPERTIES : informations sur les propriétés par défaut de la
base de données

Automatiser le démarrage et l’arrêt de la base de données

Automatiser le démarrage et l’arrêt d’une base de données oracle dépend


de la plate forme utilisée :

Sous Unix
Dans le fichier /etc/ORATAB, mettre une entrée pour chaque instance

<ORACLE_SID>:<ORACLE_HOME>:{Y|N}
ESSONO:/u01/app/oracle/product/10.1.0.3.:Y

Au démarrage à l’arrêt, le système appelle les scripts dbstart et dbshut qui


lisent le fichier oratab pou identifier les bases à démarrer ou à arrêter. Ces
scripts peuvent éventuellement être appelés manuellement au démarrage et à
l’arrêt d’une base configurée à Y dans oratab.

Sous Windows

 Mettre le service (OracleService<SID>) associé à l’instance en


démarrage automatique.
 S’assurer que dans la base de registre (HKEY_LOCAL_MACHINE\
SOFTWARE\ORACLE\HOMEx), ORA_<SID>_AUTOSTART est à
TRUE
 ORA_<SID>_PFILE chemin + nom du fichier de paramètres texte
standard, vide ou inexistant pour un fichier de paramètres serveur. Pour
démarrer avec un autre fichier de paramètres serveur, utilisez la
technique du fichier de paramètres texte contenant un paramètre
SPFILE

147
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Si le paramètre ORA_<SID>_PFILE contient une valeur erronée,


l’instance ne redémarre pas.
 Si le paramètre ORA_<SID>_PFILE est vide ou n’existe pas, la séquence
de recherche d’un fichier de paramètres texte ou serveur s’effectue en
suivant la séquence du startup. spfile<SID>.ora spfile.ora (!)
init<SID>.ora
 S’assurer que dans la base de registre : HKEY_LOCAL_MACHINE\
SOFTWARE\ORACLE\HOMEx, ORA_<SID>_SHUTDOWN est à
TRUE et ajuster éventuellement ORA_<SID>_SHUTDOWNTYPE et
ORA_<SID>_SHUTDOWN_TIMEOUT

Accéder à une base distante


Oracle net permet à des produits situés sur des machines différentes de
communiquer. Les fonctions essentielles d’ Oracle net sont :

 Transférer des données entre les deux machines


 Établir des sessions de communication réseau entre deux machines
Client Serveur
Serveur Serveur

Oracle Net a pour objectif de rendre le réseau « transparent » pour les


applications. Oracle Net doit être installé sur chaque machine du réseau.

Côté serveur :

Pour permettre à un client de se connecter à une base de données distante, il


faut d’abord configurer le Listener (serveur). Le Listener se matérialise par un
service (Oracle<NomHome>TNSListener) sur plate-forme windows ou par un
processus (tnslsnr) sur plate-forme Unix. Il est configuré par le fichier
listener.ora.

148
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le Listener s’administre grâce à l’outil LSNRCTL.

C:\>LSNRCTL
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 13-AO•T -
2006 02: 26:41
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Bienvenue à LSNRCTL, tapez "aide" pour plus d'informations.
LSNRCTL>

LSNRCTL permet notamment d’arrêter et de démarrer le LISTENER.

En cas de problème de connexions à partir d’un poste client, vérifier que le


Listener est bien lancé (ne pas hésiter à le redémarrer). La configuration côté
serveur consiste à configurer le Listener, c'est-à-dire à indiquer comment et
pour quelles bases il écoute. Cette configuration peut se faire en modifiant
directement le fichier Listener.ora ou en utilisant l’assistant Oracle Net.

LISTENER.ORA

# listener.ora Network Configuration File:


C:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = TELLORA01)(PORT = 1521))
)
)

Les principales commandes attachées au LISTENER (LSNRCTL) sont :

 Start = démarrer le listener


 Stop = arrêter le listener
 Status = obtenir le statut du listener
 Reload = réinitialiser le listener

149
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

 Exit = sortir de lsnrctl


 Save_config = crée une sauvegarde du fichier listener.ora puis met à
jour le fichier avec les paramètres modifiés à l’aide de lsnrctl.
 Services = affiche les services disponibles ainsi que l’historique de
connexion.
 Help = affiche une liste d’options de commande de l’utilitaire lsnrctl.
 Quit = quitter l’utilitaire et revenir à l’invite du système d’exploitation.
 Version = affiche des informations de version sur le listener.
 Show = affiche les valeurs courantes des paramètres.
 Set password mot_de_passe = permet de se connecter au listener
via un mot de passe.

Pour vérifier l’exécution du Listener sous le système d’exploitation, vous


devez exécuter la commande suivante :
Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrateur>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.1.0.3.0 - Production on 23-MARS -2005
10:48:46
Copyright (c) 1991, 2004, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 32-bit Windows: Version 10.1.0.3.0 – Production

Start Date 23-MARS -2005 10:48:26


Uptime 0 days 0 hr. 0 min. 24 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File D:\oracle\product\10.1.0\Db_1\network\admin\listener.ora
Listener Log File D:\oracle\product\10.1.0\Db_1\network\log\listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROCipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ATTOUCHE)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

150
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le Listener peut écouter à plusieures emplacements (protocoles différents,


ou variantes du même protocole par exemple 2 ports en TCP/IP.

Les bases pour lesquelles le Listener écoute sont définies par l’identifiant de
l’instance (<SID>), le nom global de la base de données et le répertoire
d’Oracle (Oracle_Home). Le Listener peut écouter pour plusieurs bases de
données et éventuellement pour des versions d’Oracle différentes. Pour que
des postes distants puissent se connecter à la base il faut que le Listener soit
lancé. Le listener est utilisé à la première connexion d’un utilisateur. Après
la connexion, un arrêt et un redémarrage du Listener ne déconnecte pas les
utilisateurs déjà connectés. Lors d’une modification du Listener il faut
arrêter puis redémarrer celui-ci afin qu’elles soient prises en compte.

Côté client :
La configuration côté client se fait en modifiant le fichier Tnsname.ora, et en
lui ajoutant l’accès à la nouvelle instance.

Il se trouve dans le répertoire : D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN

# tnsnames.ora Network Configuration File:


C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
TAHITI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = TELLORA01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = tahiti)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

151
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Le fichier tnsname.ora ne contient aucune information relative au poste client,


il est donc possible d’en créer un et de le diffuser sur d’autres postes.

EZCONNECT
En version Oracle 10g, vous pouvez vous connecter sans
Tnsname.ora grâce à EZCONNECT. Il suffit de configurer le
fichier SQLNET.Ora.
C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\sqlnet.ora

# sqlnet.ora Network Configuration File:


C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

connect USER/MotPasse@//[host]:[port]/[service_name]

se connecter en tapant la commande :

Sqlplus /nolog
--connexion traditionnelle via le tnsnames
SQL> connect system/ESSONO@ESSONO
Connecté.
SQL>
C:\Documents and Settings\ATTOUCHE Clotilde>hostname TELLORA01

--dans SQLPLUS
--connexion via ezconnect
SQL> connect system/tahiti@//tellora01:1521/tahiti
Connecté.

152
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

Base distantes et Database Links


Database links est un lien qui permet l’accès à des objets situés dans une base
de données distante. Il est configuré à partir d’Oracle Net et correspond au
<Service> ORACLE NET défini dans le LISTENER.

create [ public ] database link nom_lien


[ connect to nom_user identified by mot_passe]
using chaine_de_connection

Le nom de l’utilisateur de connexion précisé doit être déclaré dans la base de


données distante. La chaîne de connexion est déclarée dans le
« LISTENER.ora » sur une base pour permettre l’accès de celle-ci à la base
distante, et dans le fichier « Tsname.ora ». Le fichier listener.ora permet aux
postes client d’accéder au serveur ORACLE via ORACLE Net. Le fichier
tsname.ora permet au serveur Oracle d’accéder à une autre machine via Oracle
Net.

Exemples

create public database link dli_classe


using 'calan_tcp_LYCE';
drop database link dli_classe ;

create database link dli_clastest.world


connect to admindba identified by oracle
using 'caladan_tcp_LYCE';

Le tsname.ora

scoora_tcp_WG73=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=scoora)
(PORT=1521))
(CONNECT_DATA=(SID=WG73)))
scoora_spx_WG73=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=SPX)
(SERVICE=scoora))
(CONNECT_DATA=(SID=WG73)))

153
LES BASES DE DONNEES ET LE SQL Par ESSONO ZUE Arnauld

hp_ora_tcp_INSTANCE_ORA=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)

154

Vous aimerez peut-être aussi