TP et suite TD sur les Transactions et Bases de Données

publicité
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 cidessous) 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
Université de La Rochelle
Département Informatique
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 ;
Courtoisie de Emmanuel Coquery,
2
Université de La Rochelle
Département Informatique
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.
Courtoisie de Emmanuel Coquery,
3
Université de La Rochelle
Département Informatique
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.
Courtoisie de Emmanuel Coquery,
4
Université de La Rochelle
Département Informatique
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
dilbert .esnig .cifom .ch
es21.world
artem is .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.
Courtoisie de Emmanuel Coquery,
5
Université de La Rochelle
Département Informatique
--Dans base es21
CREATE TABLE EmpNE (numero Number(9) CONSTRAINT pk_EmpNE PRIMARY KEY ,
nom
Varchar(20) ,
prenom Varchar(20),
salaire Number(5)) ;
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
EmpNE
EmpNE
EmpNE
EmpNE
VALUES
VALUES
VALUES
VALUES
(1,'LeRiche','Jean',15000 ) ;
(2,'LeMoyen','Bernard',6000 );
(3,'LePauvre','Henri',2000 );
(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
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
EmpBE
EmpBE
EmpBE
EmpBE
VALUES
VALUES
VALUES
VALUES
(1,'LeBernois','Hans',12000 );
(2,'LeBiennois','Fritz',9000);
(3,'LeJBernois','Fred',6500 );
(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 [email protected] ;
CREATE SYNONYM EmpNE FOR [email protected] ;
--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
-------------------DeThoune
LeBernois
LeBiennois
LeJBernois
LeMoyen
LePauvre
LeRiche
LeSDF
PRENOM
SALAIRE
-------------------- ---------Joanna
5750
Hans
12000
Fritz
9000
Fred
6500
Bernard
6000
Henri
2000
Jean
15000
Perdu
0
--Dans base es14
Courtoisie de Emmanuel Coquery,
6
Université de La Rochelle
Département Informatique
CREATE TABLE EmpJU (numero Number(9) CONSTRAINT pk_EmpJU PRIMARY KEY ,
nom
Varchar(20) ,
prenom Varchar(20),
salaire Number(5),
Localite Varchar(20)) ;
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
EmpJU
EmpJU
EmpJU
EmpJU
VALUES
VALUES
VALUES
VALUES
(1,'Dutronc','Alain',9000,'Porrentruy');
(2,'Lachat','Pierre',15000,'Courgenay');
(3,'Argentier','Dorée',8000,'Glovelier');
(4,'Muller','Alfred',6000,'Les Bois');
-- es52
CREATE SYNONYM EmpJU FOR [email protected] ;
--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
-------------------LeMoyen
LeRiche
PRENOM
SALAIRE
LOCALITE
-------------------------------------Bernard
6000
Les Bois
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
Courtoisie de Emmanuel Coquery,
7
Téléchargement