Vous êtes sur la page 1sur 4

Examen Tuning et Administration des SGBD

SSI

Etude de cas​ :

Une compagnie d’assurance spécialisée dans l’assurance automobile dispose de la base de


données suivante :
– ASSURE (​NOASSURE​, NOM-ASS, ADRESSE-ASS, AGE-ASS, WILAYA-ASS)
– VEHICULE (​NOVEHICULE​, TYPE, PUISSANCE, MARQUE, ANNEE, WILAYA-VEH)
*​ *​
– CONTRAT (​NOCONTRAT​, NOASSURE​ , NOVEHICULE​ ,​ DATE-C, NATURE, PRIME)
*​
– SINISTRE (​NOSINISTRE​, NOCONTRAT​ , DATE-S, CAUSE)

Les clés primaires sont soulignées et * représente une clé étrangère.

Partie I​ : Architecture et Administration


1. Donnez le script complet de création de la table CONTRAT
Create Table Contrat (
Attributs
Contraintes
Clé primaire
2 clés étrangères

2. La date du sinistre doit être supérieure à la date du contrat.


a. Proposez une solution pour répondre à ce besoin
Créer un trigger
b. Donnez les commandes SQL
Create Trigger Verif-Dates Before INSERT OR UPDATE (Date-S) On Sinistre
Declare
dc Contrat.Date-c%type;
For each Row
Select Date-C into dc from contrat where NOCONTRAT=:new.NOCONTRAT;
IF dc>Date-S then Raise_Application-error (“-20111’, ‘La date du sinistre doit être
plus récente que’ || Date-c);

3. Soit la requête SQL : ​Insert into SINISTRE (12,10,’15/10/2016’,’Chaussée Glissante’)​.


a. Dans quels cas cette requête échoue.
*​
– SINISTRE (​NOSINISTRE​, NOCONTRAT​ , DATE-S, CAUSE)
b. Donnez une solution pour chaque cas.
4. Après la résolution des tous les problèmes rencontrés, l’administrateur veut remplir la
table SINISTRE en utilisant un fichier de données « Sinistres.csv ». Pour cela il a conçu
le fichier « sinistres.ctl » dont le contenu est le suivant :
LOAD DATA
INFILE 'F:\sinistres.csv'
INTO TABLE SINISTRE
TRAILING NULLCOLS
(NOSINISTRE POSITION (1:10) DECIMAL, CHAR(10),
NOCONTRAT POSITION (11 :20) DECIMAL,
DATE-S POSITION (11:30) DATE,
CAUSE POSITION (31:100) char(70))

a.​ Q
​ ue représente le fichier « sinistres.ctl »

b.​ E
​ xpliquez chaque ligne de son contenu.

c. Donnez la commande permettant d’insérer le contenu de ce fichier dans la


base de données
sqlldr user/mp control=sinistres.ctl log=sinistres.log bad =fichier.bad direct=true

​Partie II​ : Optimisation et Tuning

5. Afin d’optimiser sa BD, l’administrateur veut voir le plan d’exécution des requêtes lancées.
a. Donnez la commande permettant de réaliser ce besoin
Set autotrace on
6. Après l’exécution d’une requête donnée, il obtient le plan suivant :

---------------------------------------------------------------------------

| Id | Operation | Name | Rows | Time |

---------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 00:00:53 |

| 1 | NESTED LOOPS | | |

| 2 | HASH JOIN | | 10 | 00:00:53 |

| 3| TABLE ACCESS FULL | Sinistre | 5 | 00:00:35 |

| 4| INDEX UNIQUE SCAN | PK_Contrat | 15 | 00:00:01 |

| 5 | TABLE ACCESS BY INDEX ROWID | Vehicule | 6 | 00:00:18 |

--------------------------------------------------------------------------
a.​ E
​ xpliquez chaque ligne de ce plan.
7. La compagnie propose des promotions sur le montant de la prime selon l’âge de l’assuré comme
suit : moins de 30 ans (70 % de réduction), entre 31 et 60 ans (aucune réduction), plus de 60
ans (40 % de réduction).
a. Proposez un schéma de fragmentation de la table « ASSURE » permettant de gérer
chaque catégorie séparément.
Conception ​: FH de Assuré en 3 fragments sur l’attribut Age (moins de 30, entre 30 et 60,
plus de 60).
Expressions Algébriques
Assuré= Assuré_moins30 U Assuré30-60 U Assuréplus60
Assuré_moins30=SIGMA Age<30(Assuré) ….

Implémentation
Create Table Assuré_frag
(Attributs+Contraintes)
Partition by Range (Age)
(Partition Moins30 Values less than 30,
Partition 30-60 Values less than 60,
Partition plus 60 Values less than MAXVALUE));
Insert into assuré_frag select * from assuré
Drop table Assuré;
Alter Table Assuré_frag rename to Assuré;

b. En tenant compte de ce schéma, proposez un schéma de fragmentation des autres


tables (sans les requêtes SQL).
FHD sur Contrat en utilisant la clé étrangère vers assuré (trois fragments Contratmoins30,
…..)
Contrat=Contratmoins30 U …..
Contrat_moins30=Contrat SEMI-JOIN Assuré_moins30

Create Table Contrat_frag


(att, cont
Constraint fk_contrat_assure foreign key (NOASSURE) references
ASSURE(NOASSURE);
),
partition by reference (fk_contrat_assure));
Insert into contrat_frag select * from asscontrat
Drop table contrat;
Alter Table contrat_frag rename to contrat;

– ASSURE (​NOASSURE​, NOM-ASS, ADRESSE-ASS, AGE-ASS, WILAYA-ASS)


*​ *​
– CONTRAT (​NOCONTRAT​, NOASSURE​ , NOVEHICULE​ ,​ DATE-C, NATURE, PRIME)

La projection sur NOCONTRAT de la table CONTRAT donne l’ensemble suivant :

{​ 1, 50, 7, 153, 44, 8, 77, 6, 10, 105, 9, 13, 38, 2, 89, 19, 5, 18, 37, 49, 23, 15, 100, 28, 3, 78, 4,
60, 46}
On construit un index sur cet attribut, de type B-arbre d’ordre 5 et ses feuilles peuvent contenir au
maximum 5 enregistrements.

8. Dessinez l’arbre correspondant à l’insertion progressive des valeurs précédentes, en respectant


l’ordre donné. On prendra soin de donner les b-arbres intermédiaires remarquables.

9. Si la plupart des requêtes font référence à la nature du contrat qui peut prendre deux valeurs
seulement « Particulier » et « Entreprise »
a. Quel serait l’index le plus adéquat pour réduire le coût d’exécution de ces requêtes
b. Donnez la requête SQL permettant de le créer
Create Bitmap Index ON Contrat.Type;
c. Donnez la taille de l’index créé en nombre de colonnes et nombre de lignes.
Taille en Ko= ||T||*(|A|+Taille(Rowid))/8*1024

Bon courage

Vous aimerez peut-être aussi