Documente Academic
Documente Profesional
Documente Cultură
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
2012-2013
1 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Prambule
Nicolas DURAND
2012-2013
2 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Sommaire
Index
Dfinition, caractristiques et 1er exemple
Cration et suppression dun index
Mcanismes
Dclencheurs (Triggers)
Nicolas DURAND
2012-2013
3 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Dfinition
Nicolas DURAND
2012-2013
4 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Caractristiques
Nicolas DURAND
2012-2013
5 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
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
2012-2013
6 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
2012-2013
7 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
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
2012-2013
8 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
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
2012-2013
9 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
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
2012-2013
10 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Nicolas DURAND
2012-2013
11 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Arbres B+
Nicolas DURAND
2012-2013
12 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Arbres B+ : organisation
Nicolas DURAND
2012-2013
13 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Arbres B+ : exemple
Recherche de la cl Igor :
I > G, alors n1
I < J, alors f3,
Igor f3
Nicolas DURAND
2012-2013
14 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Hachage
Nicolas DURAND
2012-2013
15 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Nicolas DURAND
2012-2013
16 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Nicolas DURAND
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
Nicolas DURAND
2012-2013
18 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Dfinition
Nicolas DURAND
2012-2013
19 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Utilit
Nicolas DURAND
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.
Nicolas DURAND
2012-2013
21 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Caractristiques
Nicolas DURAND
2012-2013
22 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Caractristiques
Nicolas DURAND
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, . . .
Nicolas DURAND
2012-2013
24 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
2012-2013
25 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
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
2012-2013
27 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Dclencheur : exemple 1
Nicolas DURAND
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
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
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
2012-2013
31 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
2012-2013
32 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
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
2012-2013
33 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Nicolas DURAND
2012-2013
34 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
Nicolas DURAND
2012-2013
35 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
2012-2013
36 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
2012-2013
37 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
2012-2013
38 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Introduction
Caractristiques
Cration et suppression
Exemples
PL/SQL
Exemple
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
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
2012-2013
40 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Sommaire
Index
Dclencheurs (Triggers)
Nicolas DURAND
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
2012-2013
42 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
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
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
2012-2013
44 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
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
2012-2013
45 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
2012-2013
46 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Atomicit et durabilit
Nicolas DURAND
2012-2013
47 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Journalisation
Nicolas DURAND
2012-2013
48 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
2012-2013
49 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Un extrait de journal
Nicolas DURAND
2012-2013
50 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
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
2012-2013
52 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
2012-2013
53 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
2012-2013
54 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
2012-2013
55 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
2012-2013
56 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
2012-2013
57 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Objet fantme
Nicolas DURAND
2012-2013
58 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
Nicolas DURAND
2012-2013
59 / 61
Index
Dclencheurs (Triggers)
Transactions, reprise, concurrence daccs
Transactions
Reprise
Concurrence daccs
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
2012-2013
61 / 61