Vous êtes sur la page 1sur 7

Université de La Rochelle Département Informatique

Licence –L3 - Informatique


UE –Bases De Données

Année Universitaire 2010/2011

M. EBOUEYA

TP et suite TD
sur les Transactions et Bases de Données Réparties
Vous devez soit avoir suivi le cours SQL, chapitres portant sur le dictionnaire de données Oracle et les
droits d’accès, ou l’avoir accessible dans une fenêtre. (Ce cours n’a pas été dispensé du fait des grèves.
Le texte de ce cours est en ligne.)

Le but du jeux est de réaliser les exercices suivants, éventuellement en vous aidant d’un exemple de
réalisation succinct et incomplet, mais surtout en justifiant/commentant vos actions. Il y aura les
copies écrans de vos réalisations, et un compte-rendu personnel chacun. Vous déposez sur Moodle
(chacun et séparément) a 11h30 ce que vous avez pu faire.

Exercice 7 : Transactions, suite et pas fin


Ajoutez, si nécessaire, les énoncés SQL de spécification du mode de contrôle de concurrence les plus appropriés
pour les transactions suivantes qui portent sur le schéma de VentesPleinDeFoin du cours SQL (reprise ci-
dessous) et dont le schema est en ligne aussi..
On tient à ce que les ordonnancements produits soient sérialisables.

a)

SELECT * FROM Article;

SELECT * FROM Article


WHERE quantitéEnStock = 0;

COMMIT;
b)

UPDATE Article
SET prixUnitaire = prixUnitaire * 1.1;

COMMIT;

Courtoisie de Emmanuel Coquery, 1


c)

SELECT * FROM Article


WHERE noArticle = 10;

UPDATE Article
SET prixUnitaire = prixUnitaire * 0.9
WHERE noArticle = 10;

COMMIT;

d)

UPDATE Client
SET noTéléphone = ‘(123)456-7890’
WHERE noClient = 10;

COMMIT ;
Exercice 8 : Manipulation d'une base de données à partir d'une autre
Vous avez travaillé jusqu'à maintenant dans la base de données masterin avec le compte L3Infoxx.
Vous avez aussi accès à la base de données L3Info, et à son compte L3Infoxx. (à vérifier).

Quels rôles jouez vous dans ces deux bases de données. Si necessaire, crée des comptes utilisateurs
ayants moins de droits globaux ou partiels.

Connectez-vous à la base o L3Info. Pour accéder à la base masterin, il suffit d'écrire

CONNECT L3Infoxx/L3Infoxx@masterin

Attention l'instruction ci-dessus vous déconnecte de L3Info. Pour revenir à L3Infoxx il faut faire un
nouveau CONNECT.

Les comptes sur masterin et sur L3Info possèdent les mêmes privilèges. En particulier, vous avez le
droit CREATE TABLE pour y créer des tables.

1. Créer un lien de base de données à utilisateur connecté de votre compte dans L3Info à votre
compte dans masterin par la commande SQL suivante émise dans votre compte de L3Info :

CREATE DATABASE LINK masterin USING 'masterin'

masterin suivant immédiatement DATABASE LINK est le nom (partiel ici) du lien de base de
données créée,
masterin entre guillemets simples suivant USING spécifie le nom de service d'une base de
données distante. Ce type de lien suppose que compte interrogateur et compte accédé aient le
même nom (dans leur base respective) et le même mot de passe au moment de la création du lien
et au moment de l'utilisation du lien. Ce lien de base de données va vous permettre d'accéder à
partir de votre compte de masterin aux tables de votre compte d'L3Info. Les propriétés de ce lien
sont accessibles par la vue USER_DB_LINKS.

2. Accéder à la structure de votre table dans la base de données masterin par la commande DESC
ou DESCRIBE de SQL*Plus. La notation TABLE@LIEN permet de préciser le lien à utiliser.
On constatera que le nom du compte peut être indiqué ou non et que le nom de la base de
données ou de son lien peut être global.

3. Accéder de votre compte de la base L3Info au contenu de votre table dans la base de données
masterin par la commande SELECT de SQL.

4. Réaliser une jointure de votre table dans masterin avec une table que vous créez dans votre
compte de L3Info. Cette jointure peut inclure agrégats et sous-requêtes.

5. Mettre à jour votre table dans la base de données masterin à partir de votre compte dans
L3Info. Comparer la validation avec la validation des parties précédentes. Autre conclusion.

6. A contrario, on notera qu'Oracle n'autorise pas les commandes CREATE, ALTER et DROP de
définition de données distantes.
Exercice 9 : la réplication dans une base de données répartie
Au lieu de manipuler les tables d'un compte de base de données à partir d'une base de données
distante, on va maintenant dupliquer une table dans une base de données distante.

Assurez-vous que votre compte de L3Info contient deux seuls objets. Lequel en particulier ?
Supprimer toutes les clés sur vos tables dans masterin.

1. Définir dans votre compte L3Info une vue matérialisée ou snapshot ou cliché ou copie de
votre table de la base de données masterin par la commande

CREATE MATERIALIZED VIEW TableVM REFRESH NEXT SYSDATE + 1/480 AS SELECT *


FROM monCompteActuel.Table@masterin; Est-ce possible ? Si cela ne l'est pas, demander à
l'administrateur de base de données le droit système CREATE SNAPSHOT. Est-ce alors possible ?

2. Lister les différents objets créés.

3. Accéder aux propriétés de la vue matérialisée en utilisant la vue USER_MVIEWS.

4. Interroger la vue matérialisée.

5. Mettre à jour la table maître (appartenant à la base de données MASTERIN) de votre vue
matérialisée.

6. Au bout de 3 mn (pourquoi 3 mn ?), constater que la vue matérialisée n'a pas été rafraîchie.

7. Consulter la vue USER_JOBS des travaux possédés par l'utilisateur et notamment ses
colonnes JOB (le processus de rafraîchissement), FAILURES (le nombre de démarrages et
d'échecs du travail depuis son dernier succès) et WHAT. Combien d'échecs a connu le
processus de rafraîchissement ? En fait, la procédure de rafraîchissement ne peut pas accéder à
votre compte, n'en connaissant pas le mot de passe.

8. Rafraîchir manuellement le vue matérialisée en émettant la commande EXECUTE


DBMS_REFRESH.REFRESH('VueMatérialisée');

9. Détruire le lien de base de données MASTERIN et construire un nouveau lien plus souple que
le lien de base de données à utilisateur connecté, dit lien de base de données à utilisateur fixe,
de votre compte dans L3Info à votre compte dans masterin (et plus généralement à un compte
quelconque avec un mot de passe qui ne soit pas le mot de passe de votre compte dans L3Info)
par la commande SQL suivante émise dans votre compte de L3Info: CREATE DATABASE
LINK MASTERIN CONNECT TO M1IFxx IDENTIFIED BY motDePasse USING
'MASTERIN' ; Utiliser à nouveau USER_DB_LINKS.

10. Constater et préciser le processus de rafraîchissement.


Exercice 10 : Manipulation d’une base de données répartie en deux autres.
Avant propos : la une suite suivante est une proposition de manipulations et ne doivent pas
nécessairement être suivie à la lettre. Il est plus important de comprendre les manipulations effectuées
et justifier /commenter les resultats obtenus (copies d’ecrans, utilisation des instructions
d’interrogation du dictionnaire de données et du contexte).

Les résultats obtenus lors de ces manipulations devraient susciter des questions dont la réponse peut
se trouver dans une manipulation supplémentaire.
Il est recommandé de visualiser le résultat des manipulations au fur et a mesure dans le dictionnaire.

Manipulations
Mettez en place le système suivant :

bd2. esnig .cifom . ch BD avec schéma global

es52
es14.world es21.world

dilbert .esnig .cifom .ch artemis .cpln .ch

es14 es21

Tester les connexions (tnsping).

Créer tous les objets nécessaires à la mise en place d'une relation avec
- une fragmentation horizontale.
- une fragmentation verticale.

Visualiser les requêtes globales avec l'analyseur

Créer les objets nécessaires à la mise à jour (INSERT/UPDATE/DELETE) des relations.

Tester la mise en place d’un schéma avec une clé primaire globale (Non nulle et unique) à partir d'une
numérotation automatique et une contrainte de domaine sur différents fragments.
--Dans base es21
CREATE TABLE EmpNE (numero Number(9) CONSTRAINT pk_EmpNE PRIMARY KEY ,
nom Varchar(20) ,
prenom Varchar(20),
salaire Number(5)) ;

INSERT INTO EmpNE VALUES (1,'LeRiche','Jean',15000 ) ;


INSERT INTO EmpNE VALUES (2,'LeMoyen','Bernard',6000 );
INSERT INTO EmpNE VALUES (3,'LePauvre','Henri',2000 );
INSERT INTO EmpNE VALUES (4,'LeSDF','Perdu',0 ) ;

-- Dans es_14
CREATE TABLE EmpBE (numero Number(9) CONSTRAINT pk_EmpBE PRIMARY KEY ,
nom Varchar(20) ,
prenom Varchar(20),
salaire Number(5)) ;

INSERT INTO EmpBE VALUES (1,'LeBernois','Hans',12000 );


INSERT INTO EmpBE VALUES (2,'LeBiennois','Fritz',9000);
INSERT INTO EmpBE VALUES (3,'LeJBernois','Fred',6500 );
INSERT INTO EmpBE VALUES (4,'DeThoune','Joanna',5750 );

--Dans base es52 (la base globale)


-- Creation des db_link
CREATE DATABASE LINK es14.world
CONNECT TO berkani IDENTIFIED BY berkani
USING 'es14.world' ;

CREATE DATABASE LINK es21.world


CONNECT TO berkani IDENTIFIED BY berkani
USING 'es21.world';

--independance à la localisation
CREATE SYNONYM EmpBE FOR EmpBE@es14.world ;
CREATE SYNONYM EmpNE FOR EmpNE@es21.world ;

--Fragmentation horizontale
--Création d'une vue qui regroupe les employés de NE et de BE
CREATE OR REPLACE VIEW EmpNE_et_BE AS
SELECT nom, prenom, salaire
FROM EmpNE
UNION
SELECT nom,prenom,salaire
FROM EmpBE ;

--Vérification
ES52>select * from empne_et_be;

NOM PRENOM SALAIRE

DeThoune Joanna 5750


LeBernois Hans 12000
LeBiennois Fritz 9000
LeJBernois Fred 6500
LeMoyen Bernard 6000
LePauvre Henri 2000
LeRiche Jean 15000
LeSDF Perdu 0

--Dans base es14


CREATE TABLE EmpJU (numero Number(9) CONSTRAINT pk_EmpJU PRIMARY KEY ,
nom Varchar(20) ,
prenom Varchar(20),
salaire Number(5),
Localite Varchar(20)) ;

INSERT INTO EmpJU VALUES (1,'Dutronc','Alain',9000,'Porrentruy');


INSERT INTO EmpJU VALUES (2,'Lachat','Pierre',15000,'Courgenay');
INSERT INTO EmpJU VALUES (3,'Argentier','Dorée',8000,'Glovelier');
INSERT INTO EmpJU VALUES (4,'Muller','Alfred',6000,'Les Bois');

-- es52
CREATE SYNONYM EmpJU FOR EmpJU@es14.world ;

--Fragmentation verticale
--Création d'une vue qui regroupe les employés de NE et de JU
--ayant les mêmes salaires.
CREATE OR REPLACE VIEW MemeSalaireNE_JU AS
SELECT tNE.nom, tNE.prenom, tNE.salaire,tJU.localite
FROM EmpNE tNE,EmpJU tJU
WHERE tNE.salaire = tJU.salaire ;

--Vérification
ES52>select * from memesalairene_ju;

NOM PRENOM SALAIRE LOCALITE

LeMoyen Bernard 6000 Les Bois


LeRiche Jean 15000 Courgenay

--Fragmentation mixte
--Création d'une vue qui regoupe les employés de NE et de BE ayant
--les mêmes salaires que ceux de JU.
CREATE OR REPLACE VIEW MemeSalaireNE_BE_JU AS
SELECT tNEBE.nom nomNEBE, tNEBE.prenom prenomNEBE,
tNEBE.salaire, tJU.nom nomJU,
tJU.prenom prenomJU,tJU.localite
FROM empNE_et_BE tNEBE, EmpJU tJU
WHERE tNEBE.salaire = tJU.salaire ;

--Vérification
ES52>select * from MemeSalaireNE_BE_JU;

NOMNEBE PRENOMNEBE SALAIRE NOMJU PRENOMJU LOCALITE

LeMoyen Bernard 6000 Muller Alfred Les Bois


LeBiennois Fritz 9000 Dutronc Alain Porrentruy
LeRiche Jean 15000 Lachat Pierre Courgenay

Vous aimerez peut-être aussi