Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.
a)
COMMIT;
b)
UPDATE Article
SET prixUnitaire = prixUnitaire * 1.1;
COMMIT;
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.
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 :
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
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.
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.
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 :
es52
es14.world es21.world
es14 es21
Créer tous les objets nécessaires à la mise en place d'une relation avec
- une fragmentation horizontale.
- une fragmentation verticale.
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)) ;
-- Dans es_14
CREATE TABLE EmpBE (numero Number(9) CONSTRAINT pk_EmpBE PRIMARY KEY ,
nom Varchar(20) ,
prenom Varchar(20),
salaire Number(5)) ;
--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;
-- 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;
--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;