Vous êtes sur la page 1sur 74

Université Moulay Ismail Année universitaire : 2022/2023

Faculté des Sciences et Techniques Filière Cycle d’Ingénieur GI


Errachidia Prof Y.FARHAOUI

Module: Bases de données avancées

Chap II:

Langage SQL sous Oracle


(Vues, index,… accès concurrents)

13/03/2023 Prof Y.FARHAOUI 1


Fonctions diverses pour requêtes SQL
Fonctions arithmétiques
ABS(nb) Renvoie la valeur absolue de nb.
CEIL(nb) Renvoie le plus petit entier supérieur ou égal à nb.
COS(n) Renvoie le cosinus de n, n étant un angle exprimé en radians.
COSH(n) Renvoie le cosinus hyperbolique de n.
EXP(n) Renvoie e puissance n.
FLOOR(nb) Renvoie le plus grand entier inférieur ou égal à nb.
LN(n) Renvoie le logarithme népérien de n qui doit être un entier strictement positif.
LOG(m,n) Renvoie le logarithme en base m de n.
MOD(m,n) Renvoie le reste de la division entière de m par n,
POWER(m,n) Renvoie m puissance n.
ROUND(n[,m]) Si m est positif, renvoie n arrondi (et non pas tronqué) à m chiffres après la
virgule. Si m est négatif, renvoie n arrondi à m chiffres avant la virgule. m doit être un entier
et il vaut 0 par défaut.
SIGN(nb) Renvoie -1 si nb est négatif, 0 si nb est nul, 1 si nb est positif.
SIN(n) Renvoie le sinus de n, n étant un angle exprimé en radians.
SINH(n) Renvoie le sinus hyperbolique de n.
SQRT(nb) Renvoie la racine carrée de nb qui doit être un entier positif ou nul.
TAN(n) Renvoie la tangente de n, n étant un angle exprimé en radians.
TANH(n) Renvoie la tangente hyperbolique de n.

13/03/2023 Prof Y.FARHAOUI 2


Fonctions diverses pour requêtes SQL

fonctions sur les chaînes de caractères

CONCAT(chaîne1,chaîne2) Renvoie la chaîne obtenue en concaténant chaîne1 à chaîne2.


INITCAP(chaîne) Renvoie chaîne en ayant mis la première lettre de chaque mot en
majuscule et toutes les autres en minuscule.
LOWER(chaîne) Renvoie chaîne en ayant mis toutes ses lettres en minuscules.
LTRIM(chaîne[,ens]) Renvoie la chaîne obtenue en parcourant à partir de la gauche chaîne
et en supprimant tous les caractères qui sont dans ens.
REPLACE(chaîne, avant, après) Renvoie chaîne dans laquelle toutes les occurrences de
la chaîne de caractères avant ont été remplacés par la chaîne de caractères après.
RTRIM(chaîne[,ens]) Renvoie la chaîne obtenue en parcourant à partir de la droite chaîne
et en supprimant tous les caractères qui sont dans ens.
SUBSTR(chaîne, m[,n]) Renvoie la partie de chaîne commençant au caractère m et ayant
une longueur de n.
INSTR(chaîne, sous-chaîne, début, occ) Renvoie la position du premier caractère de
chaîne correspondant à l’occurrence occ de sous-chaîne en commençant la recherche à la
position début.
LENGTH(chaîne) Renvoie la longueur de chaîne, exprimée en nombre de caractères.

13/03/2023 Prof Y.FARHAOUI 3


Fonctions diverses pour requêtes SQL
Fonctions de conversion

ASCII(chaîne)
Renvoie le nombre correspondant au code ascii du premier caractère de chaîne.
CHR(nombre)
Renvoie le caractère dont nombre est le code ascii.
TO_CHAR(nombre, format)
Renvoie la chaîne de caractères en obtenue en convertissant nombre en fonction de format.
TO_CHAR(date, format)
Renvoie conversion d'une date en chaîne de caractères.

TO_DATE(chaîne, format)
Permet de convertir une chaîne de caractères en donnée de type date. Le format est identique à
celui de la fonction TO_CHAR.
TO_NUMBER(chaîne)
Convertit chaîne en sa valeur numérique.

13/03/2023 Prof Y.FARHAOUI 4


Fonctions diverses pour requêtes SQL

Fonctions sur les dates

ADD_MONTHS(date, n) Renvoie la date obtenue en ajoutant n mois à date.


LAST_DAY(date) Renvoie la date du dernier jour du mois de date.
MONTHS_BETWEEN(date2, date1) Renvoie le nombre de mois entre date2 et date1, si
date2 est après date1 le résultat est positif, sinon le résultat est négatif.
NEXT_DAY(date, nom_du_jour) Renvoie la date du prochain jour de la semaine dont le
nom est nom_de_jour.
SYSDATE Renvoie la date et l'heure courantes du système d'exploitation hôte.

13/03/2023 Prof Y.FARHAOUI 5


Fonctions diverses pour requêtes SQL

Autres fonctions

GREATEST(expr1, expr2,...): Renvoie la plus grande des valeurs expr1,


expr2,.... Toutes les expressions sont converties au format de expr1 avant
comparaison.
LEAST: Renvoie la plus petite des valeurs expr1, expr2,.... Toutes les
expressions sont converties au format de expr1 avant comparaison.
NVL(expr_1, expr_2): Prend la valeur expr_1, sauf si expr_1 est NULL
auquel cas NVL prend la valeur expr_2.

13/03/2023 Prof Y.FARHAOUI 6


Les vues
Les vues permettent d'assurer l'objectif d'indépendance logique. Grâce à elles,
chaque utilisateur pourra avoir sa vision propre des données.
Les vues sont des tables virtuelles qui permettent de définir des filtres sur des
tables réelles.
 Une Vue est requête pouvant être manipulée comme une table

 Contrairement à une table, une vue stocke aucune donnée, seulement une
instruction SQL

 Elles permettent de limiter l'accès à certaines colonnes d'une table pour un


groupe d'utilisateurs et le type d'accès

 Manipuler la table résultat du SELECT comme si c'était une table réelle.

 Une fois créée, une vue s'utilise comme une table. Il n'y a pas de duplication
des informations mais stockage de la définition de la vue.

 Les vue permettent de protéger l’accès aux tables en fonction de chacun des
utilisateurs.
13/03/2023 Prof Y.FARHAOUI 7
Niveaux logiques pour les applications
d'entreprise distribuées

13/03/2023 Prof Y.FARHAOUI 8


Niveaux logiques pour les applications
d'entreprise distribuées
Indépendance physique et logique:

Indépendance logique : les quatre niveaux du modèle architectural représentent


l'indépendance logique. Vous pouvez modifier la logique d'application sur un niveau (par
exemple, sur le niveau service d'entreprise) indépendamment de la logique sur les autres
niveaux. Vous pouvez changer l'implémentation de la logique d'entreprise sans avoir à
modifier ou à mettre à niveau la logique du niveau présentation ou du niveau client. Cette
indépendance signifie, par exemple, que vous pouvez introduire de nouveaux types de
composants clients sans avoir à modifier les composants de service d'entreprise.

Indépendance physique : les quatre niveaux représentent également l'indépendance


physique. Vous pouvez déployer la logique dans différents niveaux et sur plusieurs types de
plates-forme matérielle (c'est-à-dire différentes configurations de processeur, différents
chipset et systèmes d'exploitation). Cette indépendance permet d'exécuter des composants
d'applications distribuées sur les ordinateurs qui sont le mieux adaptés à leurs exigences
individuelles et à l'optimisation de la bande passante réseau.

13/03/2023 Prof Y.FARHAOUI 9


Les vues
Une vue c’est une table dont les données ne sont pas physiquement stockées mais se
réfèrent à des données stockées dans d’autres tables. C’est une fenêtre sur la base de
données permettant à chacun de voir les données comme il le souhaite.

 une vue est une table virtuelle résultat d’une requête


 rôle d’une vue
réduire la complexité syntaxique des requêtes
définir les schémas externes.
définir des contraintes d’intégrité.

Exemple:

Création
d’une vue ligne

13/03/2023 Prof Y.FARHAOUI 10


Les vues : création
La commande CREATE VIEW permet de créer une vue en spécifiant le SELECT
constituant la définition de la vue :
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nom-de-vue [(attr1, …, attrn)]
AS requête
[WITH CHECK OPTION
[CONSTRAINT nom-contrainte]]
[WITH READ ONLY]

Création de la vue correspondant aux vols qui partent de Casa


CREATE VIEW vols_d_Casa
AS SELECT no_VOL, V_a, H_d, H_a
FROM vols
WHERE V_d = ’Casa’;

Le CHECK OPTION permet de vérifier que la mise à jour ou l'insertion faite à travers la
vue ne produisent que des lignes qui font partie de la sélection de la vue.
Ainsi donc, si la vue vols_d_Casa a été créée avec CHECK OPTION on ne pourra à
travers cette vue ni modifier, ni insérer des vols avec V_d ≠ ’Casa’;.
13/03/2023 Prof Y.FARHAOUI 11
Les vues : création

Il est possible d'effectuer des INSERT et des UPDATE à travers des vues, sous deux
conditions :
 le SELECT définissant la vue ne doit pas comporter de jointure,
 les colonnes résultat du SELECT doivent être des colonnes réelles et non pas des
expressions.

13/03/2023 Prof Y.FARHAOUI 12


Vues

13/03/2023 Prof Y.FARHAOUI 13


Vues

13/03/2023 Prof Y.FARHAOUI 14


Vues

13/03/2023 Prof Y.FARHAOUI 15


Vues

13/03/2023 Prof Y.FARHAOUI 16


Requêtes avec vues
Interroger une vue
interrogation de la vue correspondant aux vols qui partent de Casa
SELECT * FROM vols_d_Case;
Supprimer une vue
DROP VIEW nom de vue ;
Renommer une vue : On peut renommer une vue par la commande :
RENAME ancien_nom TO nouveau_nom;
Exemple: Suppression de la vue correspondant aux vols qui partent de Casa
DROP VIEW vols_d_Casa ;

Pour connaître les pilotes qui assurent le plus grand nombre de vols
CREATE VIEW nbre_de_vols_par_pil
AS SELECT no_PIL, count(*) AS NBR_VOLS
FROM vols V
WHERE no_PIL IS NOT NULL
GROUP BY no_PIL ;

SELECT no_PIL FROM nbre_de_vols_par_pil


WHERE NBR_VOLS =
(SELECT max( NBR_VOLS)
FROM nbre_de_vols_par_pi) ;

13/03/2023 Prof Y.FARHAOUI 17


Les vues : mise à jour
 Opérations sur les vues
INSERT
UPDATE
DELETE
 Restrictions : Ces instructions ne s’appliquent pas aux vues qui contiennent :
une jointure
un opérateur ensembliste : UNION, INTERSECT, MINUS
une clause GROUP BY, CONNECT BY, ORDER BY ou START WITH
la clause DISTINCT, une expression ou une pseudo-colonne dans la liste de sélection
des colonnes.

 Création de la vue pour la personne qui définit les vols


CREATE VIEW def_vols
AS SELECT no_VOL, V_d, D_d, V_a, D_a
FROM vols
WHERE no_VOL IS NULL AND no_PIL IS NULL;
 Définir un nouveau vol
INSERT INTO def_vols VALUES
(’V999’, ’Casa’, to_date(’01/05/16 10 :30’, ’DD/MM/RR HH :MI’), ’Paris’,
to_date(’01/05/16 10 :30’, ’DD/MM/RR HH :MI’));
13/03/2023 Prof Y.FARHAOUI 18
Les vues : mise à jour

 Supprimer un vol non affecté


DELETE FROM def_vols
WHERE no_VOL = ’V998’;

 Modifier un vol non affecté


UPDATE def_vols
SET D_d= D_d + 1 / 24, D_a= D_a + 1 / 24
WHERE no_VOL = ’V998’;

 Connaître les vols non affectés


SELECT * FROM def_vols;

13/03/2023 Prof Y.FARHAOUI 19


Les vues : mise à jour
 création de la vue pour la personne qui affecte un avion et un pilote à un vol
CREATE VIEW affect_vols
AS SELECT no_VOL, no_AV, no_PIL
FROM vols;
 Affecter un avion et un pilote à un nouveau vol
UPDATE affect_vols
SET no_AV = 101, no_PIL = 5050
WHERE no_VOL = ’V999’ AND no_AV IS NUL AND no_PIL IS NULL ;
 Affecter un nouvel avion à un vol
UPDATE affect_vols
SET no_AV = 202
WHERE no_VOL = ’V999’;
 Permuter l’affectation des pilotes de 2 vols
UPDATE affect_vols A1
SET no_PIL =
(SELECT no_PIL
FROM affect_vols A2
WHERE (A1.no_VOL = ’V100’ AND A2.no_VOL = ’V200’)
OR (A1.no_VOL = ’V200’ AND A2.no_VOL = ’V100’))
WHERE no_VOL = ’V100’ OR no_VOL = ’V200’ ;
13/03/2023 Prof Y.FARHAOUI 20
Les vues : contrôle de mise à jour
Création d’une vue de vérification : contrôle de l’insertion ou de la modification de ligne
CREATE VIEW nom de vue
AS requête
WITH CHECK OPTION ;
 Vérification des contraintes de domaine (interdiction des valeurs inconnues)
CREATE VIEW a_avions
AS SELECT * FROM avions
WHERE
no_AV > 0
AND CAP > 1
AND NOM _AV IN (’Airbus’, ’Boeing’, ’Caravelle’)
WITH CHECK OPTION ;

Vérification des contraintes de domaine (autorisation des valeurs inconnues)


CREATE VIEW aa_avions
AS SELECT * FROM avions
WHERE
no_AV > 0
AND (CAP IS NULL OR CAP > 1)
AND (NOM_AV IS NULL OR IN (’Airbus’, ’Boeing’,’Caravelle’))
WITH CHECK OPTION ;
13/03/2023 Prof Y.FARHAOUI 21
Requêtes avec vues
Contraintes de référence

1) valider l’insertion dans la table référencée


2) valider la suppression dans la table référencée
règle d’adéquation : les insertions et les suppressions se font toujours au travers des vues

Exemple : expression de clés étrangères de la relation vols

 Validation des insertions dans vols


CREATE VIEW a_avions
AS SELECT * FROM vols
WHERE
no_AV > 0
AND (no_PIL IS NULL OR no_PIL IN(SELECT no_PIL FROM pilotes))
AND (NOM_AV IS NULL OR IN (SELECT NOM_AV FROM avions))
WITH CHECK OPTION ;

13/03/2023 Prof Y.FARHAOUI 22


Requêtes avec vues
Exemple : expression de clés étrangères de la relation vols

 Validation des suppressions dans avions et dans pilotes


CREATE VIEW d_avions
AS SELECT * FROM avions A
WHERE NOT EXISTS ( SELECT * FROM vols V WHERE
A.no_AV = V.no_AV);

CREATE VIEW d_pilotes


AS SELECT * FROM pilotes P
WHERE NOT EXISTS ( SELECT * FROM vols V WHERE
P.no_PIL = V.no_PIL);

13/03/2023 Prof Y.FARHAOUI 23


Requêtes avec vues
Expression de contraintes générales

Exemple : empêcher l’affectation d’un même avion à deux vols différents dont les
tranches horaires se chevauchent

CREATE VIEW a_vols


AS SELECT * FROM vols V1
WHERE NOT EXISTS (
SELECT * FROM vols V2
WHERE V1.no_AV = V2.no_AV
AND NVL(V2.D_a, V2.D_d) >= NVL(V1.D_d, V1.D_a)
AND NVL(V1.D_a, V1.D_d) >= NVL(V2.D_d, V2.D_a))
WITH CHECK OPTION ;

13/03/2023 Prof Y.FARHAOUI 24


Les index

Un tel moyen d'accès conduit à des temps de réponse pour des tables dépassant quelques
centaines de lignes.

Une solution offerte par tous les systèmes de gestion de bases de données est la création
d'index, qui permettra de satisfaire aux requêtes les plus fréquentes avec des temps de
réponse acceptables.

Un index sera matérialisé par la création de blocs disque contenant des couples (valeurs
d'index, numéro de bloc) donnant le numéro de bloc disque dans lequel se trouvent les
lignes correspondant à chaque valeur d'index.

Un index est un objet permettant d’accélérer l’accès aux données . La création d’un index
sur une clé primaire se fait automatiquement par le système. Pour créer un index sur un
champ autre que la clé primaire on utilise la commande CREATE INDEX.

13/03/2023 Prof Y.FARHAOUI 25


Les index

13/03/2023 Prof Y.FARHAOUI 26


Les index

13/03/2023 Prof Y.FARHAOUI 27


Les index
Créer un index ordinaire
La syntaxe basique pour créer un index est la suivante :
CREATE INDEX `index_nom` ON `table`;

Il est également possible de créer un index sur une seule colonne en précisant la colonne sur
laquelle doit s’appliquer l’index :
CREATE INDEX `index_nom` ON `table` (`colonne1`);

L’exemple ci-dessus va donc insérer l’index intitulé « index_nom » sur la table nommée
« table » uniquement sur la colonne « colonne1 ». Pour insérer un index sur plusieurs
colonnes il est possible d’utiliser la syntaxe suivante:
CREATE INDEX `index_nom` ON `table` (`colonne1`, `colonne2`);

13/03/2023 Prof Y.FARHAOUI 28


Les index

Créer un index unique


Un index unique permet de spécifier qu’une ou plusieurs colonnes doivent contenir des
valeurs uniques à chaque enregistrement. Le système de base de données retournera une erreur
si une requête tente d’insérer des données qui feront doublons sur la clé d’unicité. Pour insérer
un tel index il suffit d’exécuter une requête SQL respectant la syntaxe suivante :

CREATE UNIQUE INDEX `index_nom` ON `table` (`colonne1`);

Dans cet exemple un index unique sera créé sur la colonne nommée colonne1. Cela signifie
qu’il ne peut pas y avoir plusieurs fois la même valeur sur 2 enregistrements distincts contenus
dans cette table.
Il est également possible de créer un index d’unicité sur 2 colonnes, en respectant la syntaxe
suivante:

CREATE UNIQUE INDEX `index_nom` ON `table` (`colonne1`, `colonne2`);

13/03/2023 Prof Y.FARHAOUI 29


Les clusters

Définition : Le cluster est une organisation physique des données qui consiste à regrouper
physiquement (dans un même bloc disque) les lignes d'une ou plusieurs tables ayant une
caractéristique commune (une même valeur dans une ou plusieurs colonnes) constituant la
clé du cluster.

La mise en cluster a trois objectifs :


 accélérer la jointure selon la clé de cluster des tables mises en cluster,
 accélérer la sélection des lignes d'une table ayant même valeur de clé, par le fait que ces
lignes sont regroupées physiquement,
 économiser de la place, du fait que chaque valeur de la clé du cluster ne sera stockée
qu'une seule fois.

Le regroupement en cluster est totalement transparent à l'utilisateur : des tables mises en


cluster sont toujours vues comme des tables indépendantes.

13/03/2023 Prof Y.FARHAOUI 30


Les clusters
Créer un cluster

Avant de pouvoir mettre en cluster une ou plusieurs tables il faut créer le cluster au moyen
de la commande CREATE CLUSTER dont la syntaxe est la suivante :
CREATE CLUSTER nom_cluster
(cle1 type1,
cle2 type2,
...)

où l'on donne un nom au cluster, et où l'on définit le nom et le type des colonnes
constituant la clé du cluster.

13/03/2023 Prof Y.FARHAOUI 31


Les clusters
Mise en cluster d'une table
Lors de la création de la table
L'option cluster de l'ordre CREATE TABLE permet de spécifier que la table doit être mise
en cluster.
Le cluster doit déjà exister.
CREATE TABLE nom_table
(nom_col1 TYPE1 NOT NULL,
(nom_col2 TYPE2 NOT NULL,
...)
CLUSTER NOM_CLUSTER (nom_coli, nom_colj...)
nom_coli, nom_coljsont des noms de colonnes de la table, elles seront identifiées une à une
aux colonnes clés du cluster spécifiées à la création du cluster.

Table déjà existante


En principe cela n'est pas possible, il faut donc procéder de la façon suivante :
· créer une nouvelle table avec l'option cluster et y copier le contenu de la table initiale ;
· supprimer l'ancienne table ;
· renommer éventuellement la nouvelle table.

13/03/2023 Prof Y.FARHAOUI 32


Les clusters
Retrait d'une table d'un cluster
Pour retirer une table d'un cluster il faut :
 créer une nouvelle table en dehors du cluster et copier la table en cluster dans la nouvelle
table ;
 détruire l'ancienne table ;
 la nouvelle table pourra alors être renommée pour prendre le nom de l'ancienne.
ceci ne détruit pas la table, mais la reconstruit en dehors du cluster.

Supprimer un cluster
Un cluster ne contenant aucune table peut être supprimé par la commande :
DROP CLUSTER nom_cluster ;

Remarque : Les performances du cluster ne sont valables que si on n'a pas de blocs chaînés
(ex de grande table).

13/03/2023 Prof Y.FARHAOUI 33


Les synonymes

Les synonymes est une autre désignation pour les objets (vue, tables, séquence..) de la base
de données. Il est utilisé pour faciliter l’accès à un objet. Par exemple au lieu d’accéder à une
table via un chemin d’accès (schéma.nom_table) on utilise un synonyme.
Un synonyme peut être public, ou privé. Par défaut un synonyme est privé.

Syntaxe
CREATE [PUBLIC] SYNONYM <nom_du_sysnonyme> FOR <nom_objet>

La création d’un synonyme PUBLIC ne peut se faire que par l’administrateur.


Exemple
CREATE PUBLIC SYNONYM syemp FOR Util.vol;
Ainsi au lieu de faire :
SELECT * FROM Util.vol on peut faire SELECT * FROM syemp;

13/03/2023 Prof Y.FARHAOUI 34


Les synonymes

Et la destruction d’un synonyme public se fait par :

DROP PUBLIC SYNONYM <nom_synonyme>

La création d’un synonyme non public se fait comme suit


Syntaxe
CREATE SYNONYM <nom_du_sysnonyme> FOR <nom_objet>

Et la destruction d’un synonyme non public se fait par :


DROP SYNONYM <nom_synonyme>

Pour modifier un synonyme, il faut le supprimer puis le recréer.

13/03/2023 Prof Y.FARHAOUI 35


Les séquences

La figure suivante illustre la séquence seqAff utilisée


pour initialiser les valeurs de la clé primaire numAff
de la table Affreter. Seules deux fonctions (aussi
appelées pseudo-colonnes ou directives) peuvent être
appliquées à une séquence : CURRVAL retourne la
valeur
courante, NEXTVAL incrémente la séquence et
retourne la valeur obtenue (ici le pas est de 1,nous
verrons qu’il peut être différent de cette valeur).
13/03/2023 Prof Y.FARHAOUI 36
Les séquences

13/03/2023 Prof Y.FARHAOUI 37


Les séquences

13/03/2023 Prof Y.FARHAOUI 38


Les séquences

13/03/2023 Prof Y.FARHAOUI 39


Les séquences

13/03/2023 Prof Y.FARHAOUI 40


Les séquences

13/03/2023 Prof Y.FARHAOUI 41


Les séquences

13/03/2023 Prof Y.FARHAOUI 42


Les séquences
Création d’une séquence (CREATE SEQUENCE)
Vous devez avoir le privilège CREATE SEQUENCE pour pouvoir créer une séquence dans
votre schéma. Pour en créer une dans un schéma différent du vôtre, le privilège CREATE
ANY SEQUENCE est requis.
La syntaxe de création d’une séquence est la suivante :
CREATE SEQUENCE[schéma.]nomSéquence
[INCREMENT BY entier ]
[START WITH entier ]
[ { MAXVALUE entier | NOMAXVALUE } ]
[ { MINVALUE entier | NOMINVALUE } ]
[ { CYCLE | NOCYCLE } ]
[ { CACHE entier | NOCACHE } ]
[ { ORDER | NOORDER } ] ;
Si aucun nom de schéma n’est spécifié la séquence créée vous appartient. Si aucune option
n’est précisée, la séquence créée commencera à 1 et augmentera sans fin (la limite réelle
d’une séquence est de 1029-1). En spécifiant seulement « INCREMENT BY –1 » la séquence
créée commencera à -1 et sa valeur diminuera sans limites (la borne inférieure réelle d’une
séquence est de - 1027-1).

13/03/2023 Prof Y.FARHAOUI 43


Les séquences
● INCREMENT BY: donne l’intervalle entre deux valeurs de la séquence (entier positif ou négatif
mais pas nul). La valeur absolue de cet intervalle doit être plus petite que (MAXVALUE-MINVALUE).
L’intervalle par défaut est 1.
● START WITH : précise la première valeur de la séquence à générer. Pour les séquences ascendantes,
la valeur par défaut est égale à la valeur minimale de la séquence. Pour les séquences descendantes la
valeur par défaut est égale à la valeur maximale de la séquence.
● MAXVALUE: donne la valeur maximale de la séquence (ne pas dépasser 1029-1). Cette limite doit
être supérieure ou égale à l’entier défini dans START WITH et supérieure à MINVALUE.
● NOMAXVALUE(par défaut) fixe le maximum à 1029-1 pour une séquence ascendante et à -1 pour une
séquence descendante.
● MINVALUE précise la valeur minimale de la séquence (ne pas dépasser la valeur -1027-1).
Cette limite doit être inférieure ou égale à l’entier défini dans START WITH et inférieure à
MAXVALUE.
● NOMINVALUE(par défaut) fixe le minimum à 1 pour une séquence ascendante et à la valeur -1027-1
pour une séquence descendante.
● CYCLE indique que la séquence doit continuer de générer des valeurs même après avoir atteint sa
limite. Au-delà de la valeur maximale, la séquence générera la valeur minimale et incrémentera comme
cela est défini dans la clause concernée. Après la valeur minimale,
la séquence produira la valeur maximale et décrémentera comme cela est défini dans la clause
concernée.

13/03/2023 Prof Y.FARHAOUI 44


Les séquences

● NOCYCLE(par défaut) indique que la séquence ne doit plus générer de valeurs une fois
la limite atteinte.
● CACHE spécifie le nombre de valeurs de la séquence que le cache doit contenir
(préalloca-tion de mémoire). Le minimum est 2 et le maximum théorique est donné par la
formule :
(CEIL (MAXVALUE - MINVALUE)) / ABS(INCREMENT)
● NOCACHE indique qu’aucune valeur de la séquence n’est dans le cache. Si les options
CACHEet NOCACHEsont absentes de l’instruction, vingt valeurs de la séquence seront
mises en cache.
● ORDER garantit que les valeurs de la séquence sont générées dans l’ordre des requêtes.
Il faut utiliser cette option si la séquence est employée comme un point dans le temps
(times-tamp) dans des applications concurrentes (Real Application Clusters) ou dans celles
qui fonctionnent en mode de verrous exclusifs. Cette option n’est pas importante pour les
séquences clés primaires.
● NOORDER(défaut) ne prend pas en compte l’option précédente.

13/03/2023 Prof Y.FARHAOUI 45


Les séquences(Exemple)

Créons les deux séquences (seqAff et seqPax) qui vont permettre de donner leur valeur aux
clés primaires des deux tables illustrées à la figure suivante. On suppose qu’on ne stockera
pas plus de 100 000 passagers et pas plus de 10 000 affrètements.
Servons-nous aussi de la séquence seqAff dans la table Passager pour indiquer le dernier vol
de chaque passager. seqAff sert à donner leur valeur à la clé primaire de Affreter et à la clé
étrangère de Passager.

13/03/2023 Prof Y.FARHAOUI 46


Les séquences(Exemple)

Une fois créée, une séquence seqne peut se manipuler que via deux directives qu’Oracle
appelle aussi pseudo-colonnes) :
• seq.CURRVAL qui retourne la valeur courante de la séquence (lecture seule) ;
• seq.NEXTVAL qui incrémente la séquence et retourne la nouvelle valeur de celle-ci
(écriture et lecture).

13/03/2023 Prof Y.FARHAOUI 47


Les séquences(Exemple)

13/03/2023 Prof Y.FARHAOUI 48


SQL : langage de contrôle de données (LCD)

Sécurité des données


 confidentialité
gestion des rôles et des utilisateurs
attribution de privilèges aux rôles et aux utilisateurs
définition de filtres (protection de données confidentielles, contrôle d’intégrité)
Intégrité : gestion des transactions

13/03/2023 Prof Y.FARHAOUI 49


Schéma de base de données

13/03/2023 Prof Y.FARHAOUI 50


Profils

13/03/2023 Prof Y.FARHAOUI 51


Gestion des ressources à l’aide profils

13/03/2023 Prof Y.FARHAOUI 52


Gestion des ressources à l’aide profils

13/03/2023 Prof Y.FARHAOUI 53


Gestion des ressources à l’aide profils

13/03/2023 Prof Y.FARHAOUI 54


Gestion des utilisateurs et des privilèges

Rôles et privilèges sont définis pour sécuriser l'accès aux données de la base
Ces concepts sont mis en œuvre pour protéger les données en accordant (ou retirant) des
privilèges a un utilisateur ou un groupe d'utilisateurs

Un rôle est un regroupement de privilèges. Une fois créé il peut être assigné à un utilisateur
ou à un autre rôle

Les privilèges sont de deux types:


1. Les privilèges de niveau système
Qui permettent la création, modification, suppression, exécution de groupes d'objets les
privilèges CREATE TABLE, CREATE VIEW, CREATE SEQUENCE par exemple
permettent à l'utilisateur qui les a reçu de créer des tables, des vues et des séquences.

2. Les privilèges de niveau objet


Qui permettent les manipulations sur des objets spécifiques
les privilèges SELECT, INSERT, UPDATE, DELETE

13/03/2023 Prof Y.FARHAOUI 55


SQL : langage de contrôle de données (LCD)
Gestion des utilisateurs et des privilèges

Définition : Un Rôle est un ensemble de privilèges objets et systèmes attribué à un


utilisateur, et qui permet de simplifier la gestion des droits dans Oracle. La commande
CREATE ROLE crée un rôle initialement vide.

La création d'un Rôle se déroule en trois étapes :


- CREATE ROLE - Création du Rôle.
- GRANT TO - GRANT ON - Attribution des Privilèges Objets et Systèmes au Rôle.
- GRANT TO - Attribution du Rôle à un Utilisateur.

 Création de rôle
CREATE ROLE nom-de-rôle [IDENTIFIED BY mot-de passe ];
Ajout, modification, suppression de mot de passe
ALTER ROLE nom-de-rôle [IDENTIFIED BY mot-de passe ] ;
 Suppression de rôle
DROP ROLE nom-de-rôle;

13/03/2023 Prof Y.FARHAOUI 56


Assigner des privilèges système à un utilisateur

Assigner des privilèges système à un utilisateur

Lorsqu'un utilisateur est créé avec l'instruction CREATE USER, il ne dispose encore
d'aucun droit car aucun privilège ne lui a encore été assigné.
Il ne peut même pas se connecter à la base !

Il faut donc lui assigner les privilèges nécessaires

Il doit pouvoir se connecter, créer des tables, des vues, des séquences.
Pour lui assigner ces privilèges de niveau système il faut utiliser l'instruction GRANT dont
la syntaxe

13/03/2023 Prof Y.FARHAOUI 57


Assigner des privilèges système à un utilisateur

systeme_privilege représente un privilège système (liste en annexe 1)


role représente un rôle préalablement créé
ALL PRIVILEGES représente tous les privilèges système
user représente le nom de l'utilisateur qui doit bénéficier du privilège
PUBLIC assigne le privilège à tous les utilisateurs
WITH ADMIN OPTION assigne à l'utilisateur le droit d'assigner, de retirer, de modifier
et de supprimer à son tour les privilèges du rôle reçus

13/03/2023 Prof Y.FARHAOUI 58


Assigner des privilèges système à un utilisateur

Pour que l'utilisateur puisse simplement se connecter à la base, il doit bénéficier du


privilège système CREATE SESSION

GRANT CREATE SESSION TO nom_utilisateur ;

Ensuite il faut lui assigner des droits de création de table

GRANT CREATE TABLE TO nom_utilisateur ;

Puis les droits de création de vues

GRANT CREATE VIEW TO nom_utilisateur ;

L'ensemble de ces privilèges peuvent être assignés au sein d'une même commande

GRANT CREATE SESSION ,CREATE TABLE ,CREATE VIEW TO nom_utilisateur ;

13/03/2023 Prof Y.FARHAOUI 59


Les privilèges de niveau objet

13/03/2023 Prof Y.FARHAOUI 60


Les privilèges de niveau objet

object_privilege représente un privilège objet (liste en annexe 2)


role représente un rôle préalablement créé
ALL PRIVILEGES représente tous les privilèges assignés à l'exécuteur de l'instruction
column représente le nom de colonne d'une table
schema représente le nom d'un schéma
object représente le nom d'un objet du schéma
directory_name représente le nom d'une directory
JAVA SOURCE représente le nom d'une source Java
JAVA RESOURCE représente le nom d'une ressource Java
WITH GRANT OPTION assigne à l'utilisateur de droit d'assigner à son tour le privilège
reçu à un autre utilisateur
(WITH GRANT OPTION s'applique à un utilisateur ou à PUBLIC, mais pas à un rôle)
WITH HIERARCHY OPTION assigne le privilèges aux sous-objets
13/03/2023 Prof Y.FARHAOUI 61
Les privilèges de niveau objet

Pour assigner à l'utilisateur le droit de sélectionner, insérer, modifier et supprimer des lignes
dans la table vols de l'utilisateur UTIL1

GRANT SELECT ,INSERT ,UPDATE ,DELETE ON util1.vols TO nom_utilisateur ;

Une liste de colonnes peut être indiquée dans l'instruction afin de restreindre davantage les
droits sur une table

GRANT UPDATE ( NOM_Vol, Cout_Vol ) ON util1.vols TO nom_utilisateur ;

L'utilisateur peut modifier la table util1.vols mais uniquement les colonnes NOM_Vol et
Cout_Vol

Remarque:
Pour pouvoir mettre à jour ou supprimer des lignes d'une table, les privilèges
UPDATE ET DELETE ne suffisent pas. Le privilège SELECT est nécessaire

13/03/2023 Prof Y.FARHAOUI 62


Principes généraux appliqués aux privilèges

 Un utilisateur possède automatiquement tous les privilèges sur un objet qui lui
appartient
 Un utilisateur ne peut pas donner plus de privilèges qu'il n'en a reçu

 s'il n'a pas reçu le privilège avec l'option WITH GRANT OPTION, un utilisateur
ne peux pas assigner à son tour ce même privilège

13/03/2023 Prof Y.FARHAOUI 63


Il existe un certain nombre de rôles prédéfinis (les Trois rôles existent en standard ) :

Rôle Privilèges associés à ce rôle


ALTER SESSION, CREATE CLUSTER, CREATE DATABASE
CONNECT LINK, CREATE SEQUENCE, CREATE SESSION, CREATE
SYNONYM, CREATE TABLE, CREATE VIEW
CREATE CLUSTER, CREATE PROCEDURE, CREATE
RESOURCE
SEQUENCE, CREATE TABLE, CREATE TRIGGER
DBA All system privileges WITH ADMIN OPTION
Les privilèges système assignés au rôle CONNECT:
Exemple: SQL> select * from DBA_SYS_PRIVS where grantee='CONNECT' ;
Ainsi on peut créer un rôle qui donne des droits de consultation sur les tables d'un schéma :
-- creation du role
SQL> create role consult_vol;
-- affectation des privileges au role
SQL> grant select on vol to consult_vol;
SQL> grant select on avion to consult_vol;
SQL> grant select on pilote to consult_vol;
-- session du role aux utilisateurs
SQL> grant consult_vol to user_1;
SQL> grant consult_vol to user_2;
13/03/2023 Prof Y.FARHAOUI 64
Gestion des utilisateurs
Définition d'un schéma
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.

Définition d'un user


Un utilisateur de base de données va correspondre à un login qui aura reçu certains
privilèges. Cet utilisateur sera stocké dans le dictionnaire de données et disposera d'un
espace de stockage pour ses objets qui seront alors stockés dans son schéma.

En Oracle on pourra assimiler un utilisateur avec son schéma.

13/03/2023 Prof Y.FARHAOUI 65


SQL : langage de contrôle de données (LCD)
Gestion des utilisateurs et des privilèges

 création d’utilisateur
CREATE USER nom-d’utilisateur [IDENTIFIED BY mot-de passe ] ;
ajout, modification, suppression de mot de passe
ALTER USER nom-d’utilisateur [IDENTIFIED BY mot-de passe ] ;
suppression d’utilisateur
DROP USER nom-d’utilisateur;

13/03/2023 Prof Y.FARHAOUI 66


SQL : langage de contrôle de données (LCD)
Gestion des utilisateurs et des privilèges

 attribution de privilèges
GRANT systeme-privileges | ALL [privileges ]
TO liste-roles-utilisateurs | PUBLIC
[WITH ADMIN OPTION ] ;

systeme-privileges :
CREATE ROLE
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE PUBLIC SYNONYM
CREATE TABLE
CREATE USER
CREATE VIEW

13/03/2023 Prof Y.FARHAOUI 67


SQL : langage de contrôle de données (LCD)
Gestion des utilisateurs et des privilèges
 Attribution de privilèges sur des objets oracle
GRANT liste-droits
ON nom-composant
TO liste-roles-utilisateurs
[WITH GRANT OPTION ] ;
liste-droits :
SELECT
INSERT
UPDATE
DELETE
ALTER
REFERENCES
ALL [PRIVILEGES ]

 Suppression de privilèges
REVOKE liste-systeme-privileges
FROM liste-roles-utilisateurs
 Suppression de privilèges sur des objets oracle
REVOKE liste-privileges
ON nom-composant
FROM liste-roles-utilisateurs
13/03/2023 Prof Y.FARHAOUI 68
SQL : langage de contrôle de données (LCD)
Gestion des utilisateurs et des privilèges

 attribution de rôles
GRANT liste-roles
TO liste-roles-utilisateurs
[WITH ADMIN OPTION ] ;
 suppression de rôles
REVOKE liste-roles
FROM liste-roles-utilisateurs

13/03/2023 Prof Y.FARHAOUI 69


Gestion des transactions
La gestion des transactions est au cœur du traitement d’une base de données. Pour permettre
à plusieurs utilisateurs d’y accéder simultanément, le SGBD doit gérer les transactions
avec le minimum de conflits tout en veillant à la cohérence de la base de données.
Les Systèmes de Gestion de Bases de Données permettent aux utilisateurs de gérer leurs
transactions. Ils peuvent à tout moment :
 Valider la transaction en cours par la commande COMMIT. Les modifications
deviennent définitives et visibles à tous les utilisateurs.
 Annuler la transaction en cours par la commande ROLLBACK. Toutes les modifications
depuis le début de la transaction sont alors défaites.

Une transaction est une unité logique composée d'une ou plusieurs instructions SQL.
Commande LMD 1
Commande LMD 2
................................
................................
................................
Commande LMD n
Une transaction commence implicitement à l’exécution de la première commande SQL et se
termine par un COMMIT pour validation ou un ROLLBACK pour annuler la transaction.
13/03/2023 Prof Y.FARHAOUI 70
Gestion des transactions

ORACLE est un système transactionnel qui assure la cohérence des données en cas de
mise à jour de la base, même si plusieurs utilisateurs lisent ou modifient les mêmes
données simultanément.

ORACLE utilise un mécanisme de verrouillage pour empêcher deux utilisateurs


d'effectuer des transactions incompatibles et régler les problèmes pouvant survenir.

ORACLE permet le verrouillage de certaines unités (table ou ligne) automatiquement ou


sur demande de l'utilisateur.

COMMIT: elle permet d’officialiser une mise à jour (INSERT, UPDATE, DELETE) ou
une transaction (série de commandes de manipulation de données effectuées depuis le
derniers COMMIT) sur la base de données.
ROLLBACK [TO nom_save_point]: permet d’annuler une transaction (un COMMIT).
SAVEPOINT : permet de fixer des points de sauvegarde.
Syntaxe : SAVEPOINT <nom_savepoint>.

13/03/2023 Prof Y.FARHAOUI 71


Gestion des transactions
Cohérence de plusieurs interrogations successives

Si l'utilisateur désire que l'on ne modifie pas une table pendant une session de travail,
celui-ci peut verrouiller la table en mode partagé au moyen de l'ordre sql suivant :

LOCK TABLE nom_table IN SHARE MODE NOWAIT;

Mise à jour
Pour s'assurer l'accès exclusif en modification à une table, l'on peut verrouiller cette table
en mode exclusif par la commande :

LOCK TABLE nom_table IN EXCLUSIVE MODE NOWAIT;

La table n'est alors accessible aux autres utilisateurs qu'en lecture

13/03/2023 Prof Y.FARHAOUI 72


Dictionnaire de données
Tous les systèmes de gestion de bases de données relationnels contiennent un dictionnaire
de données intégré. C'est un ensemble de tables et de vues dans lesquelles sont stockées les
descriptions des objets de la base, et qui sont tenues à jour automatiquement par le système
de gestion de bases de données.
Ces tables ou vues, comme toutes les tables ou vues, peuvent être consultées au moyen du
langage SQL.

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 :
 Utilisateurs de la base (ainsi que leurs privilèges et leur rôle)
 Noms et caractéristiques des objets contenus dans la base (tables, vues, index, clusters,
triggers, packages, ...)
 Contraintes d'intégrité
 Ressources physiques allouées à la base
...

Le dictionnaire de données sert principalement dans deux situations :


 vérifier la syntaxe et les privilèges sur une requête SQL (pour le DDL, Data Definition
Language)
 obtenir des informations sur la structure de la base de données
13/03/2023 Prof Y.FARHAOUI 73
Dictionnaire de données

La vue DICTIONARY contient la description des tables et vues du dictionnaire de


données, le contenu de cette vue varie en fonction du type d'utilisateur qui l'interroge (dba
ou non). Les tables et vues du dictionnaire de données ont chacune un nom préfixé par :

USER_XXX : décrit les objets appartenant à l'utilisateur connecté


ALL_XXX : décrit les objets accessibles à l'utilisateur connecté
DBA_XXX : décrit tous les objets (vues autorisées aux DBAs seulement...)

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.

13/03/2023 Prof Y.FARHAOUI 74

Vous aimerez peut-être aussi