LI345 - Bases de données et sites web

Transcription

LI345 - Bases de données et sites web
LI345 - Bases de données et sites web
NOM :
PRENOM :
Durée : 20 minutes
Exercice 1 : Transaction (2 points)
On note L(A) la lecture du tuple A et E(A) la demande d'écriture sur A. Soient deux transactions T1 et T2 et
la séquence d’opérations suivante (l’axe horizontal représente le temps) :
T1 :
T2 :
L(A)
E(A)
E(A)
commit
commit
1) Si l’on suppose que le mode d’isolation est read committed, la séquence ci-dessus est-elle acceptée ?
Expliquez.
En mode read committed, cette séquence est acceptée, car le mode read committed
accepte l’écriture sur une donnée qui a été validée par une transaction plus récente.
2) Si l’on suppose que le mode d’isolation est serializable, la séquence ci-dessus est-elle acceptée ?
Expliquez.
Non, cette séquence n’est pas acceptée, car en général la séquence L1(A), E2(A), E1(A)
n’est pas sérialisable (pas équivalent à une exécution séquentielle T1,T2 ou T2,T1). Ce
mode d’isolation n’autorise pas d’écrire sur une donnée qui a été validée par une
transaction plus récente. Donc T1 est abandonnée lorsqu’elle essaiera d’exécuter E1(A).
Cette question correspond à la question b) de l’exercice 2 du TME1 Transaction.
Exercice 2 : Autorisation (3 points)
Soit p le privilège de lecture de la relation R. A est le propriétaire de R. A exécute l'instruction suivante :
grant p to B with grant option ; puis B exécute l'instruction suivante : grant p to C.
1) Complétez le diagramme des droits ci-dessous (un nœud représente un couple (utilisateur, privilège), un
arc représente une autorisation transmise, si l’autorisation est transmise avec l’autorisation transmissible,
marquez le nœud et l’arc de transmission avec une étoile).
2) C a-t-il le droit d'exécuter l'instruction : grant p to D ? Expliquez.
Non, car B a transmis à C le privilège p (le droit de lire la relation R), mais pas le
droit de transmettre p à d'autres (pas de « with grant option »).
3) A exécute l'instruction suivante : revoke grant option for p from B cascade. Expliquez
et dessinez le diagramme des droits obtenus dans le cas du SGBD Oracle.
Dans le cas d’Oracle, modifier un privilège pour lui enlever la transmissibilité
provoque deux opérations : 1) suppression du privilège, puis 2) réaccorder le privilège
sans le grant option. Au final, B ne perd pas le privilège p, c'est seulement le droit
de transmettre le privilège p qu'il perd.
TSVP
S. Tollari
LI345 - Bases de données et sites web
Exercice 3 : SQL3 (5 points)
On souhaite créer les types, tables et insertions pour gérer les informations (numéro de série des processeurs,
adresse IP…) d’ordinateurs. Un processeur est représenté par son numéro de série et sa fréquence : create
type Processeur
@compile
as
object
(numeroSerie
Varchar2(10),
frequence
Number(2));
1. Un ordinateur a une adresse IP (chaîne de 16 caractères). Donner la définition du type Ordinateur
sachant que l’on souhaite créer des types qui hériteront du type Ordinateur.
create type Ordinateur as object (
adresseIP Varchar2(16)
) NOT FINAL;
@compile
-- NOT FINAL : pour autoriser l’héritage du type Ordinateur
2. Un calculateur est un ordinateur qui possède un ensemble non-ordonné de processeurs. Donner la
définition du type Calculateur (qui hérite du type Ordinateur). Aide : vous pouvez si nécessaire
définir des types supplémentaires.
create type EnsProcesseurs as table of Processeur;
@compile
create type Calculateur UNDER Ordinateur (
processeurs EnsProcesseurs
) ;
@compile
3. Donner la définition de la table LesCalculateurs qui contient des calculateurs.
create table LesCalculateurs of Calculateur
nested table processeurs store as tabpros;
-- Ne pas confondre creation d’une table et creation d’un type !
-- Pas de @compile après un create table (seulement après un create type).
-- Le nested table est obligatoire pour chaque champs de la table qui est un typetable (c’est-à-dire dont le type est obtenu par : create type …… as table of …… ).
4. La relation Proprietaire associe un ordinateur (déjà stocké dans une table) avec le nom de son
propriétaire (chaîne de 15 caractères). Donner la définition du type Proprietaire.
create type Proprietaire as object (
ordi REF Ordinateur,
nom Varchar2(15)
);
@compile
5. Donner la requête permettant d’insérer le calculateur d’adresse IP 105.25.2.48 possédant 2 processeurs : le
premier de numéro de série ‘ns1234’ et de fréquence 3 GHz, le deuxième de numéro de série ‘ns2345’ et
de fréquence 4Ghz, dans la table LesCalculateurs.
insert into LesCalculateurs values (Calculateur('105.25.2.48',
EnsProcesseurs( Processeur('ns1234',3), Processeur('ns2345',4) )));
-- Attention : un insert ne peut insérer qu’un seul tuple dans une table, par
contre, si un tuple possède un champs qui est un varray ou une table (type-table)
alors on va insérer (comme ici avec les processeurs) tous les objets du varray ou
de la table en même temps lors de l’insertion du tuple.
6. Soit la définition de la table LesProprietaires suivante : create table LesProprietaires
of Proprietaire; Donner la requête permettant d’insérer l’association du propriétaire Paul avec le
calculateur d’adresse IP 105.25.2.48 (c’est-à-dire celui de la question précédente) dans la table
LesProprietaires.
insert into LesProprietaires values (Proprietaire( (select REF(c) from
LesCalculateurs c where c.adresseIP='105.25.2.48'),'Paul'));
-- Remarque : Bien que le premier champ du propriétaire est de type REF vers
Ordinateur, on peut insérer grâce à l’héritage une REF vers Calculateur.
S. Tollari