Vous êtes sur la page 1sur 61

Index

Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Bases de donnes
Cours 6 : Introduction des notions avances
(Index, Dclencheurs, Transactions)

Nicolas DURAND
PolytechMarseille
Universit dAix-Marseille
nicolas.durand@univ-amu.fr
http://nicolas.durand.perso.luminy.univmed.fr/pub/

2012-2013

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

1 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Prambule

Exemple utilis dans ce cours


Client(numClient, nom, prnom, ca)
Article(numArticle, description, prixUnitaire, quantitEnStock)
Commande(numCommande, #numClient, dateCommande, montant)
LigneCommande(#numCommande, #numArticle, quantit)

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

2 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Sommaire

Index
Dfinition, caractristiques et 1er exemple
Cration et suppression dun index
Mcanismes

Dclencheurs (Triggers)

Transactions, reprise, concurrence daccs

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

3 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Dfinition

Pour complter le schma dune table (relation),


on peut crer des index.
Permet une recherche rapide dune information.
Notion dindex : mme que pour un livre
Livre
Base de donnes
Mots-cls de lindex
Pages

Nicolas DURAND

Valeurs dun attribut


Adresses mmoires o
sont stockes ces valeurs

Bases de donnes : Introduction des notions avances

2012-2013

4 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Caractristiques

Objet optionnel associ une table.


Mis jour automatiquement lors de modifications de la table.
Possibilit de crer plusieurs index sur une mme table.
Peut concerner plusieurs attributs dune mme table
(index compos).

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

5 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Exemple

Exemple
SELECT * FROM Client WHERE nom = Martin ;
Un moyen pour rcuprer la ou les lignes rpondant la clause
nom=Martin est de balayer toute la table.
Le temps de rponse sera prohibitif ds que la table dpasse
quelques centaines de lignes.
Afin doptimiser ce type de requte, on pourra indexer lattribut
nom.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

6 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Cration et suppression dun index


Cration
CREATE INDEX nom_index ON nom_table (nom_attribut1, . . .) ;
Exemple
CREATE INDEX idxNomClient ON Client (nom) ;
Suppression
DROP INDEX nom_index ;
Cration implicite dindex : chaque fois quune cl primaire ou
une contrainte dunicit sur un attribut est dfinie pour une
table.
Pour vrifier lexistence dindex : consulter les vues (ORACLE)
USER_INDEXES, USER_IND_COLUMNS, ALL_INDEXES,
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

7 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Critres dindexation
On choisira de crer un index sur :
Les attributs utiliss comme critre de jointure,
Les attributs servant souvent de critres de slection,
Sur une table de gros volume (dautant plus intressant si les
requtes slectionnent peu de lignes).
Ladjonction dindex acclre la recherche des lignes.
Mais il ne faut pas crer des index tort et travers.
Impact ngatif sur les commandes dinsertion et de suppression
(car mise jour de tous les index portant sur la table) cot.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

8 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Critres dindexation

Remarque :
Les valeurs non renseignes ne sont pas stockes dans lindex
(pour minimiser le volume), lindex nest donc daucune utilit
pour retrouver les valeurs non renseignes (lorsque le critre de
recherche est IS NULL ou IS NOT NULL).
Lindex nest pas mis en oeuvre lors de lvaluation dune requte
si la(les) attribut(s) correspondant(s) sont utiliss par
lintermdiaire dune expression, dune fonction ou dune
conversion implicite.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

9 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Exemples
La table Client bnficie dun index sur lattribut nom, dun
index sur numClient et dun index sur le champs ca.
Les index sont utiliss dans les cas suivants :
SELECT * FROM Client WHERE numClient = 500 ;
SELECT * FROM Client WHERE numClient >= 412 ;
SELECT * FROM Client WHERE numClient BETWEEN 300 AND 500 ;
SELECT * FROM Client WHERE nom = Martin ;
SELECT * FROM Client WHERE nom LIKE M% ;
Les index sont inutiles dans les cas suivants :
SELECT * FROM Client WHERE nom IS NULL ;
SELECT * FROM Client WHERE ca*10 >= 10000 ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

10 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Mcanisme daccs aux enregistrements dun index

Mcanisme interne au SGBD.


Organisation arborescente
Squentiel-index,
Arbres B+ (par dfaut dans ORACLE)

Accs par hachage


Statique,
Dynamique

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

11 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Arbres B+

Les arbres B ont t introduits par Bayer et McCreight en 1972 et


ont fait lobjet de nombreux dveloppements par la suite
Nous dcrivons une variante des arbres B : les arbres B+, qui
sont trs largement utiliss pour construire des index de BD
Un arbre B+ dordre m (entier impair >= 3) est un arbre quilibr
dont chaque noeud est enregistr dans une page stocke sur
disque

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

12 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Arbres B+ : organisation

Une feuille contient une squence denregistrements trie par


ordre croissant de cl
Une feuille est au moins moiti remplie sauf si elle est lunique
noeud de lindex
Les feuilles sont chanes entre elles dans lordre de leur
premire cl laide du pointeur p.
Un noeud non terminal contient une squence denregistrements
trie par ordre croissant de cl
Un noeud est au moins moiti rempli sauf sil est la racine

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

13 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Arbres B+ : exemple

Recherche de la cl Igor :
I > G, alors n1
I < J, alors f3,
Igor f3
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

14 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Hachage

Le hachage repose sur la construction dune fonction dite de


hachage qui applique la cl dun enregistrement fournit
ladresse de cet enregistrement
Le hachage est dit statique ou dynamique selon la fonction de
hachage est fixe ou volue durant la vie de lindex
Un index accs par hachage peut tre organis avec ou sans
rpertoire

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

15 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Hachage statique avec rpertoire

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

16 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Dfinition, caractristiques et 1er exemple


Cration et suppression dun index
Mcanismes

Hachage statique sans rpertoire


On peut viter lutilisation dun rpertoire en crant un index de N
pages contigus. Le code hach donne alors directement accs la
page contenant les cls recherches.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

17 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Sommaire

Index

Dclencheurs (Triggers)
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Transactions, reprise, concurrence daccs

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

18 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Dfinition

Un dclencheur (ou triggers) est une rgle, dite active, de la


forme : vnement-condition-action.
Procdure stocke dans la base qui est dclenche
automatiquement par des vnements spcifis par le
programmeur et ne sexcutant que lorsquune condition est
satisfaite.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

19 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Utilit

Les dclencheurs permettent :


La possibilit dviter les risques dincohrence dus la
prsence de redondance.
Lenregistrement automatique de certains vnements.
La spcification de contraintes lies lvolution de donnes.
Exemple : un salaire ne peut quaugmenter.

De dfinir toutes rgles complexes lies lenvironnement


dexcution (restrictions sur des horaires, des clients, . . .).

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

20 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Principe

Squence Evnement-Condition-Action :
Trigger dclench par un vnement spcifi par le
programmeur
Insertion, destruction, modification sur une table.

Test de la condition : si cette dernire nest pas vrifie, alors


lexcution sarrte.
Si vrifie, laction est ralise (toutes oprations sur la base de
donnes).

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

21 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Caractristiques

Un seul dclencheur par vnement sur une table.


Les dclencheurs permettent de rendre une base de donnes
dynamique.
Une opration peut en dclencher dautres, qui elles-mmes
peuvent entraner en cascade dautres dclencheurs. . .

Ce mcanisme nest pas sans danger !


Risque de boucle infinie.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

22 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Caractristiques

Manipulation simultane de lancienne et de la nouvelle valeur


dun attribut ( tests sur lvolution).
Un dclencheur peut tre excut :
Une fois pour un seul ordre SQL,
Ou chaque ligne concerne par cet ordre.

Laction peut tre ralise avant ou aprs lvnement.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

23 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Caractristiques
Concernant action :
SQL nest pas procdural
Les SGBD fournissent une extension du langage SQL
instructions de branchement conditionnel, instructions de
rptition, affectations, . . .

Langage impratif permettant de crer des vritables procdures


(procdures stockes)
PL/SQL pour ORACLE
PL/pgSQL pour PostgreSQL
T-SQL pour SQL Server
norme SQL2003 pour DB2 et MySQL5.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

24 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Cration dun dclencheur


Pour dfinir un dclencheur, il faut :
Spcifier lvnement qui dclenche laction en indiquant le type
de la mise jour (INSERT, UPDATE, DELETE), le nom de la
table et ventuellement le nom des attributs mis jour.
Indiquer si laction est ralise avant ou aprs.
Eventuellement, donner un nom lancien et au nouveau
n-uplet (uniquement le nouveau en cas dinsertion et uniquement
lancien en cas de suppression).
Dcrire la condition sous laquelle se dclenche lvnement
sous la forme dune expression SQL boolenne, c.--d. une
expression pouvant tre place dans une clause WHERE.
Dcrire laction raliser sous la forme dune procdure.
Indiquer si laction est ralise pour chaque n-uplet mis jour
ou une seule fois pour la requte.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

25 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Cration et suppression (ORACLE)


CREATE [OR REPLACE] TRIGGER nom_trigger
BEFORE | AFTER
INSERT | DELETE | UPDATE [OF col,. . .,col]
[OR INSERT | DELETE | UPDATE [OF col,. . .,col] . . .]
ON nom_table
[[REFERENCING [OLD [AS] old] [NEW [AS] new]]
[FOR EACH ROW] [WHEN (condition)]]
bloc_pl/sql ;
Recompilation : ALTER TRIGGER nom_trigger COMPILE ;
Activation/dsact. : ALTER TRIGGER nom_trigger {ENABLE |
DISABLE} ;
Suppression : DROP TRIGGER nom_trigger ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

26 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Cration (ORACLE)
REPLACE : lorsque lon veut installer une nouvelle version du
trigger
BEFORE/AFTER : prcise le moment de dclenchement du
trigger (avant ou aprs)
DELETE/UPDATE/INSERT : prcise le ou les vnements
concerns par le dclenchement. Sil y a plusieurs vnements,
on les spare avec OR.
ON TABLE prcise le nom de la table concerne.
FOR EACH ROW : prcise si le trigger doit tre dclench pour
chaque ligne mise jour. Dans ce cas, il existe deux
variables :new et :old qui contiennent respectivement le nouveau
et lancien contenu de la ligne.
WHEN(condition) : laction peut ntre dclenche que pour une
partie des lignes mises jour.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

27 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Dclencheur : exemple 1

Vrification quun prix ne peut pas baisser.


CREATE OR REPLACE TRIGGER pas_baisse_prix
BEFORE UPDATE OF prixUnitaire ON Article
FOR EACH ROW
WHEN (OLD.prixUnitaire > NEW.prixUnitaire)
BEGIN
raise_application_error(-20100, le prix dun article ne peut pas
diminuer) ;
END ;

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

28 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Dclencheur : exemple 2
Dclencheur insrant un enregistrement lintrieur dune seconde
table Client100 lorsquune opration dinsertion sest accomplie dans
une premire table Client.
Il vrifie aussi si le nouveau n-uplet possde un attribut ca suprieur
ou gal 100.
CREATE TRIGGER declencheur1
AFTER INSERT ON CLIENT
FOR EACH ROW
WHEN (NEW.ca >= 100)
BEGIN
INSERT INTO Client100
VALUES( :new.numClient, :new.nom, :new.prnom, :new.ca) ;
END ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

29 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL
ProceduraL SQL
Bloc PL/SQL
DECLARE
dclarations de variables locales
BEGIN
/* instructions, commandes SQL, structures de contrle */
EXCEPTION
/* gestion des erreurs */
END ;
DECLARE est facultatif.
BEGIN. . .END est obligatoire.
EXCEPTION est facultatif.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

30 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : dclarations
Dans DECLARE : dclaration de variables, constantes,
curseurs, exceptions.
nom_var [CONSTANT]
{type | nom_table.identifiant_de_colonne%TYPE }
[NOT NULL] [ { := | DEFAULT} expression PL/SQL] ;
Exemple
/*dclaration de la variable Vnom de type varchar sur 20 caractres :*/
Vnom varchar2(20) ;
/*dclaration de la variable Vprenom du mme type que la colonne
prnom de la table Client :*/
Vprenom client.prenom%type ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

31 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : assignation des variables


Il y a plusieurs faons dassigner une valeur une variable :
par lintermdiaire dun INTO dans un SELECT ne renvoyant
quune ligne rsultat.
par lintermdiaire dun :=
Exemple dutilisation de INTO
DECLARE
dclaration de la variable Vnom
Vnom Client.nom%type ;
BEGIN
rcupration du contenu de la colonne nom de la table client
assignation de cette valeur la variable vnom
SELECT nom INTO Vnom FROM Client WHERE numClient=1 ;
END ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

32 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : assignation des variables

Exemple dutilisation de :=
DECLARE
dclaration de la variable vnom
Vnom client.nom%type ;
BEGIN
Vnom prend la valeur Toto
Vnom := Toto ;
INSERT INTO Client VALUES (1,Vnom,NULL,0) ;
END ;

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

33 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : structures de contrle

IF condition THEN liste_de_commandes ;


[ ELSEIF condition THEN liste_de_commandes ;
[ ELSEIF condition THEN liste_de_commandes ;] . . .]
[ ELSE condition THEN liste_de_commandes ;]
END IF ;
IF nom=Toto THEN ca := ca * 2 ;
ELSEIF ca > 10000 THEN ca := ca / 2 ;
ELSE ca := ca * 3 ;
END IF ;

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

34 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : boucles (for)


FOR compteur IN [REVERSE] limite_inf .. limite_sup
liste_de_commandes ;
END LOOP ;
DECLARE
x NUMBER(3) ;
BEGIN
FOR x IN 1..100
INSERT INTO Client VALUES (x, Toto, Machin, 1) ;
END LOOP ;
END ;

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

35 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : boucles (while)


WHILE condition LOOP
liste_de_commandes ;
END LOOP ;
DECLARE
x NUMBER(3) :=1 ;
BEGIN
WHILE x<=100 LOOP
INSERT INTO Client VALUES (x, Toto, Machin, 1) ;
x :=x+1 ;
END LOOP ;
END ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

36 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : gestion des erreurs


EXCEPTION
WHEN exception1 [OR exception2 OR . . .] THEN instructions
WHEN exception3 [OR exception2 OR . . .] THEN instructions
WHEN OTHERS THEN instructions
END ;
Quelques exceptions standards :
NO_DATA_FOUND : devient vrai ds quune requte renvoie un
rsultat vide,
TOO_MANY_ROWS : requte renvoie plus de lignes
quescompt,
INVALID_NUMBER : nombre invalide.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

37 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : gestion des erreurs (exemple)


DECLARE
Nom_anomalie EXCEPTION ;
...;
BEGIN
...;
IF montant=0 THEN
RAISE nom_anomalie ;
...;
EXCEPTION
WHEN nom_anomalie THEN
/* traitement ; */
END ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

38 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

PL/SQL : quelques procdures utiles

dbms_output.put_line(message_texte) ;
dbms_output.put_line(Bonjour) ;
raise_application_error(error_number, message_texte) ;
raise_application_error(-20001, Le prix augmente : ||
to_char( :old.prixUnitaire) || -> || to_char( :new.prixUnitaire) || . Cela
nest pas autoris.) ;

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

39 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple

Dclencheur : exemple 3
Si insertion nouvelle commande alors mise jour de Client pour
assurer la cohrence de la base.
CREATE OR REPLACE TRIGGER maj_client
BEFORE INSERT ON Commande
FOR EACH ROW
DECLARE
Vclient Client.numClient%TYPE ;
BEGIN
SELECT numClient INTO Vclient FROM Client
WHERE numClient = :new.numClient ;
UPDATE Client SET ca = ca + :new.montant
WHERE numClient = :new.numClient ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO Client VALUES ( :new.numClient, NULL, NULL, :new.montant ) ;
END ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

40 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Sommaire

Index

Dclencheurs (Triggers)

Transactions, reprise, concurrence daccs


Transactions
Reprise
Concurrence daccs

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

41 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Transaction
Transaction = squence doprations qui accdent et modifient le
contenu dune base de donnes.
Unit de traitement atomique qui fait passer la base de donnes
dun tat cohrent un tat cohrent. Pendant la transaction,
ltat de la base de donnes peut tre incohrent.
Une transaction seffectue :
Compltement, les mises jour quelle a effectues sur la base
de donnes sont valides.
Incompltement (annulation ou panne), toutes les mises jour
effectues depuis le dbut de la transaction sont invalides.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

42 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Etapes dune transaction


Dlimitation par des instructions de dbut et de fin.
Dbut si :
Connexion la base de donnes, ou fin de la transaction
prcdente.

Fin si :
COMMIT (validation de la transaction), ROLLBACK (abandon de
la transaction), ou fin (normale) de session.

START
. . .suite doprations. . .
COMMIT

START
. . .suite doprations. . .
ROLLBACK

Dcoupage dune transaction en crant des points darrt :


SAVEPOINT point ;
Annulation dune partie de la transaction :
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

43 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Transaction : exemple
BEGIN
INSERT INTO Client2 (nomClient) VALUES (acheteur) ;
COMMIT ;
afficher(Le client a t insr) ;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
afficher(Le client existe dj) ;
ROLLBACK ;
WHEN OTHERS
afficher(Erreur inconnue linsertion) ;
ROLLBACK ;
END ;
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

44 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Proprits (ACID) dune transaction


Le SGBD doit assurer que toute transaction possde les proprits
suivantes :
Atomicit
Une transaction est une unit atomique de traitement.

Cohrence
Une transaction prserve la cohrence de la BD.

Isolation
Les excutions des transactions ne doivent pas interfrer les unes
avec les autres.

Durabilit
Les changements appliqus la BD par une transaction valide
doivent persister (mme suite une dfaillance).
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

45 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Rcupration de bases de donnes (Reprise)

Pannes dun SGBD :


panne dordinateur,
panne de disque.

La reprise chaud, aprs un abandon de transaction ou une


panne dordinateur, peut tre ralise automatiquement et
rapidement, en sappuyant sur la tenue dun journal qui garde en
mmoire tous les vnements dune transaction.
La reprise froid, aprs une panne de disque est plus longue
mettre en oeuvre. Elle ncessite de raliser des copies rgulires
de la BD et un archivage des mises jour entre deux copies.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

46 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Atomicit et durabilit

Le respect de latomicit peut impliquer de dfaire les effets dune


transaction lorsque celle-ci a t abandonne.
Le respect de la durabilit implique que le SGBD doit tre capable
de remettre la base de donnes en tat aprs une panne :
les mises jour faites par une transaction non confirme avant la
panne doivent tre dfaites.

Cest le gestionnaire de reprise qui assure cette tche.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

47 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Journalisation

Journal : fichier squentiel qui contient une suite


denregistrements dont chacun dcrit un vnement concernant
la vie des transactions et les modifications de la BD.
Fichier squentiel enregistr sur une mmoire stable, c.--d. une
mmoire qui thoriquement ne peut pas tre dtruite.
Si ncessaire, le journal est sauvegard rgulirement sur un
disque miroir, bandes magntiques, . . .

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

48 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Exemple dvnements journaliss

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

49 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Un extrait de journal

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

50 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Point de reprise (check point)

Point de reprise = marque dans le journal indiquant un moment


o :
Aucune transaction ntait en cours.
Toutes les donnes crites par des transactions antrieures au
point de reprise avaient t transfres sur disque.

Pour obtenir un point de reprise, il faut donc :


Interdire le dbut de nouvelles transactions,
Laisser se terminer les transactions en cours.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

51 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Concurrence daccs
SGBD : multi-utilisateurs.
Une mme information peut manipule par plusieurs utilisateurs
la fois.
problmes daccs concurrents
Unit de la concurrence = transaction.
Cas dun systme de rservation
Alice et Tom travaillent chacun dans une agence de voyage.
Alice (transaction T1) veut annuler N rservations sur un vol V1
et rserver N places sur un vol V2.
Tom (transaction T2) veut rserver M places sur le vol V1.
Lexcution concurrente de T1 et de T2 sans contraintes de
synchronisation peut produire un certain nombre de problmes.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

52 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Problmes dus la concurrence

Si aucun contrle du droulement, les problmes suivants peuvent


apparatre :
Perte de mise jour.
Lecture impropre.
Lecture de donnes incohrentes,
Lecture de donnes non confirmes.

Lecture non reproductible.


Objets fantmes.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

53 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Perte de mise jour

On devrait avoir A=70 MAIS on a A = 60 : perte de la mise jour de T1 .

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

54 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Lecture impropre (donnes incohrentes)

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

55 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Lecture impropre (donnes non confirmes)

T1 a lu une valeur de A incorrecte : tout doit se passer comme si T2


navait jamais chang A.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

56 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Lecture non reproductible

T2 (qui ne modifie pas A) devrait obtenir chaque lecture la mme


valeur pour cette donne.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

57 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Objet fantme

T1 na pas vu lajout de 4 dans E par T2 , pour T1 4 est un objet


fantme.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

58 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Rsolution des problmes de concurrence

Mcanismes internes au SGBD pour grer ces problmes.


Etude de la srialisabilit de lexcution dun ensemble de
transactions,
Verrouillage : n-uplet (toutes ses valeurs), table (toutes ses
lignes), BD,
Verrou partag, verrou exclusif.

Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

59 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Niveau disolation dune transaction


Niveaux disolation :
serializable : aucun problme. (attention. . .)
read committed (par dfaut pour ORACLE) : pas de perte de
mise jour, ni de lecture impropre.
read uncommitted (absent dORACLE) : pas de perte de mise
jour.
read only
SET TRANSACTION <option> ;
<option> : := read only | isolation level <niveau-d-isolation>
| read write | use rollback segment <rollback_segment>
<niveau-d-isolation> : := serializable | read committed
SET TRANSACTION NAME ma_trans ;
SET
TRANSACTION
ISOLATION
LEVEL
ma_trans
;
Nicolas
DURAND
Bases
de donnes : Introduction
des notions
avances SERIALIZABLE
2012-2013

60 / 61

Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs

Transactions
Reprise
Concurrence daccs

Interblocage

Rsolution de linterblocage :
Prvention, dtection.
Estampillage : transactions estampilles avec lheure de
lancement (TimeStamp, TS). die-wound, wound-wait.
Autres stratgies : no waiting, cautious waiting, timeout.
Nicolas DURAND

Bases de donnes : Introduction des notions avances

2012-2013

61 / 61