Vous êtes sur la page 1sur 90

1

UNIVERSITE LIBERTE
COURS DE BASES DE DONNEES APPROFONDIES
PREMIER GRADE INGENIERIE DES SYSTEMES D’INFORMATION
Par Assistant Bertin LOBO MINGA

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


2

PLAN DU COURS
CHAPITRE I : NOTIONS GENERALES SUR LES BASES DE DONNEES
 l’algèbre relationnelle
 le langage SQL de base
 les vues
 les déclencheurs
 la gestion des utilisateurs

CHAPITRE II : LA REPLICATION DES BASES DE DONNEES


 introduction
 principe
 la mise à jour synchrone
 la mise à jour asynchrone
 Réplication avec le SGBD MySQL

CHAPITRE III : LE SYSTEME DE GESTION DE BASES DE DONNEES


ORACLE
 aperçu général d’Oracle
 le langage PL/SQL
 les outils SQL*Plus et SQLDevelopper
 la gestion des utilisateurs
 les privilèges

CHAPITRE IV : INITIATION AUX ENTREPOTS DE DONNEES


 définition d’un entrepôt des données
 définition d’un magasin des données
 la modélisation multidimensionnelle
o concept de fait
o concept de dimension
o modèle en étoile
o modèle en flocon

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


3

o modèle en constellation
o passage du modèle conceptuel au modèle logique multi
dimensionnel
 Le cube OLAP
o présentation
o principales opérations sur un cube OLAP
 réalisation d’un mini projet BI (Business Intelligence)

Objectifs du cours :

L’objectif poursuivi par ce cours est triple. Tout d’abord, donner un


aperçu pratique sur les systèmes de gestion de bases de données et les
particularités des uns par rapport aux autres. Ensuite initier les étudiants
au domaine du système décisionnel en présentant les concepts clés liés aux
entrepôts de données. Enfin, présenter le concept de haute disponibilité d’un
serveur des données.

A la fin de ce cours, Tout étudiant sera capable de :

 utiliser le langage SQL dans ses aspects d’interrogation, manipulation,


définition et de contrôle des données
 expliquer théoriquement l’architecture d’une base de données oracle
 utiliser les outils permettant d’interagir avec une base de données
Oracle
 manipuler une base de données Oracle avec le langage SQL et PL/SQL
 mettre en place un système de réplication des bases de données afin
d’assurer la haute disponibilité
 faire une modélisation multidimensionnelle d’un entrepôt des données
 réaliser au moyen des outils appropriés les étapes d’un projet BI
(Business Intelligence)
 connaitre le principe de la réplication et la réaliser en utilisant un
quelconque système de gestion de bases de données

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


4

CHAPITRE I : RAPPEL PRATIQUE SUR LE LANGAGE SQL

Exercices

1. Sous MySQL Console, créer une base de données et deux tables:

2. insérer trois enregistrement dans la table promotion et cinq dans étudiant

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


5

3. Ecrire une requête SQL qui affiche la phrase suivante : "le chemin à
parcourir es encore long"

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


6

4. IS NULL

5. CONCAT

6. LIMIT

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


7

8. LES OPERATEURS

9. LIKE

10. IN ET NOT IN

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


8

11. LES FONCTIONS

12. LEFT OR RIGHT

REPLACE

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


9

SUBSTR

LOWER ET UPPER

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


10

jointure

Nous voulons donner un code à chaque étudiant. le code de chaque étudiant


est constitué du matricule associé aux deux premiers caractères du nom,
d'un slash, trois derniers caractères du nom, la longueur du nom et du sexe.
Écrire une requête qui affiche le code de chaque étudiant:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


11

Ecrire une requête SQL qui crée une vue de deux alias différents pour
chacun des champs de la table promotion

créer un utilisateur harmonie sur localhost ayant comme mot de passe


harmonie

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


12

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


13

EXERCICE COMPLET SUR LES UTILISATEURS

Microsoft Windows [version 6.2.9200]

(c) 2012 Microsoft Corporation. Tous droits réservés.

C:\Windows\System32>mysql -u harmonie -p

Enter password: ********

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.6.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


14

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database gestionharmonie;


ERROR 1044 (42000): Accès refusé pour l'utilisateur:
'harmonie'@'@localhost'. Base 'gestionharmonie'
mysql> exit
Bye

C:\Windows\System32>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant create on *.* to 'harmonie'@'localhost' identified by 'harmonie';


Query OK, 0 rows affected (0.02 sec)

mysql> exit
Bye

C:\Windows\System32>mysql -u harmonie -p

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


15

Enter password: ********


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database gestionharmonie;


Query OK, 1 row affected (0.03 sec)

mysql> show databases;


+--------------------+
| Database |
+--------------------+
| information_schema |
| gestionarticle |
| gestionharmonie |
| gestionupl |
| gestionupl1 |
| gestionuser |
| mysql |
| performance_schema |
| test |
| testevk |
+--------------------+
10 rows in set (0.04 sec)

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


16

mysql> use gestionarticle;


Database changed
mysql> show tables;
+--------------------------+
| Tables_in_gestionarticle |
+--------------------------+
| article |
+--------------------------+
1 row in set (0.00 sec)

mysql> select * from article;


ERROR 1142 (42000): La commande 'SELECT' est interdite à l'utilisateur:
'harmoni
e'@'@localhost' sur la table 'article'
mysql> exit
Bye

C:\Windows\System32>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


17

mysql> grant select on gestionarticle.* to 'harmonie'@'localhost' identified by


'harmonie';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

C:\Windows\System32>mysql -u harmonie -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its


affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use gestionarticle;


Database changed
mysql> select * from article;
+--------------+-------------+---------------+-----------+
| code_article | designation | prix_unitaire | categorie |
+--------------+-------------+---------------+-----------+
| A1 | BISCUIT | 100 | CAT21 |
| A52 | FAUTEUILS | 2500 | CAT22 |
+--------------+-------------+---------------+-----------+
2 rows in set (0.04 sec)

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


18

mysql>

voici les différents niveaux de privilèges que l'on peut rencontrer :

LES VUES

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


19

LES DECLENCHEURS

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


20

Identificateur OLD

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


21

Utilisateur de NEW

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


22

CHAPITRE II : LA REPLICATION DES BASES DE DONNEES

 introduction
 principe
 la mise à jour synchrone
 la mise à jour asynchrone
 Réplication avec le SGBD MySQL

1. Introduction

Une application de base de données repose sur un modèle client-


serveur. Dans ce modèle, le client se connecte au SGBD pour passer des
ordres. Ces ordres sont de deux natures : lecture (on parle alors de
requêtes) ou mise à jour (on parle alors de transactions). Pour les
transactions il y a une modification des données sur le serveur, mais cela
reste des ordres de courte durée. A l’inverse, dans le cas d’une lecture, il n’y
a pas de modification des données mais les traitements peuvent être longs et
porter sur une grande masse de données. On comprend donc aisément que,
dans le cadre d’un site web par exemple, un nombre important de requêtes
peut surcharger partiellement (ou complètement) le serveur.

Il existe plusieurs solutions pour palier à ce genre de problèmes et, ça tombe


bien, la réplication en est une.
L’objectif principal de la réplication est de faciliter l’accès aux données en en
augmentant la disponibilité. Soit parce que les données sont copiées sur
différents sites permettant de répartir les requêtes, soit parce qu’un site
peut prendre la relève lorsque le serveur principal s’écroule. Une autre
application tout aussi importante est la synchronisation des systèmes
embarqués non connectés en permanence.

Ce qui peut se résumer à l’aide des trois types de scénarii suivants :


 deux serveurs distants sur lesquels les données doivent être
consistantes ;

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


23

 deux serveurs, un comme serveur principal, l’autre comme


serveur de backup à chaud ;
 plusieurs serveurs en cluster utilisés pour de l’équilibrage de
charge et de la tolérance à la panne.
2. principe

Le principe de la réplication, qui met en jeu au minimum deux SGBD, est


assez simple et se déroule en trois temps :

1. La base « maître » reçoit un ordre de mise à jour (INSERT, UPDATE ou


DELETE).
3. Les modifications faites sur les données sont détectées et stockées
(dans une table, un fichier, une queue) en vue de leur propagation.
4. Un processus de réplication prend en charge la propagation des
modifications à faire sur une seconde base dite « esclave ». Il peut bien
entendu y avoir plus d’une base esclave.

Bien entendu il est tout à fait possible de faire de la réplication dans les deux
sens (de l’esclave vers le maître et inversement). On parlera dans ce cas-là de
réplication bidirectionnelle ou symétrique.

Dans le cas contraire la réplication est unidirectionnelle (seulement du


maître vers l’esclave) et on parle de réplication en lecture seule ou
asymétrique. De plus la réplication peut être faite de manière synchrone ou
asynchrone. Dans le premier cas, la résolution des conflits éventuels entre
deux sites intervient avant la validation des transactions ; Dans le second
cas, la résolution est faite dans des transactions séparées. Il est donc
possible d’avoir quatre modèles de réplication :

• Réplication asymétrique (maître/esclave) avec propagation


asynchrone ;
• Réplication asymétrique (maître/esclave) avec propagation
synchrone ;

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


24

• Réplication symétrique ou Peer-to-peer (update everywhere) avec


propagation asynchrone ;
• Réplication symétrique avec propagation synchrone.

3. La mise à jour synchrone

La réplication synchrone est aussi appelée “réplication en temps


réel”. La synchronisation est effectuée en temps réel puisque chaque requête
est déployée sur l’ensemble des bases de données avant la validation
(commit) de la requête sur le serveur où la requête est exécutée. Ce type de
réplication assure un haut degré d’intégrité des données mais requiert
une disponibilité permanente des serveurs et de la bande passante. Ce type
de réplication, fortement dépendant des pannes des systèmes, nécessite de
gérer des transactions multi sites coûteuses en ressources.

La réplication synchrone asymétrique

Une modification sur le site primaire sera propagée aux sites secondaires à
l’aide par exemple d’un trigger sur la table modifiée. La table est modifiée en
temps réel sur les autres sites, ces modifications faisant parties de la
transaction.

La réplication synchrone symétrique

Dans ce cas, il n’y a pas de table maître, mais chaque table possède ses
triggers, déclenchés lors d’une modification. Il est alors nécessaire de définir
des priorités et de gérer les blocages des tables en attendant qu’une
modification soit entièrement propagée. D’autre part, les triggers doivent
différencier les mises à jour issues d’une réplication des mises à jour de
requête directes.

4. La mise à jour asynchrone


La réplication asynchrone (aussi appelée “Store and Forward” pour <<
stocker et propager >>)

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


25

stocke les opérations intervenues sur une base de données dans une queue
locale pour les propager plus tard à l’aide d’un processus de
synchronisation.
Ce type de réplication est plus flexible que la réplication synchrone. Il permet
en effet de définir les intervalles de synchronisation, ce qui permet à un site
de fonctionner même si un site de réplication n’est pas accessible.
L’utilisateur peut ainsi déclarer que la synchronisation sera effectuée la nuit,
à une heure de faible affluence. Si le site distant est victime d’une panne,
l’absence de synchronisation n’empêche pas la consistance de la base
maître. De même une panne de réseau laissera les deux bases, maître et
esclave dans des états de consistance. Les opérations sur les données sont
plus rapides, puisqu’une requête n’est pas immédiatement déployée. Le
trafic sur le réseau est de ce fait plus compact. Par contre, le planning de
réplication est dans ce cas plus complexe, puisqu’il s’agit de gérer les conflits
émanant d’un éventuel accès en écriture sur une base esclave entre deux
mises à jour.

La réplication asynchrone asymétrique


Les mises à jour sont stockées dans une file d’attente et ne seront propagées
que lors d’un déclenchement programmé.
La réplication asynchrone symétrique
Toute modification sur toute table de toute base est stockée dans une file
pour être rejouée ultérieurement. De fortes incohérences des données sont à
craindre.

5. Réplication avec MySQL

Supposons que nous avons deux postes ayant respectivement les


adresses suivantes : 192.168.179.15 et 192.168.179.20. Nous allons
commencer par installer le WAMP sur chacune de ces deux machines. Nous
signalons que nous utilisons la version MySQL 5.6.17 et le système
d’exploitation sur les deux postes. La simulation est faite en utilisant
VMWARE.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


26

Pratique

1. Mise en réseaux de deux machines


2. Installation de wamp serveur sur deux machines
3. installer les additifs
4. ajouter le chemin dans les variables d’envrionnement
5. désactivation du pare-feu
6. création d’un utilisateur ayant tous les privilèges et la possibilité de se
connecter sur les deux machines

Première machine : serveur maitre

Deuxième machine:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


27

Sur la première machine (my.ini)

Sur la deuxième machine

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


28

Tout fermer
Redémarrer les deux wamps
Se connecter sur la première machine avec le nouveau root

Se connecter sur la deuxième machine avec le nouveau root et lancer le


script de réplication

Se déconnecter de deux machines et redémarrer les services de wamp

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


29

Se connecter sur la première machine avec le nouveau root et lancer la


commande affichant le statut du master :

Se connecter sur la deuxième machine avec le nouveau root et lancer la


commande qui affiche le statut de l'esclave:

Démonstration
Créer une base de données sur le maitre et la voir sur l'esclave:
Si rien n'est vu, se reconnecter sur la deuxième machine et relancer la
commande de réplication.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


30

CHAPITRE III : LE SYSTEME DE GESTION DE BASES DE DONNEES


Introduction

Oracle Database est un système de gestion de base de données (SGBD)


fourni par Oracle Corporation. C’est l’un des SGBD les plus populaires au niveau
mondial. Il fonctionne sur un système relationnel et même sur un modèle
relationnel objet depuis la version 8.

Ce système propriétaire a été développé notamment par Larry Ellison, le co-


fondateur de l’entreprise Oracle.

Les versions d’Oracle

Oracle se décline en plusieurs versions

 Oracle Server Standard, une version comprenant les outils les plus courants
de la solution Oracle. Il ne s'agit pas pour autant d'une version bridée...
 Oracle Server Enterprise Edition

Les fonctionnalités d’Oracle

Oracle est un SGBD permettant d'assurer :

 La définition et la manipulation des données


 La cohérence des données
 La confidentialité des données
 L'intégrité des données
 La sauvegarde et la restauration des données
 La gestion des accès concurrents

Les composants d’Oracle

Outre la base de données, la solution Oracle est un véritable environnement


de travail constitué de nombreux logiciels permettant notamment une
administration graphique d'Oracle, de s'interfacer avec des produits divers et
d'assistants de création de bases de données et de configuration de celles-ci.

On peut classer les outils d'Oracle selon diverses catégories :

 Les outils d'administration


 Les outils de développement
 Les outils de communication
 Les outils de génie logiciel
 Les outils d'aide à la décision

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


31

L’architecture générale d’Oracle

L'architecture interne d'Oracle est schématisée de la façon suivante:

Architecture générale d’une instance oracle

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


32

En Général, il existe deux types de processus:

 processus utilisateurs: pour exécuter une application SQL*Plus, Pro*C,...il


fonctionne sur la machine du client. Ildémarre lors de l'appel de l'outil ou de
l'application et se termine lorsque l'utilisateur quitte ou interrompt
l'application. il appelle le serveur Oracle.

 processus Oracle:
o processus serveur: Il fonctionne sur la machine serveur (hôte). suite à
la demande du processus utilisateur, le processus serveur lit les
données des fichiers à l'intérieur du buffer de données. il utilise une
PGA (Program Global Area) exclusive. il envoie les résultats au client.

o processus d'arrière-plan (BACKGROUND) : effectue les tâches bien


définies pour l'ensemble des utilisateurs
 DBWR (Data Base WRiter): Ecrire les blocs modifiés dans le
cache de données sur les disques
 LOGWR (LoGWRiter): Ecrire dans les fichiers Redo Log le
contenu du cache Redo Log
 SMON (System MONitor) : réalise le recovery au moment du
demarrage, efface les segements temporaires et organise les
blocks de données.
 ARCH (ARCHiver) : copie les redo log, quand ils sont pleins,
dans les fichiers d'archive
 LISTENER ou KMNLS : permet d'établir des connexions client
serveurs avec la base de données

La structure physique d’une base Oracle


La structure physique d’une base Oracle est composée d'un ensemble de
fichiers qui constituent le support physique de stockage de données. Il existe trois
types de fichiers:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


33

 les fichiers de données (Data Files): ils sont utilisés pour stocker le
dictionnaire de données et les objets de la base de données. ces fichiers
sont souvent volumineux. les données dans le buffer de données et le
dictionnaire de données et le dictionnaire de cache sont récupérées de ces
fichiers. une base de données contient au moins un fichier de données.

 les fichiers de reprise (Reprise Log File): ils sont utilisés pour stocker les
informations Redo sur le disque afin de garantir la reconstruction des
données en cas de panne. Une base de données requiert au moins deux
fichiers log.

 les fichiers de contrôle (Control Files): ils sont utilisés pour définir la
localisation des composants disque sur le serveur. la localisation de fichiers
de données et les redo logs y apparaissent. Pour cette raison, ils sont
modifiés à chaque ajout ou suppression des fichiers redo logs ou fichiers
de données. Oracle lit les fichiers de contrôle au démarrage de la base de
données. Une base de données requiert au moins un fichier de contrôle.

La taille d'un data file est exprimée en Kilo ou en Méga octets. Elle est attribuée
au moment de la création du fichier, mais peut être modifiée. Le premier fichier de
données créé doit avoir une taille supérieure ou égale à 2Mo.
Il existe aussi d’autres fichiers spéciaux tels que le fichier paramètre et le fichier de
mot de passe. Le premier est utilisé pour définir les caractéristiques d'une instance
Oracle (taille SGA, Bloc Oracle, etc.) c'est le fichier init.ora.
Le second est utilisé pour établir l'authenticité des utilisateurs privilégiés de la base
de données Oracle.
La structure logique d’une base Oracle
Une base de données est composée d'un ensemble d'unités logiques dites
tablespaces. Un tablespace est un espace logique qui contient les objets stockés
dans la base de données comme les tables ou les indexes.
Un tablespace est composé d'au moins un datafile, c'est à dire un fichier de
données qui est physiquement présent sur le serveur à l'endroit stipulé lors de sa
création. Chaque datafile est constitué de segments d'au moins un extent (ou page)
lui-même constitué d'au moins 3 blocs : l'élément le plus petit d'une base de
données.
L'extent n'a aucune signification particulière, c'est juste un groupe de blocs
contigus pouvant accueillir des données,

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


34

Un tablespace permet de regrouper un ensemble d'objets (tables, index,...). Il peut


être utilisé pour regrouper des objets logiques d'une application pour que les
opérations de sauvegarde et de restauration soient efficaces.
Un tablespace peut être attribué par défaut à un utilisateur. Les objets de cet
utilisateur seront stockés dans ce tablespace sauf contre-indication.
Chaque tablespace est constitué d'un ou plusieurs fichiers de données stockées sur
disque. Un fichier ne peut appartenir qu'à un seul Tablespace à la fois. Une fois
un fichier ajouté à un Tablespace, on ne peut plus le retirer ou l'associer à un autre
Tablespace.

Chaquebase de données possède au moins un tablespace appelé "system"


contenant les tables du dictionnaire de données.
Chaque utilisateur possède :

 un tablespace par défaut: qui est celui dans lequel les tables de l'utilisateur
seront créées de façon privilégiée
 un tablespace temporaire: qui est utilisé pour les tris et en cas
d'insuffisance en mémoire centrale

Les segments de données servent à stocker les données des tables utilisateurs et
système. Chaque table a un et un seul segment qui contient toutes les données
de la table créé automatiquement.
Les segments d'index stockent les informations sur les index séparément de
données créés lors de la création d'un index.

Le segment d'amorçage : créé dans le tablespace SYSTEM, contient les définitions


du dictionnaire de donnés.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


35

Les segments temporaires sont utilisés pour le traitement des commandes SQL
nécessitant un espace disque temporaire (order by, group by, distinct, union,
intersect ou minus).

Lorsque la base est chargée, Oracle effectue les opérations suivantes:

 lecture du fichier d’initialisation (le fichier paramètre)


 ouverture du fichier de contrôle
 vérification que les fichiers de données et de reprise qui sont indiqués dans le
fichier de contrôle existent, sans les ouvrir. s'il ne trouve pas l'un des
fichiers, il signale un message d'erreur.

L’ouverture d'une base de données consiste à la rendre accessible à tous les


utilisateurs. Si la base de données avait été fermée en avortant une instance, ou
suite à une panne, il effectue automatiquement un recouvrement (reprise)
Le dictionnaire des données d’Oracle
Le dictionnaire de données d'Oracle est un ensemble de tables et de vues.
Table du dictionnaire :

 enregistrement des informations relatives aux objets de la base


 accessibles et maintenues dynamiquement par le noyau
 accès direct à ces tables fortement déconseillé aux utilisateurs
 contenu souvent crypté pour des raisons de sécurité

Vues du dictionnaire:
 protègent le contenu des tables du dictionnaire tout en rendant accessibles
les informations qu'elles contiennent

Le dictionnaire de données Oracle représente le cœur de la base de données. Il


s'agit d'un ensemble de tables systèmes contenant les informations relatives à
la structure de la base de données:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


36

 Utilisateurs de la base, droits d'accès, rôles, profils


 noms et caractéristiques des objets contenus dans la base : tables, vues,
index, clusters, triggers, packages, contraintes d'intégrité, synomymes,
procédures, fonctions, packages,...
 ressources physiques allouées à la bas (tablespaces, fichiers physiques)
Le dictionnaire est créé au moment de la création de la base de données et est mise
à jour lors de l'utilisation des commandes DDL sql. Si vous créez une
nouvelle table, les données seront automatiquement mises à jour dans la BD.
Vous ne pouvez en aucun cas modifier ce dictionnaire.
On ne peut donc qu'accèder au dictionnaire que pour des consultations (SELECT).
Afin d'en simplifier cette consultation, des vues sont définies sur les tables
du dictionnaire. Il est déconseillé d'accéder à ce dictionnaire directement par
les tables. Il appartient à l'utilisateur SYS, mais l'utilisateur SYSTEM, c'est à
dire l'administrateur de la base, possède des droits de lecture sur des vues
du dictionnaire. Enfin le dictionnaire de données est conservé dans le
tablespace SYSTEM
Les différentes vues

Des nombreuses vues permettent à des utilisateurs d'accéder à certaines parties


du dictionnaire de données. Les vues fournissent à l'administrateur de la base le
meilleur moyen pour obtenir les caractéristiques techniques de celle-ci.
Les vues du dictionnaire de données sont classées par famille et nommées en
fonction de l'appartenance à une de ces familles. Voici la liste de ces familles de
vues:

 les vues USER (dont le nom commence par USER_XXX) donnent des
informations sur tous les objets dont l'utilisateur connecté est propriétaire
(tables, index, vues, procédures, ...)
 les vues ALL (dont le nom commence par ALL_xxx) fournissent des
informations sur les objets pour lesquels l'utilisateur a un droit d'accès, c'est
à dire les objets de la base créés par l'utilisateur ainsi que tous les objets
accessibles par cet utilisateur
 les vues DBA (dont le nom commence par DBA_XXX). ces vues sont réservées
à l'administrateur de la base (DBA), afin de lui fournir des informations
sensibles sur tous les objets de la base de données.
 les vues V$ (dont le nom commence par V$_) sont des vues dynamiques
permettant d'avoir des informations sur l'état courant de l'instance de la base
de données de sont démarrage à son arrêt. Elles permettent par exemple de
connaître les fichiers physiques actuellement utilisés par la base (logs,
rollbasck segments,..)
 chaque xxx est en général remplacé par un nom (en anglais) significatif. Ainsi
USER_TABLES est la vue de toutes mes tables, DBA_SYNONYMS est la vue
de tous les synonymes du système

Etapes de traitement d'une requête (select) sous Oracle

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


37

Il y a trois étapes:

 Analyse
 Exécution
 Récupération

Analyse

Exécution

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


38

Récupération

Une instance est un moyen d'accéder à une base de données Oracle. Elle ouvre une
seule et unique base de données. Elle est identifiée par Oracle_SID au niveau de
l'OS
Le schéma de la structure logique d'une base de données Oracle

CHAPITRE II : LES OUTILS SQL*Plus et SQLDevelopper


L'outil SQL*Plus
Présentation de SQL*Plus

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


39

SQL*Plus est un outil en ligne de commande permettant de se connecter à


une base de données Oracle afin d'y exécuter des ordres SQL ou des procédures
PL/SQL. Dans cette partie du cours, je vous propose de découvrir ses principales
fonctionnalités.

Même s'il est parfois plus confortable d'utiliser un outil graphique, tel que Toad ou
SQL Developer, il faut aussi savoir se contenter de la ligne de commande. Tout
d'abord, parce que nous n'avons pas toujours le choix ! Mais même au-delà, il peut
s'avérer plus simple et plus rapide de lancer une invite SQL*Plus plutôt que
l'artillerie lourde d'un client graphique.

Nous allons donc voir que SQL*Plus permet d'envoyer des commandes SQL et
PL/SQL au SGBDR, mais aussi d'exécuter ses propres commandes internes.
Nous parlerons notamment des scripts et des variables gérés par SQL*Plus. Nous
apprendrons également à manier son buffer et paramétrer l'affichage des résultats
afin de les rendre plus lisibles. Enfin, nous verrons comment exporter les résultats
de nos requêtes dans des fichiers.

Connexion et déconnection à une base de données Oracle

Une base de données permet de stocker de l’information, sous quelque forme que ce
soit. Bien des façons de faire existent, l’important étant que les données soient
stockées de façon structurée selon une norme précise afin de nous permettre de les
consulter, de les mettre à jour ou encore d’en insérer de nouvelles. La base doit
donc être accompagnée d’un logiciel permettant de la gérer, le SGBD. C’est lui qui
va nous permettre d’interroger la base ou encore de gérer la sécurité (les droits
d’accès) et l’intégrité des données.

Reste à savoir comment consulter, modifier ou insérer des données dans la base.
En effet le SGBD ne fait pas tout, il faut bien lui dire quoi faire avec nos données ! Il
nous faut donc être capable de communiquer avec lui, c’est-à-dire lui donner des
ordres (appelés « requêtes ») et recevoir ses réponses. On utilise pour cela un
langage de requête, tel que le SQL.

La plupart du temps, les SGBD fonctionnent sur le modèle « client-serveur » (vous


pouvez en voir une illustration sur la figure ci-dessous). On distingue alors les deux
composantes suivantes :

 le client, qui envoie ses requêtes au serveur ;


 le serveur, dont la tâche est d’attendre les requêtes du client, avant de les
traiter et de lui envoyer une réponse.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


40

Le modèle client-serveur

Ces deux composantes peuvent être installées sur un seul et même ordinateur ou
bien sur deux machines distinctes qui vont communiquer via le réseau.

Première connexion avec SQL*Plus (mot passe de system oublié)

si le mot de passe système est oublié, il faut procéder de la manière suivante:

Commencez donc par ouvrir une invite de commande. Sur Windows, tapez « cmd »
dans le menu Démarrer ou sur l'écran d'accueil et choisissez « Invite de
commande ».

Quel que soit votre système, la commande de connexion à SQL*Plus est la même
: sqlplus, suivie du nom d'utilisateur, du mot de passe et du nom du service auquel
se connecter. On peut résumer la commande :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


41

Une fois le nom de l'utilisateur et le mot de passe renseigné, le


prompt SQL> apparaît. Voici ce que donne la connexion dans l'invite de commande
de Windows par exemple (le résultat est strictement le même sous Linux) :

Connexion à la base sous Windows

L'invite de commande SQL> signifie que vous vous adressez à Oracle. Les
commandes que vous entrez sont alors des ordres SQL destinés au SGBDR et non
plus des commandes systèmes pour l'OS. Ainsi, à partir du moment où vous voyez
cette invite de commande, il n'y a plus de différence à faire selon que vous ayez
installé Oracle sur Linux ou sur Windows.

Et voilà, notre première connexion est ainsi établie ! À l'aide de l'outil SQL*Plus,
nous avons connecté notre client à notre serveur de base de données.

Déconnexion

La commande de déconnexion est la commande exit. Lorsque vous la tapez, vous


sortez de l'outil SQL*Plus et revenez à l'invite de commande de votre système.

Bien, nous savons maintenant nous connecter et envoyer des requêtes SQL à notre
base. Entrons maintenant dans le vif du sujet avec les premières fonctionnalités de
SQL*Plus.

Utilisation basique de SQL*Plus

SQL*Plus accepte trois types de commandes :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


42

 les commandes SQL : le langage de requête utilisé pour extraire les données
de la base ;
 les commandes PL/SQL : langage procédural propre à Oracle, utilisé pour
intégrer des requêtes SQL à des traitements procéduraux (c'est-à-dire en
utilisant des variables, des boucles, des structures de contrôles, etc.) ;
 les commandes SQL*Plus : commandes internes de SQL*Plus, permettant
entre autre de le paramétrer, comme nous allons le voir dans un instant.

Dans la suite de ce cours, nous allons utiliser l'utilisateur « HR », préinstallé avec


Oracle. Celui-ci va nous être utile car son schéma associé contient quelques tables
déjà alimentées en données :

Tables de l'utilisateur HR

Même si vous ne parlez pas parfaitement anglais, vous devriez vite vous apercevoir
que ces tables ressemblent à l'organisation d'une entreprise. Plus précisément, cela
concerne un service de ressources humaines (« HR » signifie « HumanResources »).
On retrouve une table EMPLOYEES (employés), une table JOBS (métiers), une
table DEPARTMENTS (départements), etc.

Par défaut, cet utilisateur est désactivé. Si vous pouvez (base de Développement,
droits d'accès, etc.), alors vous pouvez l'activer à l'aide de la requête suivante,
connecté en tant que SYSTEM

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


43

Après cela, on donne à cet utilisateur un nouveau mot de passe (on ne connaissait
pas l'ancien de toute façon) :

Bref, si vous le pouvez, je vous invite donc à utiliser HR pour pouvoir exécuter les
exemples en même temps que moi.

Envoi de commandes à SQL*Plus

À partir du moment où le prompt SQL> apparaît, vous vous adressez à SQL*Plus et


non plus au système d'exploitation. SQL*Plus étant identique sur Windows et
Linux, il n'y a plus de différence à faire selon l'environnement : tout le monde est
logé à la même enseigne.

Pour envoyer une requête SQL simple, il suffit de la taper et de valider par la
touche Entrée . Attention, n'oubliez pas le point-virgule final, sans quoi vous
reviendriez à la ligne plutôt que d'envoyer votre requête :

Il est en effet possible d'écrire des requêtes sur plusieurs lignes. Dans ce cas, le
retour à la ligne au milieu de la requête est indiqué par la numérotation de la

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


44

seconde ligne. Cela peut s'avérer pratique pour les requêtes un peu longues. De
plus, il est possible de copier-coller une requête depuis n'importe quel éditeur vers
la ligne de commande, les retours à la ligne sont alors gérés automatiquement.

Les commandes SQL*Plus ne nécessitent de leur côté pas de point-virgule final.


C'est le cas de la commande EXIT par exemple. Nous allons voir quelques autres
exemples dans quelques instants.

Je laisse volontairement de côté les commandes PL/SQL pour le moment. Nous y


reviendrons dans le prochain chapitre du cours.

Les variables SQL*Plus

SQL*Plus est capable de gérer des variables. Une variable, vous le savez, est une
zone mémoire dans laquelle on stocke une valeur afin de la réutiliser par la suite,
dans diverses situations.

Il faut distinguer deux types de variables SQL*Plus :

 les variables utilisateurs, utilisées essentiellement pour les requêtes SQL,


mais aussi pour le fonctionnement interne de SQL*Plus ;
 les variables de lien, utilisées cette fois pour les commandes PL/SQL.

Les variables utilisateurs

Les variables utilisateurs sont des variables tout ce qu'il y a de plus classiques : on
les définit et on leur attribue une valeur avant de pouvoir les réutiliser. Prenez par
exemple la requête suivante :

Au sein d'une requête SQL, on utilise une variable en préfixant son nom d'une
esperluette (« & »). Comme vous pouvez le voir ci-dessus, à la place du nom de la
table est positionné la variable &matable. Au moment où l'on envoie cette requête
au SGBDR, SQL*Plus remplace la variable par sa valeur, à condition qu'elle ait été
définie au préalable bien sûr.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


45

Pour définir une variable, on utilise la commande DEFINE (également abrégée DEF)
:

1 DEF[INE] [nom_de_la_variable = contenu_de_la_variable]

Ainsi pour définir ma variable &matable, j'utilise :

Une définition de variable est une commande interne à SQL*Plus, il n'y a donc pas
de « ; » finale.

Notez que j'entoure la valeur de ma variable par des guillemets. Ceux-ci ne sont
pas nécessaires, sauf si la valeur de la variable contient des espaces. Par habitude,
il est donc préférable de toujours utiliser les guillemets.

Il n'y a pas de « & » lors de la définition d'une variable. Celui-ci n'est à écrire que
pour l'utilisation de la variable.

Pour visualiser une variable déjà définie, utilisez la


commande DEF nom_de_la_variable (sans lui redonner de valeur). Et pour
visualiser l'ensemble des variables définies, tapez la DEF sans aucun paramètres :

Dans la liste qui s'affiche, on retrouve bien notre variable matable, accompagnée de
toute une série d'autres variables prédéfinies. Ces variables prédéfinies portent des

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


46

noms réservés et sont préfixées d'un « _ ». Par exemple, la variable _USER contient
le nom de l'utilisateur avec lequel vous êtes connecté (ici « HR »).

Pour supprimer une variable, on utilise la commande UNDEFINE (ou UNDEF )


suivie du nom de la variable à supprimer.

Les variables de lien

Le principe est globalement le même pour les variables de lien, si ce n'est qu'elles ne
se gèrent pas avec les mêmes commandes et qu'elles sont faites pour être utilisées
dans des instructions PL/SQL.

On définit une variable de lien grâce à la commande VARIABLE (ou VAR) :

1 VAR[IABLE] [nom [NUMBER | CHAR(n)]]

Pour afficher une variable de lien dans SQL*Plus (et non un script PL/SQL), on
utilise la commande VARIABLE suivie du nom de la variable.

Au sein des instructions PL/SQL, la variable doit être utilisée en préfixant son nom
de deux points (« : »).

Là encore je ne m'attarde pas plus longtemps sur les variables de lien, nous en
reparlerons plus longuement dans la partie consacrée au PL/SQL.

Utiliser des scripts

Exécution d'un script

Ecrire ou copier-coller des requêtes dans un invite de commande n'est pas ce que
l'on fait de plus pratique. SQL*Plus permet donc d'exécuter des requêtes
préalablement écrites dans des fichiers dont l'extension est .sql. On utilise pour cela
les commandesSTART nom_du_fichier.sql ou encore @nom_du_fichier.sql. Les deux
méthodes sont équivalentes.

Le contenu du script est alors joué. S'il contient une requête, vous obtiendrez le
résultat de cette dernière. S'il en contient plusieurs, vous obtiendrez les différents
résultats successivement.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


47

Attention, vous devez indiquer avec précision le chemin vers le script à exécuter.
Vous pouvez utiliser pour cela un chemin absolu ou un chemin relatif.

Le chemin absolu est le chemin complet, depuis la racine du disque dur vers le nom
du fichier. Par exemple, si vous souhaitez lancer le fichier test.sql se trouvant dans
le répertoire C:\Users\Matthieu\, vous devez taper la commande suivante :

1 SQL>@C:\Users\Matthieu\test.sql

Le chemin relatif est le chemin partant du répertoire dans lequel vous vous
trouviez au moment où vous avez lancé le programme sqlplus. Si votre script se
trouve dans ce répertoire, vous pouvez simplement vous contenter de la commande
suivante :

1 SQL>@test.sql

Notez également que vous pouvez omettre l'extension .sql lors de l'appel du fichier.

Utilisation de variables utilisateurs dans les scripts

À partir de maintenant, on commence à pouvoir faire des choses rigolotes : il est


tout à fait possible d'utiliser des variables utilisateurs au sein des scripts .sql.

Vous pouvez par exemple reprendre notre requête de tout à l'heure (SELECT *
FROM &ma_table;), la placer dans un fichier mon_script.sql et exécuter ce dernier
avec SQL*Plus.

D'accord, mais si la variable &ma_table n'a pas été définie, que va-t-il se passer ?

Eh bien si SQL*Plus trouve une variable non définie dans le script, pragmatique
comme il est, il vous demandera sa valeur :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


48

Mieux encore : grâce à la commande ACCEPT, vous pouvez indiquer un message à


l'utilisateur pour l'inviter à entrer la valeur de la variable. Voici sa structure :

ACCEPT nom_de_la_variable [PROMPT texte_a_afficher] [HIDE]

On indique le nom de la variable à renseigner et le texte à afficher à l’utilisateur du


script. En prime, vous pouvez indiquer l’option HIDE, qui rendra la saisie « aveugle
» (les caractères saisis par l'utilisateur ne s’affichent pas à la frappe). Cela peut être
utile si la valeur à saisir est sensible et que n'importe qui ne doit pas pouvoir la voir
par dessus l'épaule.

Reprenons par exemple notre script précédent et ajoutons-y un appel à la


commande ACCEPT :

L'utilisateur se verra afficher un joli message lors de l'exécution du script.

De plus, la commande ACCCEPT a le bon goût de créer la variable. Sans elle, la


valeur de la variable était automatiquement demandée mais celle-ci était oubliée à
la fin de l'exécution du script. À présent, la variable est définie et apparaît bien
dans la liste des variables (commande DEF).

Passons à présent à un autre outil proposé par SQL*Plus : le buffer.

Le buffer

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


49

Le buffer est une zone mémoire contenant la dernière commande SQL (ou PL/SQL)
envoyée. Grâce à lui, il va être possible de retravailler la dernière requête envoyée
ou encore de la sauvegarder.

Utilisation du buffer

Attention, le buffer contient la dernière requête envoyée et non la dernière ligne


uniquement. Si vous avez envoyé une requête sur plusieurs lignes, alors le buffer
les contient toutes. Pour vous en convaincre, tapez la requête suivante avec les
même retourà la ligne que moi (nous utilisons toujours l'utilisateur HR) :

SQL*Plus vous affiche alors le résultat de cette requête comme nous l'avons vu
précédemment. Tapez à présent la commande LIST (ou simplement L) pour obtenir
le contenu du buffer :

On récupère bien l'ensemble des lignes de la requête.

Pour rejouer le contenu du buffer, on utilise la commande RUN (ou plus court, /).
Essayez, vous verrez.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


50

Modifier le contenu du buffer

L'une des fonctionnalités les plus intéressantes du buffer est sans doute la
possibilité de modifier une partie de son contenu. On peut ainsi modifier la requête
enregistrée sans avoir à la retaper entièrement. On utilise pour cela la
commande CHANGE (abrégée en C), dont la syntaxe est la suivante :

1 C[HANGE]/texte_a_remplacer/[texte_de_remplacement]

Reprenons par exemple notre buffer où nous l'avions laissé, avec sa requête sur
plusieurs lignes. Tapez alors la commande suivante :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


51

A priori, rien ne se passe. Mais en visualisant à nouveau le contenu du buffer à


l'aide de la commande LIST, on se rend compte que le buffer a été modifié :

Il ne vousreste alors plus qu'à jouer du / pour lancer votre requête retravaillée. Ici
le gain est minime car la requête est courte, mais imaginez le temps gagné avec des
requêtes plus complexes.

Enregistrer le contenu du buffer dans un fichier

Enfin, il est possible d'écrire le contenu du buffer dans un fichier à l'aide de la


commande SAVE (ou S tout court) :

1 S[AVE] nom_du_fichier { [CREATE] | [REPLACE] | [APPEND] }

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


52

Cette fois, j'ai mis certains mots entre accolades, en les séparant par des barres
verticales. Ces barres signifient « ou ». Autrement dit, une seule de ces options est
attendue. Là encore, cette notation sera vraie dans tout le tutoriel.

Notez que dans le cas présent les valeurs entre accolades sont également entre
crochets, elles sont donc optionnelles.

Le nom du fichier est bien sûr le nom du fichier qui recevra le contenu du buffer.
Vous n'êtes pas obligé de spécifier d'extension, auquel cas SQL*Plus ajoutera lui-
même « .sql ».

L'emplacement de destination du fichier est le répertoire dans lequel vous vous


trouviez au moment du lancement de SQL*Plus (c'est le même principe que pour
l'utilisation des scripts de tout à l'heure).

L'option CREATE n'est pas nécessaire si le fichier n'existe pas déjà : il sera créé
d'office. En revanche s'il existe, il vous faudra utiliser l'option REPLACE. Enfin
l'option APPEND sert à ajouter le contenu du buffer à la suite d'un fichier déjà
existant (pratique pour conserver quelques requêtes choisies au cours de votre
travail).

La sauvegarde de buffer est très utile car elle permet de créer facilement des scripts
comme on en a vu précédemment.

Contenu du script.sql

Paramétrage des résultats d’affichage

Peut-être l'avez-vous remarqué si vous avez essayé de lancer quelques requêtes avec
SQL*Plus : l'affichage n'est pas ce que l'on fait de plus agréable. Alors bien sûr, en
lignes de commandes, il ne faut pas s'attendre à une ergonomie parfaite… Mais tout
de même, quand on voit un retour tel que celui de la figure suivante, on se dit qu'on
peut améliorer les choses !

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


53

Retour SQL*Plus non exploitable

Certains paramètres d'affichage doivent être définis à l'aide de commandes


spécifiques, d'autres via la commande SET. Dans tous les cas, les options
disponibles sont très nombreuses. Voyons donc les plus courantes.

Les paramètres de la commande SET

La commande SET permet de positionner certaines options de l'environnement.

TIMING : Chronométrage des requêtes

Oracle est l'un des SGBD les plus performants du marché, on le sait. Cela dit, si
des requêtes complexes lui sont envoyées, il peut tout de même mettre un petit
bout de temps avant de renvoyer un résultat. Connaître le temps d'exécution d'une
requête peut donc être très intéressant et même très utile dans le cadre
d'optimisations.

On utilise alors la commande SET TIMING [ON | OFF] pour afficher ou masquer le
temps

d'exécution d'une requête :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


54

Dans mon cas, le résultat est arrivé plutôt rapidement.

TIME : Heure des commandes

La commande SET TIME [ON | OFF] permet d'ajouter l'heure avant l'invite de
commandes SQL> :

Afficher l'heure peut être utile, mais il est possible d'aller plus loin dans la
modification de l'invite de commandes.

SQLPROMPT : Modification de l'invite de commande SQL>

Par défaut, l'invite de commande est paramétré pour afficher SQL>, comme on l'a
vu ci-dessus. La commandeSET SQLPROMPT "texte" permet de placer le texte voulu
à la place (texte à placer entre guillemets dans la commande). Par exemple :

Il est conseillé, comme je l'ai fait ci-dessus, de positionner un caractère bien visible
en fin de prompt (le chevron « > ») ainsi qu'un espace, afin que les requêtes ne «
collent » pas à l'invite de commandes.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


55

Enregistrer les paramètres dans un fichier

Malheureusement, tous les paramètres d'affichage que nous venons de voir sont
oubliés lors de la déconnexion de SQL*Plus. Cela signifie qu'en l'état, vous devez
tout redéfinir à chaque nouvelle connexion… Tout cela est fastidieux, je vous
l'accorde. Ça l'est d'autant plus si vous utilisez quotidiennement SQL*Plus sur la
même base de données et qu'à chaque lancement de SQL*Plus vous devez redéfinir
les mêmes paramétrages.

Pour que nos paramétrages soient pris en compte à chaque nouvelle session, on les
enregistre alors dans le
fichier<ORACLE_HOME>/sqlplus/admin/glogin.sql (<ORACLE_HOME>
représentant le chemin vers le répertoire « Oracle Home »).

Ce fichier est ni plus ni moins qu'un script joué à la connexion. C'est en quelque
sorte l'équivalent du .bashrc ou du .profile que les linuxiens connaissent peut-être.
Selon votre installation, il contient peut-être déjà des commandes. Si tel est le cas,
je vous invite à essayer de comprendre à quoi ces dernières peuvent bien servir.
Ajoutez simplement vos propres commandes à la fin de ce fichier.

Le principe est le même avec le contenu du buffer et les variables (variables


utilisateur et variables de lien) : tous ces éléments sont perdus à la déconnexion.
Vous pouvez donc les définir dans le fichier glogin.sql, bien que cela ait peut-être
moins d'intérêt que pour les paramètres d'affichage.

Exporter les résultats dans un fichier

SQL*Plus permet d'enregistrer les retours d'une requête ou d'un script directement
dans un fichier. Principal avantage : il n'y a plus besoin de copier-coller le résultat
de la requête à la main dans un fichier, avant de l'envoyer au patron qui le
demandait pour hier. Couplé aux possibilités d'affichages vues dans la sous-partie
précédente, on génère des fichiers quasi-exploitables en l'état.

Écrire dans un fichier

Écrire dans un fichier avec SQL*Plus, c'est comme filmer avec une caméra :
l'enregistrement commence lorsqu'on appuie sur un bouton et il se poursuit jusqu'à
ce qu'on le coupe. Ici, le bouton est la commande SPOOL (ou SPO) :

1 SPO[OL] { nom_du_fichier | OFF }

Comme l'indique la structure de commande ci-dessus, le paramètre est obligatoire


et doit être

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


56

 soit le nom du fichier dans lequel écrire, ce qui revient à démarrer


l'enregistrement ;
 soit « OFF », ce qui arrête l'enregistrement.

monfichierresultat

Le fichier sera placé dans le répertoire courant, c'est-à-dire où vous vous trouviez
lors du lancement de SQL*Plus. Le principe est le même qu'avec les scripts vus plus
tôt.

Attention à ne pas confondre le spool avec la commande SAVE, qui pour mémoire
servait à enregistrer le contenu du buffer dans un fichier. Voici un petit schéma
récapitulatif des entrées et sorties de fichiers avec SQL*Plus :

Résumé des entrées et sorties de fichiers

SQL*Plus est un outil en lignes de commandes permettant d'établir une connexion


entre le client et le serveur de base de données dans le but d'envoyer des requêtes
et de recevoir des résultats.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


57

Qu'avons-nous vu dans ce tutoriel ?

 Les requêtes peuvent être tapées directement dans l'invite de commande ou


bien à partir de scripts (fichiers en .sql).
 SQL*Plus gère deux types de variables : les variables utilisateurs (pour les
requêtes SQL et les commandes internes de SQL*Plus) et les variables de lien
(pour les commandes PL/SQL).
 Certains outils de SQL*Plus peuvent être très utile, comme le buffer ou
l'export des résultats dans des fichiers (SPOOL).
 Enfin, de nombreux paramètres sont à définir pour paramétrer l'affichage
des résultats. Ces paramétrages peuvent être généraux ou s'appliquer à des
colonnes particulières.

Avec tout cela, vous devriez pouvoir vous débrouiller sans trop de soucis avec
SQL*Plus

L'outil SQLDevelopper
Si vous voulez utiliser la version « bundle » (comprenant Java et uniquement
disponible pour Win32), il vous suffit de décompresser l’archive téléchargée pour
pouvoir directement utiliser le produit. Il n’y a pas d’installation à prévoir. Il
convient donc de décompresser celle-ci à son emplacement définitif.

Vous obtiendrez alors les fichiers et répertoires suivants. Le fichier


sqldevelopper.exe vous permet de démarrer l’application. Libre à vous de créer un
raccourci vers ce fichier si vous le souhaitez.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


58

CONFIGURATION D’UNE CONNEXION

Lorsque vous démarrez l’application, vous obtenez l’écran suivant :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


59

Pour le moment, aucune connexion n’y est encore configurée. Nous allons en créer
une.
Pour ajouter une connexion vers une base de données, choisissez l’icône « + » qui
apparait à gauche :

L’écran qui apparait vous demande plusieurs informations que l’on peut séparer en
deux parties : l’utilisateur que vous voulez connecter et les coordonnées de la base
de données que vous souhaitez accéder.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


60

Le nom de la connexion que vous préciserez importe peu. C’est un nom qui
apparaitra par la suite dans la fenetre de connexion et vous permettra – si vous
avez enregistré celle-ci – de pouvoir vous reconnecter rapidement sans devoir
réintroduire toutes les informations. Il vous est conseillé de faire apparaitre le nom
du serveur et le nom du compte avec lequel vous vous connectez.

Dans la partie connexion, vous devez indiquer le nom ou l’adresse IP de la machine


sur laquelle se trouve le serveur de base de données, mais aussi le port d’écoute du
serveur de la base (par défaut c’est toujours le port
1521) et le nom du serveur de la base de données.

Pour vos connecter sur votre propre base de donnée en local, les informations sont
les suivantes :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


61

Vous pouvez alors tester votre connexion, éventuellement l’enregistrer pour pouvoir
la réutiliser ultérieurement,
puis vous connecter.

Toutes les connexions que vous créez apparaissent ensuite dans le panneau de
gauche

L’ENVIRONNEMENT SQL DEVELOPPER

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


62

En rouge : les connexions établies vers des comptes sur les serveurs de base de
données et les objets crées sur ces

En bleu : les fenêtres d’interrogations et les détails sur les objets crées dans un
schéma.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


63

CHAPITRE III : LE LANGAGE PL/SQL

Le langage PL/SQL (Procedural Langage/StructuredQuery Langage) est le


langage de prédilection d’Oracle depuis la version 6. Ce langage est une extension
de SQL car il permet de faire cohabiter des structures de contrôle (si, pour et tant
que) avec des instructions SQL (principalement SELECT, INSERT, UPDATE et
DELETE).
Dans un environnement client – serveur, chaque instruction SQL donne lieu
à l’envoi d’un message du client vers le serveur suivi de la réponse du serveur vers
le client. Il est préférable de travailler avec un bloc PL/SQL plutôt qu’avec une suite
d’instructions SQL susceptibles d’encombrer le trafic réseau. En effet, un bloc
PL/SQL donne lieu à un seul échange sur le réseau entre le client et le serveur et
seul le résultat final est retourné au client.
Structure d’un programme PL/SQL
Un programme PL/SQL est composé de trois sections :
 DECLARE (section optionnelle) déclare les variables, types, curseurs,
exceptions, etc.
 BEGIN (section obligatoire) contient le code PL/SQL incluant ou non des
directives SQL (jusqu’à l’instruction END ;). Le caractère « / » termine un bloc
pour son exécution dans l’interface SQL*Plus.

Oracle utilise le langage PL/SQL à la fois côté serveur et côté client:

 côté serveur : définir des objets "programmes" persistants comme les


modules stockés (packages, procédures et fonctions) ou les triggers
 côté client : en SQLPlus, permet d'écrire des blocks anonymes. c'est aussi le
langage des outils de developpement d'interface graphique

Quelques éléments du langage


Notion de bloc

comme en ADA, on définit la notion de bloc, qui contient une partie déclarative puis
un corps qui contient éventuellement un traitement d'exception:
declare
...
begin
...
exception
...
end ;

Structure de contrôle
les structures de contrôle sont celles du langage ADA:
Instructions conditionnelles
if condition then instr
{elsif condition then instr}
[else instr]

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


64

end if ;
case variable
{when expression then instr}

[else instr]
end case;

Les boucles:
fori in [reverse] deb .. fin loop
instr
end loop;
while condition loop
instr
end loop;
loop
instr
exit when condition;
instr
endloop;

Les variables

Un programme PL/SQL est capable de manipuler des variables et des


constantes (dont la valeur est invariable). Les variables et les constantes sont
déclarées (et éventuellement initialisées) dans la section DECLARE. Ces objets
permettent de transmettre des valeurs à des sous programmes via des paramètres,
ou d’afficher des états de sortie sous l’interface SQL*Plus. Plusieurs types de
variables sont manipulés par un programme PL/SQL :
 variables PL/SQL :
o scalaires recevant une seule valeur d’un type SQL (exemple :
colonne d’une table) ;
o composites (%ROWTYPE, RECORD et TYPE)
o références,…
 variables non PL/SQL : définies sous SQL*Plus (de substitution et
globale), variables hôtes (déclarées dans des programmes précompilés)

Variables scalaires
La déclaration d’une variable scalaire est de la forme suivante :

 CONSTANT précise qu’il s’agit d’une constante ;


 NOT NULL pose une contrainte en ligne sur la variable
 DEFAULT permet d’initialiser la variable (équivaut à l’affectation :=)

Le tableau suivant décrit quelques exemples :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


65

Affectations
Il existe plusieurs possibilités pour affecter une valeur à une variable :

 l’affectation comme on la connait dans les langages de programmation


(variable := expression) ;
 par la directive DEFAULT ;
 par la directive INTO d’une requête (SELECT …INTO variable FROM…)

Le tableau suivant décrit quelques exemples :

Variables %TYPE
La directive %TYPE déclare une variable selon la définition d’une colonne d’une
table ou d’une vue existante. Elle permet aussi de déclarer une variable
conformément à une autre variable précédemment déclarée.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


66

Il faut faire préfixer la directive %TYPE avec le nom de la table et celui de la colonne
(identificateur nomTable.nomColonne%TYPE) ou avec le nom d’une variable
existante (identificateur2 identificateur%TYPE).
Le tableau suivant décrit cette syntaxe :

Variables %ROWTYPE
La directive %ROWTYPE permet de travailler au niveau d’un enregistrement
(record). Ce dernier est composé d’un ensemble de colonnes. L’enregistrement peut
contenir toutes les colonnes d’une table ou seulement certaines.
cette directive est très utilie du point de vue de la maintenance des applicatifs.
Utilisés à bon escient, elle diminue les changements à apporter au code en cas de
modification des types des colonnes de la table. Il est aussi possible d’inserer dans
une table ou de modifier une table en utilisant une variable de type %ROWTYPE.
Nous détaillerons plus tard le mécanisme des curseurs qui emploient beaucoup
cette directive. Le tableau suivant décrit ces cas d’utilisation :

STRUCTURES DE CONTROLE
En tant que langage procédural, PL/SQL offre la possibilité de programmer :
 les structures conditionnelles si et cas (IF…et CASE) ;
 les structures répétitives tant que, répéter et pour (WHILE, LOOP, FOR).

Structures conditionnelles

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


67

PL/SQL propose deux structures pour programmer une action conditionnelle : la


structure IF et la structure CASE
Trois formes d’IF
Exemple :
PLSQL et SQL*Plus

exploitation des requêtes SQL


SELECT ...INTO

Exploitation des requêtes SQL

 Les instructions INSERT, DELETE, UPDATE s'écrivent telles quelles dans un


programme. Elles peuvent utiliser les variables du programme: il faut donc
donner des noms differents aux variables du programme et aux colonnes des
tables manipulées par le programme.
 pour une reqêtte dont le resultat est constitué d'une unique ligne, on peut
utiliser la syntaxte SELECT ...INTO ...
 pour une requêtte qui ramène un nombre quelconque de lignes, il faut
utiliser un curseur.

SELECT ...INTO

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


68

syntaxiquement, c'est une requête SQL qui peut utiliser des variables du
programme, la clause INTO permet de préciser les noms des variables qui vont
recevoir le résultat de la requête. la requêtte ne doit donc renvoyer qu'une seule
ligne
Select liste into listeVariables
from ...

Exemple:
select emp_name, emp_firstname
into le_nom, le_prenom
from Employee
where emp_no = 346;
oubien :
select *
into emp_rec -- emp_rec de type Employee%rowtype
from Employee
whereemp_no = 346;

Si la requête ne renvoie aucune ligne, l'exécution NOT_DATA_FOUND est


déclenchée. Si au contraire, elle renvoie plus d'une ligne, l'exception
TOO_MANY_ROWS est déclenchée.
Les curseurs

Un curseur est une structure de données séquentielle avec une position courante.
on utilise un curseur pour parcourir le résultat d'une requêtte SQL dans un
programme PL/SQL.
on déclare un curseur en associant le nom d'une requêtte.
CURSOR nom_curseur(p1, ..., pn) IS une_requ�te ;
cursor emp_cursor(dnum NUMBER) is
select salary, comm
from Employee
where deptno = dnum ;

Si c est un curseur, la ligne courante est de type c%rowtype, c'est à dire du type de
la ligne de la requêtte associée c.
Manipulation d'un curseur
Instructions :

 OPEN : initialise le curseur


 FETCH :extrait la ligne courante et passe à la suivante (pas d'exception si
plus de lignes)
 CLOSE : invalide le curseur
 SI on veut parcourir toutes les lignes : boucle FOR

Attributs du curseur:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


69

 %found vrai si le dernier fetch a ramené une ligne


 %notfound vrai si le dernier fetch n'a pas ramené de ligne
 %isopen vrai si le curseur est ouvert
 %rowcount le nombre de lignes déjà ramenées

Exemple du curseur sans paramètres:


declare
cursor c_proj is select proj_name, proj_budget
from project
order by proj_budget ;

proj_rec c_proj%rowtype ;
begin
open c_proj ;
loop -- parcours des lignes du curseur
fetch c_proj into proj_rec ;
exit when c_proj%notfound ;
... on utilise la ligne courante rangée dans proj_rec ...
end loop ;
close c_proj ;
end ;

L'exemple précédent peut s'écrire de la manière suivante:


declare
cursor c_proj is select proj_name, proj_budget
from project
order by proj_budget ;

begin
for proj_rec in c_proj loop -- parcours des lignes du curseur
... on utilise la ligne courante rangée dans proj_rec ...
end loop ;
end ;

SELECT avec curseur explicite, boucle simple et sortie conditionnelle

Les curseurs sont des zones tampon utilisées pour tout select multiligne. A chaque
ordre SELECT, on associe un curseur nommé et on y fait réference dans la suite du
programme pour traiter les lignes les unes après les autres jusqu'à la fin de la table.
chaque accès à un curseur incrémente un pointeur dans l'ensemble des lignes
résultats (resultset).
On peut utiliser des types de variables prédéfinis et des attributs de curseurs
prédéfinis pour faciliter le codage:
Types prédéfinis des variables utiles:

type
Signification Exemple
prédéfini

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


70

DECLARE ligne
le type
fournisseur%ROWTYPE
%ROWTYPE enregistrement
(fournisseur est un nom de
d'une table
table...)

DECLARE
v_nomnom_fournisseur%TYPE
le type d'une
%TYPE (nom_fournisseur est une
colonne
colonne de la table
fournisseur...)

attributs de curseurs prédéfinis utiles:

Attribut TYPE Signification

renvoie TRUE lorsque l'ordre SQL précédent n'a


SQL%NOTFOUND booléen
affecté aucune ligne.

renvoie le nombre de lignes traitées par l'ordre


SQL%ROWCOUNT entier
SQL précédent.

négation logique de SQL%NOTFOUND, donc


SQL%FOUND booléen vrai dès qu'une ligne a été affectée par l'ordre
SQL.

SQL%ISOPEN booléen vrai si curseur ouvert

Les différentes étapes:

 déclaration, où l'on associe, dans la zone de déclaration un curseur avec un


ordre SQL: CURSOR nom_curseur IS ordre_select
 ouverture du curseur, où l'on analyse l'ordre et l'on identifie les lignes
candidates: OPEN nom_curseur
 rapatriement des valeurs dans les variables de réception : FETCH
nom_curseur INTO liste_variables
 fermeture du curseur: CLOSE nom_curseur

Exemple:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


71

SELECT avec curseur implicte et boucle FOR


Il existe une notation compacte où l'on n'utilise pas de déclaration de curseur
explicite, mais où l'on associe un ordre SELECT à une boucle FOR.
On utilisera une variable de réception de type implicite (oui encore) RECORD. Et
l'on fera référence à chaque champ par son son nom préfixé par le nom du record
sus évoqué:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


72

CHAPITRE V : LA GESTION DES UTILISATEURS

Nous allons avoir dans cette partie du cours comment créer et configurer un
utilisateur de base de données ou un compte avec lequel vous pourrez vous
connecter et effectuer des actions sur la base de données en fonctions des droits qui
vous seront alloués. Contrairement à d'autres bases de données, quand vous créez
un utilisateur sur une base Oracle, celui - ci ne dispose d'aucun droit.

Voici les différentes étapes qui seront nécessaire à la création d'un utilisateur
Oracle :

 Choisir un nom d'utilisateur


 Choisir une méthode d'authentification
 Choisir les TABLESPACEs que l'utilisateur pourra utiliser
 Définir les quotas sur chaquesTABLESPACEs
 Définir les TABLESPACEs par défaut de l'utilisateur
 Créer l'utilisateur
 Assigner les privilèges à l'utilisateur

Un schéma est une collection (ou un ensemble) nommé d'objets tels que des tables,
vues, clusters, procédure et packages associés à un utilisateur précis.

Quand un utilisateur de base de données est crée, son schéma est


automatiquement crée. Un utilisateur ne pourra alors être associé qu'à un seul
schéma et réciproquement. La première chose à faire pour créer un nouvel
utilisateur va être de définir un login. Afin d'éviter d'avoir trop de problèmes lors de
l'ajout de nouveaux utilisateurs, il est fortement recommandé de mettre une
stratégie de nommage en place.

Pour créer un utilisateur authentifié par la base de données, vous devrez utiliser la
clause IDENTIFIED BY PASSWORD.

Il va maintenant falloir choisir le domaine d'action du nouvel utilisateur. En effet,


pour des raisons de sécurités évidentes, nous allons restreindre le champ d'action
de l'utilisateur en choisissant les tablespaces que celui-ci sera en mesure d'utiliser.

Rappel sur la création et assignation des tablespaces

Voici l'exemple d'un tablespace temporaire:

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


73

Voici l'exemple d'assignation d'un tablespace temporaire à un utilisateur:

Création d'un tablespace géré localement

Ajout d'un datafile à un tablespace

En premier lieu il est très fortement déconseillé d'autoriser un utilisateur à utiliser


le tablespace SYSTEM, qui doit impérativement rester dédié au dictionnaire de
données.

une fois les tablespaces identifiés, l'étape suivante va consister à définir l'espace
alloué à l'utilisateur sur chacun des tablespaces. voici les differentes options
disponibles pour les quotas:

 une taille en K(KiloByTES) ou en M(MegaBytes)


 unlimited

par défaut, le nouvel utilisateur dispose d'un quota null sur tous les tablespaces.
voici un exemple d'assignation de quotas sur differents TABLESPACES:

...
QUOTA 5M ON TBS_USERS QUOTA UNLIMITED ON TMP_USERS...
...

Cette étape est absolument indispensable, elle va permettre de définir le tablespace


de données et le tablespace temporaire de l'utilisateur. Cette étape est
indispensable pour éviter toute écriture dans le tablespace SYSTEM (qui est assigné
si aucun tablespace par défaut n'est défini).

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


74

Vous devrez définir ces deux tablespaces avec les options DEFAULT TABLESPACE
pour le tablespace de données et TEMPORARY TABLESPACE pour le tablespace
temporaire.

Voici un exemple d'utilisation :

...
DEFAULT TABLESPACE tbs_user TEMPORARYTABLESPACE tmp_user

...

Voici quelques exemples de création d'utilisateurs Oracle :

CREATE USER Helyos


IDENTIFIED BY mypass1
DEFAULT TABLESPACE tbs_users
QUOTA 10M ON tbs_users
TEMPORARY TABLESPAC E tmp_users
QUOTA 5M ON tmp_users
QUOTA 5M ON tools
PROFILE app_user
PASSWORDEXPIRE;

L'utilisateur helyos aura donc le mot de passe mypass1. Son TABLESPACE par
défaut sera tbs_users avec un quota de 10Mo, son tablespace temporaire sera le
TABLESPACE tmp_users avec un quota de 5M. Il aura aussi la possibilité d'utiliser
le TABLESPACE tools avec un quota de 5Mo.

Il devra changer son mot de passe lors de la connexion et se verra attribuer le profil
app_user.

Création de l'utilisateur et assignation des tablespaces:

Octroi des privilèges de connexion à bertin

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


75

Connexion avec Bertin

Si vous souhaitez changer le mot de passe d'un utilisateur:

ALTERUSER < login de l'utilisateur > IDENTIFIED BY < nouveau mot de passe >

la syntaxe de modification des quotas d'un utilisateur n'est pas differente de la


syntaxe utilisée lors de la création de l'utilisateur. cependant, il est important de
noter que si un utilisateur disposait de 1 Mo de quotas sur un TABLESPACE et qu'il
en avait utilisé la moitié avec la moitié avec des tables, et bien si vous lui modifiez
son quota à 0Mo sur ce TABLESPACE cela n'impliquera pas que ses tables soient
vidées ou supprimées, mais cela signifiera que ses tables ne pourront pas s'allouer
d'extents supplémentaires:

Exemple;

ALTER USER scott QUOTA 15M ON tbs_users QUOTA 0M ONtools;

Pour modifier le TABLESPACE par défaut d'un utilisateur, la syntaxe à utiliser n'est
pas differente de la syntaxe de création. Cette commande vous permettra de
modifier les TABLESPACES par défaut de l'utilisateur. Cela ne déplacera pas les
objets des anciens TABLESPACES.

Exemple:

ALTER USER scott DEFAULT TABLESPACE tbs_users2 TEMPORARY TABLESPACE


tmp2;

Pour des raisons de sécurité, il peut parfois être utile de vérouiller le compte d'un
utilisateur pour éviter que celui-ci soit utilisé de manière frauduleuse. Cette
méthode peut aussi être utilisée pour organiser des objets dans un schéma sans
que l'on puisse utiliser l'utilisateur en question.

Voici un exemple d'activation et de verrouillage d'un compte utilisateur :

-- Verrouillage du compte
ALTER USER scott ACCOUNT LOCK;

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


76

-- Activation du compte
ALTER USER scott ACCOUNT UNLOCK;

suppression d'un utilisateur

Nous allons maintenant voir comment supprimer un utilisateur et son schéma.

Il est important de noter qu'un utilisateur actuellement connecté à la base ne


pourra pas être supprimé.

Par exemple :

SQL>DROP USER scott CASCADE;


DROP USER scott CASCADE
*
ERREUR à la ligne 1 :
ORA-01940: impossible supprimer un utilisateur qui est connecté

3.1. Supprimer un utilisateur avec un schéma vide▲

Pour cette méthode nous utiliserons juste la commande DROP USER.

Cette méthode est la méthode par défaut. Il faut juste vérifier que le schéma de
l'utilisateur soit vide lors de l'exécution de cette commande. Sinon il en résultera
l'erreur suivante :

Sélectionnez

SQL>DROP USER scott;


DROP USER scott
*
ERREUR à la ligne 1 :
ORA-01922: CASCADE à spécifier pour supprimer 'SCOTT'

Cette erreur est due au fait que Oracle ne supprimera pas les objets à l'intérieur du
schéma de l'utilisateur et qu'il vous faudra utiliser l'option CASCADE du chapitre
suivant.

Voici un exemple de suppression d'un utilisateur ayant un schéma vide :

SQL>DROPUSER test;

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


77

Utilisateur supprimé.

Lorsque vous souhaitez supprimer un utilisateur et tous les objets de son schéma,
vous devez alors utiliser l'option CASCADE

LES PRIVILEGES

Attribution des privilèges systèmes

La commande GRANT permet d’attribuer un ou plusieurs privilèges à un ou


plusieurs bénéficiaires. Nous étudierons les rôles dans la section suivante.
L’utilisateur qui exécute cette commande doit avoir reçu lui-même le droit de
transmettre ces privilèges. Dans le cas des utilisateurs SYS et SYSTEM, la question
ne se pose pas car ils ont tous les droits. La syntaxe est la suivante :

Le tableau suivant décrit l’affectation de quelques privilèges système en donnant les


explicationsassociées :

La révocation d’un ou plusieurs privilèges est réalisée par l’instruction REVOKE. Le


tableau suivant décrit la révocation de certains privilèges acquis des utilisateurs :

Les privilèges objets

Les privilèges objets sont relatifs aux données de la base et aux actions sur les
objets (tables, vues, …). L’attribution de ces privilèges se fait toujours par
l’instruction GRANT.

Exemple : permission de modifier les colonnes code et désignation de la table


article, sélectionner accordées à l’utilisateur Lobo

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


78

GRANT UPDATE (code, désignation), SELECT ON article TO Lobo ;

Pour retirer ces droits :

REVOKE UPDATE, SELECT ON article FROM Lobo;

NB : un rôle n’est rien d’autre qu’un ensemble de privilèges nommés.

LA GESTION DES PROFILS

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


79

CHAPITRE IV : INITIATION AUX ENTREPOTS DE DONNEES

 l’entrepôt des données


 le magasin des données
 la modélisation multidimensionnelle
o concept de fait
o concept de dimension
o modèle en étoile
o modèle en flocon
o modèle en constellation
o passage du modèle conceptuel au modèle logique multi
dimensionnel
 Le cube OLAP
o présentation
o principales opérations sur un cube OLAP
 réalisation d’un mini projet BI (Business Intelligence)

Définitions :
L’entrepôt de données est le lieu de stockage centralisé d'un extrait des
bases de production.Cet extrait concerne les données pertinentes pour le
support à la décision. Elles sont intégréeset historisées. L’organisation des
données est faite selon un modèle qui facilite la gestionefficace des données
et leur historisation.
Le magasin de données

C’est un extrait de l'entrepôt. Les données extraites sont adaptées à


uneclasse de décideurs ou à un usage particulier (recherche de corrélation,
logiciel de statistiques,...). L’organisation des données suit un modèle
spécifique qui facilite les traitements décisionnels.

La modélisation multidimensionnelle

La modélisation multidimensionnelle consiste à considérer un sujet


analysé comme un pointdans un espace à plusieurs dimensions. Les

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


80

données sont organisées de manière à mettre enévidence le sujet analysé et


les différentes perspectives de l'analyse.
Dans [Marcel 1998] l’auteur montre que la modélisation habituelle sous
forme de relationsdevient inappropriée pour supporter la prise de décision et
les analyses multidimensionnellesde type OLAP.

La modélisation conceptuelle

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


81

Conceptuellement, cette modélisation multidimensionnelle a donné


naissance aux concepts defait et de dimension [Kimball 1996].

Concept de fait

Le sujet analysé est représenté par le concept de fait.

Définition :

Le fait modélise le sujet de l'analyse. Un fait est formé de mesures


correspondant auxinformations de l'activité analysée.

Les mesures d'un fait sont numériques et généralement valorisées de


manière continue[Kimball 1996]. Les mesures sont numériques pour
permettre de résumer un grand nombred'enregistrements en quelques
enregistrements (on peut les additionner, les dénombrer ou biencalculer le
minimum, le maximum ou la moyenne). Les mesures sont valorisées de
façoncontinue car il est important de ne pas valoriser le fait avec des valeurs
nulles. Elles sont aussisouvent additives ou semi-additives afin de pouvoir
les combiner au moyen d’opérateursarithmétiques.

Concept de dimension

Le sujet analysé, c'est à dire le fait, est analysé suivant différentes


perspectives. Cesperspectives correspondent à une catégorie utilisée pour
caractériser les mesures d'activitéanalysées [Marcel 1998] ; on parle de
dimensions.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


82

Définition :

Une dimension modélise une perspective de l'analyse. Une dimension se


compose deparamètres correspondant aux informations faisant varier les
mesures de l'activité.

Une dimension est généralement formée de paramètres (ou attributs)


textuels etdiscrets. Les paramètres textuels sont utilisés pour restreindre la
portée des requêtes afin delimiter la taille des réponses. Les paramètres sont
discrets, c'est à dire que les valeurspossibles sont bien déterminées et sont
des descripteurs constants.

EXEMPLE : Poursuivons l'exemple précédent. Le fait peut être analysé


suivant différentesperspectives correspondant à trois dimensions : la
dimension Temps, la dimension Géographie etla dimension Catégorie.

Nous représenterons une dimension par un rectangle englobant les


différents paramètres qu'ellecontient. En outre un symbole représentant
trois axes estampille les dimensions pour les distinguerdu fait.

Lors du processus OLAP, les données sont généralement analysées en


partant d'un faibleniveau de détail vers des données plus détaillées pour
"forer vers le bas". Pour définir cesdifférents niveaux de détail, chaque
dimension est munie d'une (ou plusieurs) hiérarchie(s)des paramètres. La
hiérarchie sert lors des analyses pour restreindre ou accroître les niveauxde
détail de l'analyse.

Définition :

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


83

Une hiérarchie organise les paramètres d'une dimension selon une relation
"est_plus_fin"conformément à leur niveau de détail.

EXEMPLE : Les paramètres des dimensions sont organisés suivant


une hiérarchie ; les paramètressont ordonnés par une relation "est_plus_fin"
et notée P1 --> P2. Par exemple, pour la dimensionGeographie :

Ville → Departement → Region

Ainsi chaque ville appartient à un département qui est situé dans une
région.

Modèles en étoile, en flocon et en constellation

A partir du fait et des dimensions, il est possible d'établir une structure de


données simple quicorrespond au besoin de la modélisation
multidimensionnelle. Cette structure est constituéedu fait central et des
dimensions. Ce modèle représente visuellement une étoile, on parle
demodèle en étoile (star schema [Kimball 1996]).

EXEMPLE : La Figure 6 décrit le schéma en étoile modélisant les


analyses des quantités et desmontants des médicaments dans les
pharmacies selon trois dimensions : le temps, la catégorie etla situation
géographique.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


84

Il existe d'autres techniques de modélisation multidimensionnelle,


notamment la modélisationen flocon (snowflake). Une modélisation en flocon
consiste à décomposer les dimensions dumodèle en étoile en sous
hiérarchies. La modélisation en flocon est donc une émanation de la
modélisation en étoile ; le fait est conservé et les dimensions sont éclatées
conformément à sahiérarchie des paramètres.

L'avantage de cette modélisation est de formaliser une hiérarchie au sein


d'une dimension. Parcontre, la modélisation en flocon induit une
dénormalisation des dimensions générant une plusgrande complexité en
termes de lisibilité et de gestion.

EXEMPLE : La Figure 7 illustre la modélisation en flocon ; nous


décrivons le modèle en étoile de laFigure 6 en dénormalisant chacune de ces
dimensions, formant ainsi une sorte de flocon.

Une autre technique de modélisation, issue du modèle en étoile, est la


modélisation enconstellation. Il s'agit de fusionner plusieurs modèles en
étoile qui utilisent des dimensionscommunes. Un modèle en constellation
comprend donc plusieurs faits et des dimensionscommunes ou non.

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


85

EXEMPLE : La Figure 8 illustre la modélisation en constellation ; nous


décrivons une constellationconstituée de deux schémas en étoile : l'un
correspond aux ventes effectuées dans les pharmacieset l'autre analyse les
prescriptions des médecins.

Les dimensions Temps et Géographie sont partagées par les faits


Prescriptions et Vente.

Modélisation logique

Au niveau logique plusieurs possibilités sont envisageables pour la


modélisationmultidimensionnelle. Il est possible d'utiliser :

- un système de gestion de bases de données (SGBD) existant tel que les


SGBD relationnels(ROLAP) ou bien les SGBD orientées objet (OOLAP),
- un système de gestion de bases de données multidimensionnelles
(MOLAP).

ROLAP et OOLAP

L'approche la plus couramment utilisée consiste à utiliser un système de


gestion de bases dedonnées relationnelles, on parle de l'approche ROLAP
("Relational On-Line AnalyticalProcessing"). Le modèle muldimensionnel est
alors traduit de la manière suivante :

- chaque fait correspond à une table, appelée table de fait,

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


86

- chaque dimension correspond à une table, appelée table de dimension.

Ainsi, la table de fait est constituée d'attributs représentant les mesures


d'activité et lesattributs clés étrangères de chacune des tables de dimension.
Les tables de dimensioncontiennent les paramètres et une clé primaire
permettant de réaliser des jointures avec latable de fait.

EXEMPLE : Nous considérons l'exemple du schéma en étoile de la


Figure 6. La table VENTE

correspond au fait et les tables TEMPS, GEOGRAPHIE, CATEGORIE


représentent les dimensions.

VENTE(CleTps#, CleGeo#, CleCat#, Quantite, Montant)

TEMPS(CleTps, Annee, Trimestre, Saison, Mois, Jour)

GEOGRAPHIE(CleGeo, Region, Departement, Ville)

CATEGORIE(CleCat, TypeProd, Gamme, NomProd, Couleur)

Le cube OLAP

L’élément principal de l’infrastructure OLAP est le cube. C’est en fait


une base multidimensionnelle, qui permet l’analyse de ces données. Un cube
reprend les mesures de la table de faits que l’on a pu établir lors de la
conception du datawarehouse, et s’en sert pour effectuer des calculs, les
mesures étant des données quantitatives.

Un cube peut par exemple représenter le chiffre d’affaires que produit


un magasin situé sur trois sites (paris,Toulouse et bordeaux), proposant
trois catégories d’articles (vêtements, sacs et chaussures), ce chiffre étant
calculé chaque trimestre. Ainsi à l’intersection de trois axes se trouve le
montant des bénéfices correspondant à la ville, à la période de temps et au
type d’article choisi

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


87

Les analyses réalisées par les fonctions OLAP sont utilisées pour évaluer
l’entreprise. Vient donc la notion de KPI. Les KPI (Key Performance
Indicator) sont, comme leur nom l’indique, des indicateurs clés de
performance qui montrent l’évolution de l’entreprise en matière de qualité et
les objectifs à atteindre. Un KPI indique une valeur ou une couleur (échelle
prédéfinie) la tendance d’une mesure vis-à-vis des objectifs requis.

Voici un exemple de cube OLAP :

Dans notre exemple, nous allons nous intéresser aux ventes de tous les
magasins "XXX".

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


88

Voyons maintenant comment peut-on utiliser ce cube. Pour cela, nous allons
nous intéresser aux différentes vues de ce cube.

Vue n° 1 : On s'intéresse à toutes les ventes du magasin de DORCAS (toutes


catégories confondues durant toute l'année)

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


89

Vue n° 2 : On s'intéresse aux ventes de la catégorie "vêtements pour enfants"


(tous les magasins durant toute l'année)

Vue n° 3 : On s'intéresse à toutes les ventes durant le mois de Février


(toutes catégories confondues et dans tous les magasins)

Vue n° 4 : On s'intéresse aux ventes du magasin de DORCAS dans la


catégorie "vêtements pour enfants" durant le mois de Février

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)


90

Ces différentes vues correspondent à différentes opérations. Voici la liste des


opérations OLAP :

1- Pivoter (pivot, swap) : inter changer 2 dimensions.


2- Forage vers le bas (drill-down) : descendre dans la hiérarchie de la
dimension (Ex. visualiser les ventes par mois au lieu de par année).
3- Forage vers le haut (drill-up, roll-up) : remonter dans la hiérarchie de
la dimension (Ex. visualiser les ventes par année au lieu de par mois).
4- Forer latéralement (drill-across) : Permet de passer d’un membre de
dimension à un autre (Ex. visualiser les ventes de DORCAS au lieu de
celles d’Esther).

FIN DU COURS
Bertin LOBO MINGA
lobo.minga@gecamines.cd
0970053065 / 081 1959141

Assistant Bertin LOBO MINGA (lobominga.bertin@gmail.com /081 195 91 41)