Académique Documents
Professionnel Documents
Culture Documents
Quentin en Yvelines.
Version 2013
Laurent YEH
Contents
1 PROCEDURES STOCKEES PL/SQL 2
2 TRIGGERs 13
3 EXECUTION 17
4 OPTIMISATION 38
5 EXERCICES 61
1
PLAN DU COURS
Extension procédurale (à travers PL/SQL)
Introductionau langage PL/SQL
Les variables
PL/SQL : Traitements conditionnels
Traitements répétitifs
Les curseurs
Gestion d’exceptions
Procédures, Fonctions et Paquetages
L.Y. 1 L.Y. 2
2
L.Y. 3 L.Y. 4
Section
Structure d'un bloc Exemple : CONTRÔLE de STOCK
Prompt nom du cru désiré
DECLARE Accept nom-Cru
Declare
<Declarative Section>
qte number (5) ;
BEGIN Begin
<Executable Section> Select quantité into qte From Stock
Where Cru= '&nom-Cru' ;
[EXCEPTION If qte > 0
<Exception handling Section> ] Then Update stock Set quantité = quantité - 1
Where produit = '&nom-Cru ' ;
END; Le bloc Insert into Ventes Values (&nom-Cru);
Else Insert into Commande Values (&nom-Cru);
end if;
commit;
L.Y. 5 end; L.Y. 6
3
Section
Types de variables utilisées Variables de type simple
Exemple :
Variables locales :
de type simple : type de base ou booléen
Declare
référence à la métabase nom char (15) ;
de type composé : Tableau, Record salaire number (7, 2) ;
embauche DATE ; DD-MON-YY
Variables extérieures : réponse boolean ; valeur : TRUE, FALSE, NULL
■ variables d’un langage hote (ex: C) (préfixées par :)
■ paramètres (ex: SQL interactif) (préfixées par &)
■ champs d'écrans (Forms)
L.Y. 7 L.Y. 8
Variables sur la métabase Le type TABLE
reprend :
soit le même type qu'une colonne dans une table
soit la même structure qu'une ligne dans une table ■ Déclaration du type :
soit le même type qu'une variable précédemment définie TYPE nom_type IS TABLE OF
syntaxe et exemple: {type_colonne | nom_table.nom_col%TYPE}
[NOT NULL] INDEX BY BINARY_INTEGER ;
nom_var1 table.colonne%TYPE
novins vins.nvins%TYPE ;
nom_var2 table%ROWTYPE ■ Déclaration de la variable :
enreg vins%ROWTYPE ; nom_var nom_type
nom_var3 nom_var1%TYPE
qte_achat qte%TYPE ;
L.Y. 9 L.Y. 10
4
L.Y. 11 L.Y. 12
Initialisation et visibilité Exemple
L'ordre SELECT : Declare
Select col1, col2 nom char (15) ;
surface producteur.surf%TYPE ;
Into var1, var2 Begin
From table Select nom_prod, surf
[Where condition] ; Into nom, surface
From producteur
Règle :
Where id = 234;
la clause INTO est obligatoire ...
le Select ne doit ramener qu'une ligne End;
visibilité : bloc de déclaration + blocs imbriqués
L.Y. 13 L.Y. 14
5
Section
Traitements conditionnels
Exemple
Définition et syntaxe
Définition : Declare
nom char (10) ;
exécution d'instructions suivant le résultat d'une condition nv integer := 123 ;
Syntaxe : mes char (30) ;
Begin
If condition1 Then traitement1 ; Select cru Into nom From vins Where nvins=nv;
elsif condition2 then traitement2 ; If nom is null then mes := nom || ‘pas connu';
elsif nom = ‘BORDEAU'
else traitement3 ; then mes := nom || ‘Un bon vin' ;
else mes := nom || 'pas bon' ;
end if; end if;
if;
Opérateurs utilisés dans les conditions : insert into resultat values (mes) ; commit ; end ;
ce sont les mêmes que dans SQL
L.Y. 15 L.Y. 16
Section
Répétitions La boucle de base
Syntaxe :
LOOP [label]
Définition : instructions ;
possibilité d'effectuer des traitements répétitifs : clause END LOOP [label] ;
LOOP sortie de boucle :
EXIT [label] [WHEN condition]
Quatre types de boucles : Exemple :
la boucle de base Declare
nbre number := 1 ;
la boucle FOR
Begin
la boucle WHILE Loop
Insert into resultat values (nbre);
la boucle CURSOR ... FOR
nbre := nbre + 1
Exit when nbre > 10 ;
End loop ;
End;
L.Y. 17 L.Y. 18
6
L.Y. 19 L.Y. 20
Section
Curseurs Exemple Déclare
Définition et types
Declare
cursor prod_b is select nom, surf from producteurs
zone de mémoire de taille fixe utilisée par le noyau where region = ‘bourgogne’ order by surf ;
Oracle pour analyser et interpréter tout ordre SQL. nom producteurs.nom%TYPE ;
surf producteurs.surf%TYPE ; Ouverture
Deux types de curseurs : Begin
le curseur implicite : généré et géré par le noyau pour Open prod_b ; Recupere
chaque ordre SQL d'un bloc Loop
Fetch prod_b into nom, surf ;
le curseur explicite : généré et géré par l'utilisateur pour
If surf > 2500
traiter un ordre SELECT qui ramène plusieurs lignes then insert into résultat values (nom,surf);
Utilisation d'un curseur explicite en 4 étapes: end if;
exit when surf = 5 000 ; Fermeture
Déclarer, Ouvrir, traiter la ligne, fermer end loop ;
close prod_b;
End ;
L.Y. 21 L.Y. 22
7
Simplification d'écriture
Exemple curseurs dans les boucles.
Declare For enr in nom_curseur loop
cursor c1 is select nom, surf from producteurs order by surf ; traitement
c1_rec c1%ROWTYPE ;
Begin
end loop ;
Open c1; Application à l’exemple précédent
Loop Declare
Fetch c1into c1_rec ; cursor c1 is select nom, surf from producteurs order by surf ;
Exit when c1%NOTFOUND ; Begin
If c1_rec.surf> 2500
then insert into résultat For C1_rec in c1 loop
If c1_rec.surf > 2500 then
values (c1_rec.nom,c1_rec.surf);
insert into résultat values (c1_rec.nom,c1_rec.surf);
end if; end if;
end loop ; end loop ;
close c1;
End ;
End
L.Y. 27 L.Y. 28
Simplification d'écriture Curseur paramétré
Déclaration du curseur dans la boucle FOR : Objectif : réutiliser un même curseur avec des
Syntaxe : valeurs différentes dans un même bloc PL/SQL
For enrord in (SELECT ...)
Loop Syntaxe :
Traitement ;
End Loop ; évite la déclaration du curseur.
Exemple :
Declare
Begin cursor nom_curseur (par1 type, par2 type, ...) is
For enr in (select nom, surf from producteurs order by surf ) ordre_select
Loop
If enr.surf > 2500 Begin
Then Insert into résultat Open nom_curseur (val1, val2, ...) ;
Values (c1_rec.nom,c1_rec.surf);
End if ;
End loop ;
End ;
L.Y. 29 L.Y. 30
9
Exemple
Prompt Nombre de tuples
La clause CURRENT OF
Accept nb
Declare
Objectif :
Cursor c1 (psurf number) is select nom, surf Accéder directement en modification ou en suppression à
from producteurs where surf = psurf ; la ligne ramenée par Fetch
Begin
il faut verrouiller les lignes lors de la déclaration du
For v in (select nom,surf from producteurs)
loop curseur ( ... For Update of nom_col ...)
exit when v%rowcount > &nb ;
For p in c1 (v.surf)
Loop
Insert into resultat
values (p.surf, v.nom || ‘ meme surf
que : ' || p.nom);
End loop ;
End loop ;
end ;
Select * from resultat;
L.Y. 31 L.Y. 32
Section
Gestion des erreurs
Exemple 1 Section Exception
Declare Notion d'exception : traitement d'erreurs
Cursor c1 is select select nvins, qte from recoltes
for update of qte ;
Types d'erreurs :
Begin erreurs internes Oracle (Sqlcode <> 0)
For c1_rec in c1 erreurs programme utilisateur
Loop If c1_rec.qte > 1 500
Then Insert into resultat
Règles à respecter :
values (c1_rec.nvins, c1_rec.qte - 8); définir et donner un nom à chaque erreur
associer ce nom à la section Exception (partie declare)
Update recoltes set qte = qte - 8 définir le traitement dans la partie Exception
Where Current of c1 ; end if,
end loop ;
end;
L.Y. 33 L.Y. 34
10
L.Y. 35 L.Y. 36
Gestion d’erreurs Exemple
Syntaxe : Exemple : traiter l'erreur 1002 : Fetch out of sequence
Declare...
nom_erreur exception ; Declare
pragma_exception_init (nom_err, code_err) ; fetch_out_of exception;
... pragma_exception_init (fetch_out_of, - 1002);
Begin Begin
... Traitement du curseur
si erreur Oracle, passage automatique dans la ...
section Exception. Exception
Exception When nom_erreur then (traitement) ; When fetch_out_of then (traitement erreur) ;
[When others then (traitement) ; ] End ;
L.Y. 37 L.Y. 38
11
Exception
When others then code := sqlcode ;
mess := sqlerrm ; lg := length (mess) ;
L.Y. 41 L.Y. 42
12
Exemple de package
Exemple de fonction et passage par ref
Function Qte_ok (levin number) Return BOOLEAN is package actions_vins is -- spécification
laqte integer; procedure offre_promo (nvin number);
Begin procedure tester (nvin number, nom char, ...);
Select qte into laqte From recolte Where nvins= levin; procedure perte (nvin number);
Return (laqte>=100) AND (laqte <= 10000); END actions_vins ;
END Qte_ok ;
package BODY actions_vins is
■ Utilisation :
procedure offre_promo(nvin number) IS ...
IF Qte_ok(
Qte_ok 123) THEN …
procedure tester (nvin number, nom char, ...) IS
Begin INSERT INTO vins (...)
Procedure Add_10 (resu in out number) is
End embauche;
Begin
procedure perte (nvin number) IS ...
resu:=resu+10;
END Add_Qte ; END actions_vins ;
MAIS : Triggers des SGBD commerciaux" Trigger garder à jour le nombre de crédits"
Voir : http://sgbd.developpez.com/oracle/ora-04091/ !
Interface
Analyseur sémantique
Moteur d’exécution
Opérations relationnelles
Benjamin Nguyen
M2 ACSISs
Méthodes d’accès aux données
Page 2
– Tri à bulle RAM
…
– , etc. IN 1 IN 2
– Passe 1 RAM
• NB : Contexte base de données • Lire 2 pages
– Les données sont sur disque • Trier le résultat et l’écrire
• Utilisation mémoire : 3 pages
– Et ne tiennent pas en mémoire… Page 1
… Page N-1
Passe 0 • Trier un fichier de N pages avec B pages en RAM (en fait B+1…)
3,4 2,6 4,9 7,8 5,6 1,3 2 – Passe 0 : utiliser B pages, produire ⎡N / B⎤ paquets (ou runs) triés de B pages
Passe 1
• Fichier de N pages 2,3 4,7 1,3
⎡N / B⎤ runs
4,4 1,2
…
IN B … …
… …
B pages
…
OUT
3,4 …
… …
4,5 IN B
• Optim. : stratégie ‘Devide & Conquer’ 6,6 Page BxB Page BxB
9 10
19
Sélection σ : utilisation des index (1) Sélection σ : utilisation des index (1)
• Le coût d’utilisation de l’index dépend • Le coût d’utilisation de l’index dépend
– Du nombre de tuples/Rid qualifiés – Du nombre de tuples/Rid qualifiés
– Du fait que l’index soit plaçant ou non – Du fait que l’index soit plaçant ou non
NB : qu’est-ce qu’un index plaçant ? Dense ? NB : qu’est-ce qu’un index plaçant ? Dense ? Tuples dans les feuilles = Plaçant; Sur un fichier
trié ne contenant pas toutes les clés = non dense
• NB: critères de sélection d’abord convertis en ‘forme normale • NB: critères de sélection d’abord convertis en ‘forme normale
conjonctive’ conjonctive’
– ‘(jour<01-fev-07 AND Nom=‘Bob’) OR id=5 OR did=3’ – ‘(jour<01-fev-07 AND Nom=‘Bob’) OR id=5 OR did=3’
– FNC : ‘(jour<01-fev-07 OR id=5 OR did=3) AND (Nom=‘Bob’ OR id=5 – FNC : ‘(jour<01-fev-07 OR id=5 OR did=3) AND (Nom=‘Bob’ OR id=5
OR did=3)’ OR did=3)’
– On ne discutera que des cas sans OR… – On ne discutera que des cas sans OR…
15 16
Sélection σ : utilisation des index (2) Sélection σ : utilisation des index (2)
• Quand utiliser l’index • Quand utiliser l’index
– Si la sélectivité est ‘très’ petite – Si la sélectivité est ‘très’ petite
• Ex. • Ex.
SQL> SELECT *! SQL> SELECT *! 1) 1 appel, 1000 I/Os, ≈2 sec.
> FROM Medicament > FROM Medicament 2) Plusieurs appels (index), 100 I/Os, < 1 sec.
> WHERE M.Nom = ‘N%';! > WHERE M.Nom = ‘N%';! 3) Jusqu’à 10.000 I/Os, > 100 sec.
Quels sont les coûts de l’accès: Quels sont les coûts de l’accès:
1) Sans index; 2) Avec index plaçant sur Nom; 3) Avec index non plaçant sur Nom 1) Sans index; 2) Avec index plaçant sur Nom; 3) Avec index non plaçant sur Nom
– Médicaments = 100.000 tuples, 1000 pages contiguës; – Médicaments = 100.000 tuples, 1000 pages contiguës;
– Noms uniformément distribués; I/O = 10ms + nbpages x 0,2ms – Noms uniformément distribués; I/O = 10ms + nbpages x 0,2ms
– Il y a 10 % de médicaments commençant par un N (=‘N%’) – Il y a 10 % de médicaments commençant par un N (=‘N%’)
• NB : optimisation des accès aux données par index non plaçant • NB : optimisation des accès aux données par index non plaçant
– Trouver dans l’index les Rid qualifiés – Trouver dans l’index les Rid qualifiés
– Trier les Rid qualifiés – Trier les Rid qualifiés
– Accéder les tuples sur disque dans l’ordre des Rid – Accéder les tuples sur disque dans l’ordre des Rid
(pour ne pas accéder 2 fois la même page…) (pour ne pas accéder 2 fois la même page…)
17 18
21
Page D
Page 2
Page 1
IN M-2
DOC ∞ VIS
IN 2
IN 1
…
…
7 3 …… …… ……
• Coût = Nombre d’I/Os … … …… …… ……
…
Page K
Page 2
Page 1
OUT M
VIS
…
(on ne distingue pas I/Os séquentielles et aléatoires
Page V
Page 2
Page 1
IN M-1
…
– Ex. pour chaque docteur, récupérer la clé de jointure, parcourir l’index sur visite et – Ex. pour chaque docteur, récupérer la clé de jointure, parcourir l’index sur visite et
retrouver les visites partageant cette clé retrouver les visites partageant cette clé
• Coût • Coût
– Brute Force (ou M = 3) – Brute Force (ou M = 3)
• Coût = |DOC| + ||DOC|| × n + ||VIS|| • Coût = |DOC| + ||DOC|| × n + ||VIS||
– M = |VIS| + p – M = |VIS| + p
• Coût = |DOC| + p + |VIS| • Coût = |DOC| + p + |VIS|
25 26
23
Ex. de jointure par index Jointure par Tri Fusion (Sort Merge Join)
• Indexation B+ de VIS sur VIS.docid (donc VIS est relation interne…) • Principe de l’algorithme : (équi-jointure DOC.id = VIS.docid)
– Trier DOC (resp. VIS) sur DOC.id (resp. VIS.docid)
• Hypothèses – Parcourir simultanément DOC et VIS pour ‘fusionner’ les tuples 1
VIS
id docid date ……
– |DOC| = 10, ||DOC|| = 1000, |VIS| = 1000, ||VIS|| = 100000 – Produire les tuples résultat 4 3 5 1 …… ……
– Index = 1000 clés, 100000 Rid p = 100, n = 3 6 1 …… ……
• Détail de la ‘fusion’
• Coût de la jointure par index ? 1. Initialiser tD.id et tV.docid à 0 1
DOC 4 3 3 2 …… ……
id Nom spécialité …… 2 2 …… ……
Etc.
2. Parcourir DOC jusqu’à rencontrer 4 2 1 5 Pédiatre …… 4 3 …… ……
• Si l’index est plaçant • Si l’index est non plaçant un tuple tD / tD.id ≥ tV.docid 4 2 2 2 Radiologue …… 1 3 …… ……
(NB : partie de l’index en RAM…) • 1I/O par visites tV qui joint avec tD
• 1I/O pour toute visite tV qui joint avec tD – Total (min.) = 100.110 I/Os … et reprendre à 2 jusqu’à la fin du parcours de DOC et VIS
– Total (min.) = 1.110 I/Os NB : 10+100 (lecture index Min.)
NB : 10 + 100 (lecture index Min.) + +100000 (tuples de VIS) • Intuition sur le coût de la jointure
1000 (pages de VIS) – Coût du tri de DOC + coût du tri de VIS
27 – Coût de lecture de DOC et VIS pour fusionner (écriture du résultat non comptabilisée…) 28
Coût de la jointure par Tri Fusion Jointure par hachage (Hash Join)
• Phase de tri • Principe de l’algorithme : (équi-jointure DOC.id = VIS.docid)
– Phase de construction (build)
– Coût du tri des tuples d’un fichier de taille |DOC| • Charger DOC, hacher en RAM en n paquets, avec n du même ordre que ||DOC||
• 2×|DOC|×( ⎡log M |DOC|/M⎤ + 1 ) - |DOC|
(car on ne compte pas l’écriture du résultat final) DOC
h=1
h=2
– Avec M = √ |DOC|
Page D
Page 2
Page 1
h
…
IN 1 M-2 pages
• 2×|DOC|×( ⎡log √ |DOC| |DOC|/ √ |DOC| ⎤ + 1 ) - |DOC| = 2×|DOC|×(1+1)-|DOC| …
Page D+V
IN 3
OUT M
Page 2
Page 1
Page V
Page 2
Page 1
• Si M ≥ √(|DOC|) et √|VIS|) 3 × (|DOC|+|VIS|) I/Os …
…
h
…
IN 1
…
IN M-1
RAM
• Si une relation est déjà triée (ex. DOC, sur id) • Coût
– on économise la phase de tri : ici environ 2 × |DOC| – Hypothèse : M ≥ |DOC| (NB: sinon la relation DOC ne tient pas en mémoire…)
– Le coût est alors : |DOC| + 3 |VIS| I/Os – I/Os = |DOC| + |VIS|
Différence avec la boucle imbriquée ?
29 30
24
Jointure par hachage (Hash Join) Jointure par hachage (Grace Hash Join)
• Principe de l’algorithme : (équi-jointure DOC.id = VIS.docid) • Principe de l’algorithme : (équi-jointure DOC.id = VIS.docid)
– Phase de construction (build)
• Charger DOC, hacher en RAM en n paquets, avec n du même ordre que ||DOC||
– Phase de construction (build) : Hacher DOC et VIS avec h sur disque
• Hachage en n partitions, n est calculé de façon à ce que |partition| < M
h=1
DOC h=2
IN 2 Page 1 Page 2
Page D
Page 1
Page 2
Page D
Page 2
Page 1
…
IN 1
h
…
IN 1 M-2 pages h …
…
RAM IN M Page … Page D
VIS
RAM h = ||DOC|| Page 1 Page 2 Page 3
Page V
Page 2
Page 1
h=1
h
…
h=n Page … Page V
RAM
– Phase de test (probe)
• Parcourir VIS, pour chaque tuple tester la table de hachage et produire les résultats
– Phase de test (probe) : Joindre DOC et VIS par partition
DOC
VIS IN 2 DOC ∞ VIS • Les tuples d’1 partition de DOC matchent uniquement avec 1 partition de VIS
• Charger 1 partition de DOC (M pages), et le hacher avec h’ ≠ h
Page D+V
IN 3
OUT M
Page 2
Page 1
Page V
Page 2
Page 1
…
…
h
…
IN 1
… • Parcourir la partition correspondante de VIS en appliquant h’
IN M-1
RAM
IN 2
Page 1 Page 2 h’ IN 3
• Coût
h’=2
Page 3 Page 4 Page 5
…
IN M-1 DOC ∞ VIS
– Hypothèse : M ≥ |DOC| (NB: sinon la relation DOC ne tient pas en mémoire…) Page … Page D
…
Page D+V
h’
Page 2
Page 1
– I/Os = |DOC| + |VIS| Page 1 Page 2 Page 3 OUT
…
IN 1
La fonction de hachage permet de chercher
Différence avec la boucle imbriquée ? rapidement les tuples qui joignent en mémoire… Page … Page V RAM
31 32
Coût de la jointure (Grace Hash Join) Coût de la jointure (Grace Hash Join)
• Hypothèse : M ≥ √ (|DOC|) et √ |VIS|, explication… • Hypothèse : M ≥ √ (|DOC|) et √ |VIS|, explication…
– Nombre de partitions n ≤ M-1 Pourquoi ? – Nombre de partitions n ≤ M-1 Pourquoi ? 1 page par partition en RAM…
– Taille de la partition la plus grosse < M-2 Pourquoi ? – Taille de la partition la plus grosse < M-2 Pourquoi ? Doit tenir en RAM lors du probe…
– Avec des partitions de taille similaire, et en maximisant n – Avec des partitions de taille similaire, et en maximisant n
• on a : n = M-1 et |DOC|/(M-1) < M-2 M ≥ √ (|DOC|) • on a : n = M-1 et |DOC|/(M-1) < M-2 M ≥ √ (|DOC|)
– NB: si h réparti mal les données, des partitions peuvent être trop grosses – NB: si h réparti mal les données, des partitions peuvent être trop grosses
• Appliquer récursivement l’algo. aux partitions trop grosses de DOC et VIS • Appliquer récursivement l’algo. aux partitions trop grosses de DOC et VIS
• Comparaison Tri-Fusion vs. Grace Hash Join • Comparaison Tri-Fusion vs. Grace Hash Join
– Avec assez de mémoire RAM, les deux algorithmes ont le même coût – Avec assez de mémoire RAM, les deux algorithmes ont le même coût
• M ≥ √ (|DOC|) et √ |VIS| • M ≥ √ (|DOC|) et √ |VIS|
– Par hachage : plus facile à paralléliser – Par hachage : plus facile à paralléliser
– Par Tri Fusion : moins sensible à la distribution; résultat trié – Par Tri Fusion : moins sensible à la distribution; résultat trié
33 34
25
Jointure par hachage (Hybrid Hash Join) Jointure par hachage (Hybrid Hash Join)
• L’approche Grace Hash Join est pessimiste • Principe de l’algorithme (suite)
– On suppose par avance que ni DOC ni VIS ne tiennent en mémoire – 2ème phase : débordement mémoire
• L’approche Hybrid Hash Join est optimiste DOC h
IN …
– En 4 phases
1) hachage, 2) débordement, 3) test en mémoire, 4) test en débordement IN 2
IN 3
IN …
…
… IN …
DOC
Page 1
h
h=1 h=2 h=n
– Des partitions sont choisies pour être reportées sur disque
IN 2 IN … IN … IN …
Page 2
IN 1 IN 3
……
IN
…
• Libère de l’espace mémoire
…
… IN … …
Page D
RAM
IN … IN M
– Le parcours de DOC continue… (jusqu’à la fin de DOC)
35 36
Jointure par hachage (Hybrid Hash Join) Jointure par hachage (Hybrid Hash Join)
• Principe de l’algorithme (suite) • Principe de l’algorithme (suite)
– 3ème phase : lecture de VIS – 4eme phase : jointure des partitions sur disque
– Charger une partition de DOC, la hacher avec h’ ≠ h
DOC VIS
IN 2 IN … IN … IN … h’
DOC ∞ VIS
IN 3
IN…… h=m
… … h=1 h=2 Page 1
… IN … IN …
DOC ∞ VIS IN 2 IN … IN … IN …
IN … IN 1 Page 2
Page 1 IN 3
……
IN
…
… IN … …
VIS Page 2
h
RAM IN … IN M
Page 1 …
h=1 h=2 h=n … h’
Page 2
IN … IN …
IN 1 IN 1
… ……
IN OUT Page … Page D+V
…
Page V IN M
RAM
IN 2 IN … IN … IN …
IN 3
IN……
… …
… IN … IN …
43 44
Exécution matérialisée Exécution pipeline (1)
• Evaluation complète d’un opérateur à la fois • Plusieurs opérateurs fonctionnent ‘simultanément’
– Chaque opérateur prend en entrée une table – Sans écrire de résultat intermédiaire (se passe directement les tuples
(ou deux pour les opérateurs binaires)
π
résultats)
– Et produit une table en sortie – Ils forment alors une chaîne pipeline π
• Résultats de chaque opérateur matérialisé Probe
• Ex. Dans l’arbre précédent
– Sur disque dans des relations temporaires Probe
σ – 1) Accéder VIS et construire la table de hachage
Age > 32 Build
– 2) Accéder DOC et sélectionner (age > 32) σ
Age > 32 Build
49 50
29
53 54
30
Query 2
– Une moyenne ?
– Max au Min ?
Op. 2 Op. 3
• SORT_AREA_SIZE
• Tuning !
Query 1
– Au moment de la compilation de la requête ?
– Au démarrage de l’exécution ?
Disponible
Nécessaire
Op. 1
– Pendant l’exécution ?
57 58
31
Conclusion (2)
• Sans considérer les différents algorithmes ni la consommation mémoire
– Jointure de 5 relations (avec produits cartésiens)
• 120 arbres linéaires différents
• 1620 arbres bushy différents
Probe 3
– Jointure de 10 relations (idem) Im
po
Im
po
Les Opérateurs
b b po
l l Im
I
Scan T
e e po
m
R S T U Build 1 Scan S
Im
po
Arbre linéaire gauche (left deep tree) Arbre Bushy (Bushy tree) Scan R
I
Probe 3
Impo Impos
sible
Probe 3 Arbre linéaire droit (right deep tree)
Build3 ScanU
Im
Im po
po ssi
U Impos ssi
Probe 2 Probe 2 Im
po
Impos
sible
d'affic Impo
Build 3 Im
ssi
her Impos po
T
l'imag Im
Build2
Im ssi
e. po
po
ScanT
I
U
Votre ssi
Probe 1
ssi
ordin
ateur Impos Imp
manq
ue Im
po
sible
R S m po ffic
Impo
Impos
Im
po
p ssi
T her
l'im
Build1
age
ssi
ScanS Build 1 .
ScanT Scan R
S
Impos
Im
po R
ScanR ssi
Scan S
Slides empruntés à Pascale Borlat Salamet – Oracle France
Complexité de la phase d’optimisation ! (objet du prochain cours…)
59 60
61 62
32
63 64
Le Star Join Index d’Oracle
65 66
33
67 68
Objectif du module ‘gestion de mémoire’
69 70
34
Occupation mémoire sur un serveur BD Gestion par l’OS vs. par le SGBD
• Sur un serveur SGBD, la mémoire est occupée par : • L’OS considère toutes les pages comme équivalentes
– le logiciel
– des pages BD – Pas de connexion avec le verouillage/journalisation
– des pages temporaires – Application d’heuristiques (LRU)
– des structures de données du SGBD (globales au SGBD) – Utilisation d’un disque de swap
– des structures liées aux transactions
• Le SGBD a une connaissance du contenu des pages
• Si le serveur n’est pas dédié, on a aussi – Il peut utiliser les infos fournies aux modules de gestion de
– des données, programmes, etc... verrous et de journaux
– Il contrôle complètement la mémoire disponible
• Intérêt d’un serveur dédié ? Influence sur les algorithmes utilisés
– Il peut contrôler le swap
Influence sur la journalisation
– Les caches peuvent être optimisés suivant d’autres critères
71 72
BD: Partie chaude / froide / active Ordres de grandeur
Taille de mémoire vive (RAM) disponible pour le SGBD
• Taille de la base de données
– Place sur le disque du fichier BD 1 To BD mémoire ... ???
• Taille de la base de données active
– Taille des pages accédées à un instant donné par toutes les transactions 100 Go BD hautes performances
• Taille de la base de données chaude (80% des accès)
– Taille des pages accédées très fréquemment par toutes les transactions 10 Go BD production (banque, etc..)
• Taille de la base de données froide (20% des accès)
– Taille des pages accédées peu fréquemment par toutes les transactions 1 Go BD PME
• La modélisation des ‘workloads’
– est complexe... 0,1 Go BD personnelles (PC...)
– et a une grande influence sur les algorithmes à utiliser…
Mémoire Physique
vous devrez peut-être supprimer l'image avant de la réinsérer.
réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque Mémoire Physique Impossible d'afficher l'image. Votre ordinateur manque
Systèmes 32 bits
peut-être de mémoire pour ouvrir l'image ou l'image est peut-être de mémoire pour ouvrir l'image ou l'image est
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. endommagée. Redémarrez l'ordinateur, puis ouvrez à endommagée. Redémarrez l'ordinateur, puis ouvrez à
Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer nouveau le fichier. Si le x rouge est toujours affiché, vous nouveau le fichier. Si le x rouge est toujours affiché, vous
Impossible d'afficher l'image. Votre ordinateur l'image avant de la réinsérer. devrez peut-être supprimer l'image avant de la réinsérer. devrez peut-être supprimer l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir
manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée.
l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau
Redémarrez l'ordinateur, puis ouvrez à le fichier. Si le x rouge est toujours affiché,
4 Go
nouveau le fichier. Si le x rouge est toujours vous devrez peut-être supprimer l'image avant
affiché, vous devrez peut-être supprimer de la réinsérer.
l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image
est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché,
vous devrez peut-être supprimer l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être
de mémoire pour ouvrir l'image ou l'image est endommagée.
système
Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x
rouge est toujours affiché, vous devrez peut-être supprimer
l'image avant de la réinsérer. Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée.
Impossibl Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être
supprimer l'image avant de la réinsérer. e
Mémoire Virtuelle
d'afficher
l'image.
Impo
Impossi
ble
Impossible d'afficher l'image. Votre ordinateur d'affiche
Swapping
manque peut-être de mémoire pour ouvrir r
l'image ou l'image est endommagée. l'image.
Redémarrez l'ordinateur, puis ouvrez à
Systèmes 64 bits
nouveau le fichier. Si le x rouge est toujours
affiché, vous devrez peut-être supprimer
l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur
manque peut-être de mémoire pour ouvrir l'image
ou l'image est
Impossible endommagée.
d'afficher l'image. Redémarrez
Votre ordinateur
Zone de swap
manque peut-être de mémoire pour ouvrir l'image
18 exa-octets
ou l'image est endommagée. Redémarrez
l'ordinateur, puis ouvrez à nouveau le fichier. Si le x
rouge est toujours affiché, vous devrez peut-être Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x
Impossible d'afficher l'image. Votre ordinateur
supprimer
Impossible l'image avant
d'afficher de la Votre
l'image. réinsérer.
ordinateur rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
Fichier BD
manque peut-être de mémoire pour ouvrir l'image
ou l'image est endommagée. Redémarrez
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est
Impos
(18 millions de
Tera-octets)
toujours affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
Mémoire Virtuelle
sible
d'affic
I
Impo
ssibl
e
– ‘swapping’
d'afficher
d'afficher d'afficher d'afficher
P3
l'image. Votre
P1 P2 P4
l'image. Votre l'image. Votre ordinateur l'image. Votre
ordinateur ordinateur manque peut- ordinateur
manque peut- manque peut- peut-être
être de de manque peut-
peut-être
être de de peut-être
être de de mémoire pour peut-être
être de de
mémoire pour mémoire pour ouvrir l'image mémoire pour
ouvrir l'image ouvrir l'image ou l'image est ouvrir l'image
ou l'image est ou l'image est ou l'image est
75 76
Option 2 : Mapping OS / Swapping BD Option 3: Mapping BD / Swapping BD
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à
ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer
rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
Physical memory
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur Impossible d'afficher l'image. Votre ordinateur
manque peut-être de mémoire pour ouvrir l'image manque peut-être de mémoire pour ouvrir l'image
ou l'image est endommagée. Redémarrez ou l'image est endommagée. Redémarrez
l'ordinateur, puis ouvrez à nouveau le fichier. Si le l'ordinateur, puis ouvrez à nouveau le fichier. Si le
x rouge est toujours affiché, vous devrez peut- x rouge est toujours affiché, vous devrez peut-
être supprimer l'image avant de la réinsérer. être supprimer l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir
l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier.
Si le x rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
réinsérer. Impossible d'afficher l'image. Votre ordinateur manque peut-être de
mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez
l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours
SGBD
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché,
Imposs affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
vous devrez peut-être supprimer l'image avant de la réinsérer. ible
Mémoire Virtuelle
d'affich
er Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis
Im ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
Working Memory
nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer
Impos
l'image avant de la réinsérer.
sible
d'affic
her
l'imag
Virtual Memory
peut-être de mémoire pour ouvrir l'image ou l'image
est endommagée.
Impossible Redémarrez
d'afficher l'ordinateur,
l'image. Votre puis
ordinateur ouvrez
manque
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à peut-être de mémoire pour ouvrir l'image ou l'image
Zone de swap
nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la réinsérer. est endommagée. Redémarrez l'ordinateur, puis
Fichier BD
ouvrez à nouveau le fichier. Si le x rouge est toujours
affiché, vous devrez peut-être supprimer l'image avant
Impossible
de d'afficher l'image. Votre ordinateur
la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque
peut-être de mémoire pour ouvrir l'image ou l'image
est endommagée. Redémarrez l'ordinateur, puis ouvrez
Memory Cache
Management Operating system
• Le système est responsable du
Mapping Swapping Swapping
– ‘mapping’ du fichier BD sur la mémoire virtuelle Impossible d'afficher l'image. Votre ordinateur manque peut-
Impossible d'afficher l'image. Votre ordinateur manque peut- être de mémoire pour ouvrir l'image ou l'image est
Impossible d'afficher l'image. Votre ordinateur manque peut-
Swap BD
endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-
Swapping disk
endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut- être supprimer l'image avant de la réinsérer.
le fichier. Si le x rouge est toujours affiché, vous devrez peut-
DB Disk
être supprimer l'image avant de la réinsérer.
être supprimer l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-
Impossible d'afficher l'image. Votre ordinateur manque peut-
77 78
36
Mémoire Physique
d'afficher
l'image. Votre
ordinateur
manque peut-
être de mémoire
pour ouvrir
Impossible
l'image ou
l'image est
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir endommagée.
Impossible d'afficher l'image. Votre ordinateur manque Impossible d'afficher l'image. Votre ordinateur manque l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le Redémarrez
peut-être de mémoire pour ouvrir l'image ou l'image est peut-être de mémoire pour ouvrir l'image ou l'image est fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la l'ordinateur,
endommagée. Redémarrez l'ordinateur, puis ouvrez à endommagée. Redémarrez l'ordinateur, puis ouvrez à réinsérer. puis ouvrez à
nouveau le fichier. Si le x rouge est toujours affiché, vous nouveau le fichier. Si le x rouge est toujours affiché, vous nouveau le
devrez peut-être supprimer l'image avant de la réinsérer. devrez peut-être supprimer l'image avant de la réinsérer. Impossible fichier. Si le x
Impossible
d'afficher l'image. rouge est
toujours affiché,
Page Page
Impossible d'afficher l'image. Votre ordinateur Impossible d'afficher l'image. Votre ordinateur
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir vous devrez
Impossible manque peut-être de mémoire pour ouvrir manque peut-être de mémoire pour ouvrirl'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le peut-être
M em o ry
d'afficher l'image. l'image ou l'image est endommagée. Redémarrez l'image ou l'image est endommagée. Redémarrez
fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer l'image avant de la supprimer
l'ordinateur, puis ouvrez à nouveau le fichier. Si l'ordinateur, puis ouvrez à nouveau le fichier.
réinsérer.
Si le l'image avant de
le x rouge est toujours affiché, vous devrez x rouge est toujours affiché, vous devrez peut- la réinsérer.
descriptor descriptor
Impossible
peut-être supprimer l'image avant de la être supprimer l'image avant de la réinsérer.
d'afficher l'image.
réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée.
Impossibl Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être Impossible Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pourI
supprimer l'image avant de la réinsérer. e d'afficher l'image. ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez àm
Mémoire Virtuelle
d'afficher nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être p
l'image. Impossible supprimer l'image avant de la réinsérer. o
Votre d'afficher l'image.
Imp
Impossi Im Impossible
ble po d'afficher l'image.
d'affiche ssi Impossible I
r d'afficher m
Impossible p
l'image. l'image.
d'afficher l'image. o
Votre
ordinateur s
Impossible manque s
V irtu a l
d'afficher l'image. peut-être de
Impossible
Page
d'afficher l'image. Impossible d'afficher l'image. Votre ordinateur
manque peut-être de mémoire pour ouvrir
l'image ou l'image est endommagée. Redémarrez
Impossible l'ordinateur, puis ouvrez à nouveau le fichier. Si
d'afficher l'image. le x rouge est toujours affiché, vous devrez
descriptor
peut-être supprimer l'image avant de la
réinsérer.
Memory Cache
Impossible
d'afficher l'image.
système
Impossible
d'afficher l'image.
Manager
Impossible d'afficher l'image. Votre ordinateur manque peut-être de
mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez
l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours
affiché, vous devrez peut-être supprimer l'image avant de la réinsérer.
Impossible
Hash Table
Mapping Swapping
Impossible
d'afficher
l'image. Votre
ordinateur
manque peut-
être de
mémoire pour
ouvrir l'image
ou l'image est
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire endommagée.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis Redémarrez
pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut- l'ordinateur, I
ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut- Impossible
être d'afficher
supprimer l'image.
l'image Votre
avant de ordinateur manque peut-être de mémoire
la réinsérer. m
être supprimer
Impossible l'image
d'afficher avant de
l'image. la réinsérer.
Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis p
pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut- o
ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut- être supprimer l'image avant de la réinsérer. s
Zone de swap
être supprimer l'image avant de la réinsérer.
Impossible
Zone BD
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire
pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur,
d'afficher
puis ouvrez l'image.
à nouveau VotreSiordinateur
le fichier. le x rougemanque peut-être
est toujours de vous
affiché, mémoire
pour ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis
ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-
être supprimer l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire
pour ouvrird'afficher
Impossible
ouvrez
pour ouvrir
l'image ou
à nouveau
l'imagele
l'imageVotre
l'image.
oufichier.
est endommagée.
l'imageSiest
Redémarrez
ordinateur manque
le xendommagée.
rouge est toujours
l'ordinateur,
peut-être de mémoire
affiché,l'ordinateur,
Redémarrez
puis
vous devrezpuis
ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-
être supprimer l'image avant de la réinsérer.
MemAdress
79 80
Problème de la répartition de la mémoire Répartition de la mémoire (Oracle 8i)
• Comment répartir la mémoire ?
– Dans un opérateur, entre les opérateurs ?
– Entre les requêtes ?
Query 2
– Une moyenne ?
– Max au Min ?
Op. 2 Op. 3
• SORT_AREA_SIZE
• Tuning !
Query 1
– Au moment de la compilation de la requête ?
– Au démarrage de l’exécution ?
Disponible
Nécessaire
Op. 1
– Pendant l’exécution ?
83
Architecture en couche d’un SGBD
Interface
Analyseur sémantique
Optimiseur
Optimisation
Moteur d’exécution
Benjamin Nguyen
Opérations relationnelles
Système opérationnel
Support construit à partir des slides de
N. Anciaux, L. Bouganim, P Borlat (Oracle Fr) et R. Ramakrishnan
1 2
38
– Placement, partitionnement (par tri/hachage) – Placement, partitionnement (par tri/hachage) Cas de l’index couvrant une requête
• Une grosse opération coûteuse peut être remplacée par plusieurs petites opérations peu coûteuses • Une grosse opération coûteuse peut être remplacée par plusieurs petites opérations peu coûteuses
Exemple? Exemple? Coût (jointure par boucle N*M) >> P x Coût (jointure par boucle N/P / M/P)
• Et aussi • Et aussi
– Le bon algorithme physique – Le bon algorithme physique
– L’ordonnancement des opérateurs, – L’ordonnancement des opérateurs,
– La forme de l’arbre, etc. – La forme de l’arbre, etc.
• Problème : pour une requête donnée, choisir le plan d’exécution optimal • Problème : pour une requête donnée, choisir le plan d’exécution optimal
– Plan d’exécution = arbre d’opérations relationnelles – Plan d’exécution = arbre d’opérations relationnelles
• 1 opération = N algorithmes physiques • 1 opération = N algorithmes physiques
– 1 requête = quels plans sont à considérer ? – 1 requête = quels plans sont à considérer ?
• Recherche l’espace des plans possibles • Recherche l’espace des plans possibles
• Qualification de celui qui est (estimé) le moins coûteux • Qualification de celui qui est (estimé) le moins coûteux
• Comment estimer le coût d’un plan d’exécution ? • Comment estimer le coût d’un plan d’exécution ?
– Idéalement, recherche du plan optimal; en pratique : éviter les plans les pire… – Idéalement, recherche du plan optimal; en pratique : éviter les plans les pire…
5 6
39
• Dans la théorie…
– 2 requêtes équivalentes en SQL (langage déclaratif) doivent, après
l’optimisation, produire le même arbre algébrique !
– Qui plus est, cet arbre doit être le meilleur !
Seuls les concepteurs de SGBD (noyau) doivent comprendre
l’optimisation et l’exécution
3 2 1 1 2
Requête SQL Optimiseur Plan
2 2 – Minimisant la consommation de ressources
3 3 • Optimisation du travail total
2 2
3 3
11 12
Qu’est-ce qu’un plan optimal ? Etapes de l’évaluation
• But de l’optimisation
– Trouver le plan d’exécution optimal pour une requête ?
1. Contrôle syntaxique et sémantique
Trouver des applications pour chaque
2. Simplification de la requête (SQL)
• Ce qu’on entend par optimal type d’optimisation…
3. Décomposition en opérations élémentaires et
– Donnant les résultats le + vite ….
• Optimisation pour le temps de réponse
construction des plans d’exécution candidats
Système d’aide à la décision (OLAP), 1 seul utilisateur 4. Calcul du coût de chaque plan, choix du plan optimal
– Minimisant la consommation de ressources et exécution
• Optimisation du travail total
Système bancaire, OLTP (minimisation des ressources pour les autres transactions…)
• Les étapes 1,2 et 3 sont indépendantes des données
– Minimisant le temps de délivrance des premiers tuples • L’étape 4 est dépendante des données
• Optimisation de la latence (temps de retour du premier tuple)
Recherche Internet (ranking); MS Access fait ça intox ?
13 14
41
– Une projection par un arc vers le noeud résultat – Un sommet est associé à chaque
0
référence d’attribut ou de constante M.labo 0 Roche
P.date>="2006-08-20"
P – Un arc de la forme ai c aj
0
représente ai ≤ aj+c P.date 2006-08-20
19 20
Utilisation de la logique des prédicats Utilisation de la logique des prédicats
• Ex. Requête initiale • Ex. Requête initiale
SELECT * FROM Medic M SELECT * FROM Medic M
WHERE ((M.label = 12) P WHERE ((M.label = 12) P
OR (M.labo = ‘WHITEHALL') Q OR (M.labo = ‘WHITEHALL') Q
OR (M.labo = ‘AVENTIS')) R OR (M.labo = ‘AVENTIS')) R
AND NOT ((M.labo = ‘WHITEHALL') Q AND NOT ((M.labo = ‘WHITEHALL') Q
OR (M.labo = ‘AVENTIS ')) ; R OR (M.labo = ‘AVENTIS ')) ; R
21 22
43
Utilisation des contraintes d'intégrité (1) Utilisation des contraintes d'intégrité (2)
• Deux types d’utilisation des contraintes d’intégrité • 2 – Pour compléter le critère afin de profiter d’un index
– 1 – Pour identifier une requête sans résultat
• Etant donné une requête avec un critère Q – Ex.
• Et un ensemble de contraintes d’intégrité {CI1, CI2, … CIn} • Requête = SELECT * FROM Medic
• Si : Q est contradictoire avec l’une des contraintes CIi WHERE labo = 'Roche'
• Alors : la requête a une réponse vide
• Ex.
• Il y a un index sur Medic.label
– Requête = SELECT * FROM Medic
(Mais pas d’index sur Medic.labo…)
WHERE labo = 'Roche'
AND label < 10 • Et une contrainte d’intégrité sur Medic: labo = 'Roche' label > 12
– Contrainte d’intégrité sur Medic : labo = 'Roche' label > 12
– Requête modifiée = • Requête modifiée = SELECT * FROM Medic
SELECT * FROM Medic WHERE labo = 'Roche'
WHERE labo = 'Roche'
AND label < 10 AND label > 12
AND label > 12
La requête est sans réponse…
– 2 – Pour compléter le critère afin de profiter d’un index…
L’index est utilisable pour évaluer la requête…
23 24
Etape 3 : Construction de plans candidats Ex. Plan d’exécution candidat (1)
• A partir des opérateurs relationnels suivants: R
Requête
Projection « Nom et prénom des patients nom_patient
prénom_patient
Selection visités dans le Béarn à qui on a
V.med_id, V.labo
M.labo=‘ROCHE’
prescrit des médicament du
laboratoire ROCHE de numéro labo = “Roche"
de label = 17 après le 20 août ^ Region = “Béarn"
Jointure 2006 » ^ date > "20/08/2006"
Différence ^ label = 17
R S _
R.a = S.b
med_id med_id
=
R S
Produit vis_id vis_id
Cartésien Union =
X U
V P M
R R S
S
Plan candidat N°1
25 26
44
Ex. Plan d’exécution candidat (2) Ex. Plan d’exécution candidat (2)
Plan candidat N°2 Plan candidat N°3 Plan candidat N°2 Plan candidat N°3
R R R R
V P M V P M
V P M V P M
De ces 3 arbres, lequel est le meilleur ? De ces 3 arbres, lequel est le meilleur ?
• La requête suivante
• 2 méthodes pour énumérer les plans ‘intéressants’ – “nom des patient ayant fait des Visites dans le BEARN à qui on a prescrit
des médicaments du labo Roche”
– Heuristique : la restructuration algébrique
– Modèle de coût : l’évaluation de plans • Exprimée en SQL de la façon suivante
– Remarque : ces 2 méthodes ne sont pas exclusives… SELECT nom_patient, med_id, date
FROM Medic M, Presc P, Visites V
WHERE V.vis_id = P.vis_id
AND P.med_id = M.med_id
AND M.labo = "Roche"
AND V.region = "BEARN"
29 30
45
Importance du choix des candidats (2) Importance du choix des candidats (3)
• Distributions des données de la base • Comparaison de 3 plans candidats…
– 100 Visites dont 5 dans le BEARN (20 pages) – Stratégies 1
• Exécuter les opérations dans l’ordre de la clause WHERE
– 500 Médicaments dont 50 du labo ROCHE (50 pages)
• Exécuter les jointures par Boucles Imbriquées
– 2000 Prescriptions (200 pages) – Stratégies 2
• Idem mais les jointures sont faites par Tri Fusion
• On suppose une equi-répartition des données – Stratégies 3
– En moyenne, 20 Presc par Visite et 4 Presc par Médicament • Exécuter les sélections avant les jointures
• Exécuter les jointures par Boucles Imbriquées
• La requête donne 10 tuples résultat
• Coût de la stratégie 1
• Information sur le stockage – 1ère phase: jointures Visites ∞ Presc ∞ Medic
– 1 page disque peut contenir • Nombre de pages lues
– (100/5) * (2000/10) * (500/10) = 20 * 200 * 50 = 200.000 I/Os
• 5 Visites, 50 Noms, 10 Médicaments ou 10 Prescriptions
• Nombre de pages écrites
– 2000 tuples résultat = 2000*(1/5+1/10+1/10) = 800 pages = 800 I/Os
• Toutes les relations sont triées sur clé – 2ème phase : sélections puis projections
• 800 lectures + 1 écriture = 801 I/Os
• Coût du tri d’une relation de N pages = 2*N*Log2 N – Total > 200.000 I/Os
31 32
Importance du choix des candidats (4) Importance du choix des candidats (5)
• Coût de la stratégie 2 • Coût de la stratégie 3
– Exécuter les opérations dans l’ordre de la clause WHERE – Exécuter les sélections avant les jointures
– Exécuter les jointures par Tri Fusion – Exécuter les jointures par Boucles Imbriquées
– 1ère phase: jointures Visites ∞ Presc TEMP1 – 1ère phase: sélection Visites TEMP1
• Nombre de pages lues • Nombre de pages lues
– (100/5) + (2000/10) = 20 + 200 = 220 I/Os – (100/5) = 20 I/Os
• Nombre de pages écrites
• Nombre de pages écrites
– 5 tuples résultat = 1 page = 1 I/Os
– 2000 tuples résultat = 2000*(1/5+1/10) = 600 pages = 600 I/Os
– 2eme phase : sélection Medic TEMP2
– 2eme phase : tri de TEMP1 sur med_id • Nombre de pages lues
• 2 *600*LOG2(600) = 2*600*9,.. = 11.075 I/Os – (500/10) = 50 I/Os
– 3ème phase : Jointure TEMP1 ∞ Medic • Nombre de pages écrites
• Nombre de pages lues – 50 tuples résultat = 5 pages = 5 I/Os
– (600) + (500/10) = 650 I/Os – 3ème phase : Jointure TEMP1 ∞ Presc ∞ TEMP2
• Nombre de pages écrites • Nombre de pages lues
– 2000 tuples résultat = 800 pages = 800 I/Os – 1 * (2000/10) * 5 = 1.000 I/Os
• Nombre de pages écrites
– 4ème phase : selections puis projections
– 10 tuples résultat = 4 page = 4 I/Os
• 800 lectures + 1 écriture = 801 I/Os
– Total = 1080 E/S
– Total = 14.146 I/Os 33 34
46
35 36
Equivalences de l’algèbre relationnelle Autres règles d’équivalence
• L’algèbre relationnelle définit des équivalences • Une projection commute avec une sélection qui utilise des
– Deux expressions relationnelles sont équivalente SSI attributs conservés par la projection (Semi commutativité)
elles produisent le même résultat
Groupabilité des π R S S T
projections) en les groupant sur chaque relation
Groupabilité des σ
Ai
Ai,Aj
3
≡ Ai = a 1. Dégrouper les sélections/projections (Règle 3)
Aj Ai = a
et
≡ Aj = b
2. Rapprocher les sélections des feuilles (Règles 4, 5 et 7)
Aj = b
5 R S R S
Aj = a
≡ Aj = a
Distributivité des σ / ∞
Aj
• L'ordre des unions, différences et jointures est
et
• Et aussi…
– Distributivité des π / ∞ 6 A1,..,Ai
inchangé !!!
–
–
Distributivité des σ / Unions & différences
Distributivité des π / Unions
7 Semi commutativité de π avec σ
8 39 40
Exemple d'optimisation (nom,prénom
Optimisation physique
dans visite)
R
• Choix des meilleurs algorithmes pour les opérations
R nom_patient
prénom_patient relationnelles
nom_patient
prénom_patient
med_id med_id
– Utilisation des indexs
– jointure par index, boucles imbriquées, etc...
=
41 42
48
• Critères de sélection d’abords convertis en ‘forme normale conjonctive’ • Accéder les tuples en utilisant ce chemin
– (jour<01-fev-07 AND Nom=‘Bob’) OR id=5 OR did=3’
– FNC : (jour<01-fev-07 OR id=5 OR did=3) AND (Nom=‘Bob’ OR id=5 OR did=3) • Vérifier ensuite tous les termes restant du critère
– i.e., ceux que l’index n’a pas pu évaluer
• Un index basé sur le tri (ex. arborescent) permet de répondre à un critère
impliquant des termes préfixes de la clé de l’index – Ces termes sont évalués sur les tuples accédés
– Ex. un index arborescent sur <a,b,c> permet de répondre aux critères a=5 AND – Cette évaluation réduit le nombre de tuples qualifiés,
b=3, et a=5 AND b>6, mais pas b=3 – Mais n’a pas d’impact sur le nombre d’I/Os…
• Un index basé sur du hachage permet de répondre à une conjonction de • Ex. critère date>12/01/2007 AND quantité = 5 AND doc_id = 2
termes impliquant tous les attributs de la clé de l’index sur critère d’égalité
– Ex. un index par hachage sur <a,b,c> permet de répondre aux critères a=5 AND
– Arbre B+ sur date utilisé pour sélectionner les tuples date>12/01/2007
b=3 AND c=4, mais pas a=5 AND b=3, ni a>5 AND b=3 AND c=4 – Ensuite, les termes restant quantité = 5 AND doc_id = 2 doivent être
vérifiés sur chaque tuple sélectionné
L’index par hachage permet-il de répondre à a=5 AND b=3 OR c=4 ? – De la même manière, un index par hachage sur <quantité, doc_id> peut
FNC : (a=5 OR c=4) AND (b=3 OR c=4) par hachage, on ne peut pas évaluer a=5 OR c=4… 45 être utilisé. Le terme date>12/01/2007 doit être vérifié ensuite. 46
49
47 48
Introduire des semi-jointures Modèle de coût
• Principe • Pour chaque plan considéré, en estimer le coût
– Estimation du coût de chaque opérateur de l’arbre
1. Projeter R sur l’attribut de jointure (sans doublons) dans R’ • Dépend de la cardinalité en entrée(s)
2. Lire S, et ne retenir que les tuples existant dans R’ • De l’algorithme utilisé
• De la façon dont on produit la sortie (pipeline, matérialisation)
3. On joint les tuples résultat avec R
– Il faut pourvoir estimer la cardinalité des résultats de chaque opérateur
• Utilisation des informations de cardinalités des tables de base
Quel peut être l’intérêt de cette technique ?
• Pour les sélections et les jointures, dépend du critère (facteur de restriction)
• L’optimiseur suppose (en général) l’indépendance des critères…
• Il faut donc fabriquer un modèle de coût
Le résultat de 1 est très petit (seulement les valeurs distinctes de la clé de jointure).
L’étape 2 filtre S (semi-jointure). L’étape 3 joint les tuples de R avec le résultat du
– Paramètres d’entrée du modèle de coût
filtrage de S. • Machine (puissance, disques, mémoire, réseau, etc..)
Si R et S sont sur 2 sites différents, très peu de données sont transmises : • Arbre d’exécution, algorithmes relationnels
S1 S2 : valeurs distinctes de la clé de R • Schéma de la base, statistiques sur les relations
S2 S1 : relation S filtrée • Cardinalités, tailles, valeurs distinctes, répartition, histogrammes…
NB : mais pas grand intérêt dans ce cas précis si R et S sont sur le même site… – Sortie
• Evaluation de la taille des résultats intermédiaires
49 • Evaluation du coût: en termes d’I/O, CPU, etc... ou un coût global 50
50
output
ble
R R hash table
ffic
Scan R Memory
• En plus : les opérations binaires ne sont pas symétriques
Décrire l’algorithme de jointure par hachage (Hash Join)…
– Notion de relation externe / interne (même pour 1 algorithme fixé!)
– Notion de pipeline / matérialisation
• Notion de lien bloquant / non bloquant
– Convention (du cours) : entrée gauche des opérateurs est matérialisée… DOC
Table de
hachage
Différentes formes d’arbres sont possibles. Influence sur
Table de Test
DOC
• La consommation mémoire hachage
Table de
VIS
• Le mode d’exécution VIS Test hachage
• et donc les performances Hash Join : bloquant Hybrid Hash Join : Non bloquant
Applications respectives?
51 52
Notion de pipeline / matérialisation Arbre linéaire droit (right deep tree)
build • L’une des tables passe complètement en pipeline
Imp
ossi
output
ble
d'a
R R hash table
ffic
Probe 1 R S
Im
po
Imp
ossi
h(R.a) buffer
• En général, il s’agit de la plus grosse table…
• Ex. R passe en pipeline
ssi ble
ble d'a
ffic
Memory
l'image.
ordinateur
Scan R
Votre
ordinate
Probe 2
Build 3
Impossibl
U
p e d'afficher ordinateu
os
o d'afficher
Impos l'image.
si
s l'image.
sible Votre
d'affic
bl
s Votre ordinate
Probe 1
Build = construction en mémoire de la table de hachage de R; her iI ordinateu
l'imag b
m
lp
e
o Scan U Build 2
Probe = test des tuples de S sur la table de hachage et production des résultats T
s
si
Impossi
ble
Impossibl
e
d'affiche d'afficher
r l'image.
Impossibl
l'image. Votre
e
Votre ordinateu
d'afficher
l'image.
Build 1
Votre
S
ordinateu
Table de R Scan R
DOC Scan T
hachage Impossibl
e
d'afficher
l'image.
Votre
ordinateu
Table de Test
DOC
hachage Scan S
Table de
VIS Test VIS
hachage
Arbre linéaire droit (right deep tree) Arbre linéaire gauche (left deep tree)
• Le résultat de chaque jointure est envoyé en pipeline à l’opérateur suivant
• L’une des tables passe complètement en pipeline – Pas de stockage de la sortie de chaque opérateur sur disque
• En général, il s’agit de la plus grosse table… (transmission directe à l’opérateur suivant…)
• Ex. R passe en pipeline • Le flot grossit : ordonner les jointures selon leur sélectivité
Probe 3
Impossibl
Probe 3
e
Impossib
d'afficher
le
l'image. Impossible
d'afficher Impossible
Votre d'afficher
l'image. d'afficher
ordinateur l'image. Votre
Votre l'image. Votre
ordinate
U
l'imag b
m
lp l'image. Votre
s
e
o Scan U Build 2 Im Build 2
T
si
Impossi
ble
Impossibl
e
po
ssi Scan T
d'affiche d'afficher Impossible
Impossibl
e
r
l'image.
Votre
l'image.
Votre
ordinateu
T d'afficher
l'image. Votre
d'afficher
l'image. Probe 1
Build 1
Votre
S
ordinateu
R Scan R
Scan T R S Impossible
d'afficher
l'image. Votre
Impossible
d'afficher
Impossibl
Build 1
l'image. Votre
e
d'afficher
l'image.
Votre
ordinateu
Scan S
Impossible
d'afficher
Scan R
• La taille mémoire consommée est importante… • La taille mémoire consommée est moindre…
Quelle est la taille mémoire nécessaire ?
Quelle est la taille mémoire nécessaire ? Build1 + Build2 + Build3 = |S| + |T| + |U|
55 56
Arbre linéaire gauche (left deep tree) Arbre bushy (bushy tree)
• Le résultat de chaque jointure est envoyé en pipeline à l’opérateur suivant • Mélange des deux stratégies précédentes
– Pas de stockage de la sortie de chaque opérateur sur disque
(transmission directe à l’opérateur suivant…) Probe 3
Build 3
her her Votre ordinateur
Scan U
Votre
l'imag l'imag Im ordinateur ordinateu manque
e. e. po manque
Votre Votre ssi
I
Build 2 Scan U
ordina
I ordina
Impossible
d'afficher
l'image. Votre
teur
m
manqu
teurm
manqu Probe 1
e e
Probe 2 peut-
être
de
peut-
être de
mémoi
Impossibl Impossible Impossibl
S T U
e d'afficher e
Impossible
d'afficher Impossible
R d'afficher
l'image.
l'image.
Votre
d'afficher
l'image.
l'image. Votre d'afficher Votre ordinateur Votre
U Build 2
l'image. Votre ordinateu manque ordinateur
Im
po
ssi Scan T Build 1 Scan S Scan T
Impossible
T d'afficher
l'image. Votre Impossible
Probe 1
d'afficher
l'image.
Votre
ordinateur
manque
R S Impossible
d'afficher Impossible
l'image. Votre d'afficher
Scan R
Build 1
l'image. Votre
Scan S
Impossible
d'afficher
l'image. Votre
Scan R
• La taille mémoire consommée est intermédiaire…
• La taille mémoire consommée est moindre…
Quelle est la taille mémoire nécessaire ? Quelle est la taille mémoire nécessaire ?
Scan U
sible sible d'afficher d'afficher
d'affic
her
d'affic
her
l'image.
Votre
l'image.
Votre
Votre
ordinateur
o
s
o
s Im Build 2
l'imag
e.
Votre
l'imag
e.
Votre
Im
po
ordinateur
manque
ordinateu manque s
i
b
s
i
b
po
ssi Probe 1 Im
po
ssi
I
Build 2
Im
Scan U
ordina
I ordina l l
teur
m
manqu
teurm
manqu Probe 1 e e
I
m
po
Scan T
e e
peut-
être
de
peut-
être de
mémoi
R S T U Build 1 Scan S
Impossibl Impossible Impossibl Im
po
S T U
e d'afficher e
R d'afficher l'image. d'afficher
l'image.
Votre
ordinateu
Votre
ordinateur
manque
l'image.
Votre
ordinateur
Arbre linéaire gauche (left deep tree) Arbre Bushy (Bushy tree) Scan R
Build 1 Scan S Scan T
I
Probe 3
Impossible
d'afficher
l'image.
Impo Impos
sible
Probe 3 Arbre linéaire droit (right deep tree)
Build3 ScanU
Votre Im
ordinateur Im po
po ssi
U
manque
Impos ssi
her Impos po
T
l'imag Im
Build2
Im ssi
e. po
po
ScanT
I
U
Votre ssi
Probe 1
ssi
ordin
ateur Impos Imp
manq
ue Im
po
sible
R S m po ffic
Impo Im p ssi
T her
Build1
age
ssi
ScanS Build 1 .
ScanT Scan R
S
Impos
Im
po R
ScanR ssi
MAX(Build1; Build1+Build3; Build2+Build3)= MAX(|R|; |R|+|R ∞ S|; |R ∞ S|+|T|) L’espace de recherche est très grand…
59 60
Recherche du meilleur plan Stratégies de recherche
• But de la stratégie de recherche
Graphe d'opérations Schéma interne
– Minimiser l’espace de recherche
– Sans trop réduire l’efficacité du choix…
Plans d'exécution
(espace de recherche)
Stratégie de
Bibliothèque de Enumération de recherche Evaluation de plans
Générateur de plans possibles (pseudo) aléatoires
transformations
Plans
63 64
Optimisation distribuée Ex. L’optimiseur System R
• Même type de problèmes que pour le parallélisme • System R
– Arbre d’opérateurs – L’optimiseur le plus largement utilisé aujourd’hui
– Localisation des opérateurs – Fonctionne bien pour un nombre de jointures < 10
– Séquençage des opérateurs • Estimation du coût : approximation au mieux
– A base de statistiques maintenues dans le catalogue
• Utilisées pour estimer le coût des opérations
• Mais le contexte est différent… • Et la taille des résultats
– Coût réseau importants – Combine le coût en CPU et le coût en I/Os
– Duplications fréquente • Espace de recherche
– Fragmentation vetricale et horizontale – Réduit aux arbres linéaires gauches
• NB: permet de ne pas stocker la sortie de chaque opérateur sur
disque mais la transmet directement comme entrée de l’opérateur
suivant…
• Techniques complexes (voir T. Ozsu, P. Valduriez)
– Les produits cartésiens sont évités…
65 66
54
Conclusion générale
75 76
77 78
57
79 80
81 82
58
83 84
85 86
59
Index plaçant, quel est le CF ? Index non plaçant, quel est le CF ? Index plaçant, quel est le CF ? Index non plaçant, quel est le CF ?
87 88
Sélectivités obtenues avec une hypothèse uniforme ?
11 1
0 0
0-25 25-50 50-75 75-100
5
Valeur = rouge
89 90
60
91 92
Procedures stockées / Fonctions / Triggers
On reprend le TD sur les Triggers avec les commandes, dont les tables sont CLIENT,
PRODUIT, COMMANDE et ACHAT. On souhaite complémenter l'application SGBD en
rajoutant un package permettant de gérer les commandes, plutôt que de passer directement par
des insertions dans le SGBD.
61
TRIGGERS
Exercices d'application
BASE PRODUITS
On considère une base de produits, construite à partir de la structure exemple fournie (scripts
MySQL). Les tables sont CLIENT, PRODUIT, COMMANDE et ACHAT. Lorsqu'une
commande passe du statut termine = 0 à termine = 1, on souhaite la recopier dans la table
ACHAT en indiquant le prix du jour, et réduire le stock du nombre d'éléments commandés...
mais attention il faut en avoir assez en stock !
Questions :
1- Avec un CHECK simple : on peut protéger la table de telle sorte que la valeur de stock ne
puisse pas être négative. Proposez une solution, et discutez les inconvénients. Faut-il utiliser
une transaction ?
4- On souhaite améliorer notre trigger pour que si on n'a pas assez de produits en stock, alors
on va envoyer tous ceux restants au client. La commande reste telle qu'elle dans la base, mais
l'achat devra prendre en compte cette modification de quantité.
On souhaite vérifier que le nombre de voyages réservé n'est pas encore atteint ! Notez que si
on écrit directement un trigger sur la table INSCRIPTION on court de risque de tomber sur
une table mutante ...
Question :
2- En utilisant plusieurs triggers et une table temporaire pour transmettre les informations,
réalisez la même fonctionnalité. Dans ce cas, la commande d'insertion sera faite sur la table
INSCRIPTION.
63
TD-TP DE BASES DE DONNEES
PRELIMINAIRES
Mise en place
Connectez-vous sur la machine oracle.ens.uvsq.fr (ex : ssh oracle.ens.uvsq.fr)
Tapez votre mot de passe
Démarrez SQL*Plus par la commande : sqlplus / (attention sqlplus <espace> <slash>). Vous
êtes prêts à travailler.
SQL*PLUS
SQL*PLUS est l'interface de base d'Oracle. Elle est composée des commandes de SQL et de
SQL*PLUS. Les commandes SQL permettent de définir et manipuler les données. Les
commandes SQL*PLus permettent de formater les résultats, établir des options, éditer et
stocker les commandes SQL, …
64
Page - 1 1
TD-TP DE BASES DE DONNEES
TD1 : CREATION / MODIFICATION DU SCHEMA / INSERTION
Il s'agit de construire le schéma de la base. Nous nous intéresserons dans la suite du TP à
une sous partie du schéma concernant les commandes.
1. Dessiner sur papier le schéma de la base en faisant ressortir les clés primaires (en
souligné) et étrangères (en souligné et pointillé)
2. Créer les relations de la base ci-dessus (pensez aux clés primaires et étrangères)
Attention : créer les références sans l’option « on delete cascade »
3. Y a-t-il un ordre à respecter lors de la création de ces tables, si oui lequel ? Pourquoi ?
4. Vérifier vos créations : sous SQL*plus : Utiliser la commande : desc <nomtable>
5. Modifier un type précédemment défini : NomCli devient char(30).
6. Ajouter un attribut Téléphone (Tel) pour les clients
7. Ajouter le prix unitaire (PrixUnit) pour les produit
8. Rajoutez une contrainte de non nullité à l'attribut NomProd
9. Insérer un jeu de données cohérent dans vos relations (un ou deux tuples par relation)
10. Essayez l'interface d'Oracle Express (cf. Navigateur d'objets)
Remarque : le format du fichier peut poser problème (caractère de fin de chaîne différent entre
Windows/Linux). Il peut donc être nécessaire de modifier les fichiers et de les sauver à
nouveau sous Linux.
19. Y a-t-il un ordre à respecter lors du chargement des relations, si oui pourquoi…
20. Vérifier que vous avez l'intégralité des données : 91 Clients, 1078 Commandes, 2809
Détails, 77 Produits et 29 Fournisseurs. Il vous en manque encore ?
a. Vérifier les logs créés lors du chargement (exemple : more fichier_output.log)
b. Trouvez le problème et résolvez-le (le cas échéant en rechargeant les données
corrigées après les avoir supprimées).
Exemples :
LOAD DATA (Charger des données)
INFILE * (les données se trouvent dans ce fichier)
APPEND (On veut les ajouter dans la table….)
INTO TABLE CLI (c’est dans la table CLI)
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY ‘”‘
(Attention ‘”‘ quote/guillemet/quote)
(champs terminés par des ;)
(… encadrés éventuellement par des " )
(CodeCli,NomCli,Pays,Tel) (liste des attributs indiqués ci-dessous)
BEGINDATA (les données commencent après cet inst°)
1, Maria,Pologne,4867427275 (1er tuple codecli = 1, nomcli = Maria, etc.)
2,"Ana",Autriche","4905219433" (2ème tuple….)
3,"Antonio","Espagne","7062001573" (3ème tuple …)
66
Page - 3 3
TD-TP DE BASES DE DONNEES
TD2 : INTERROGATION SQL
Page - 4 4
TD-TP DE BASES DE DONNEES
TD3 : PROGRAMMATION SQL – PL/SQL DANS ORACLE
L’objectif de cette partie est de créer des fichiers PL/SQL et SQL Forms (fichiers de type nom_fichier.sql) que vous
déclencherez avec la commande @nom_fichier dans SQL*Plus. Ces fichiers peuvent à terme être intégrés au serveur
sous forme de procédures stockées.
Page - 5 5