Ceci est une ancienne révision du document !
Table des matières
TME Jointure répartie
L'objectif de ce TME est de comprendre l'évaluation d'une requête de jointure entre 2 relations qui sont situées sur 2 sites distincts.
- définir le schéma global qui offre un accès transparent à des données de plusieurs bases,
- formuler une requête répartie,
- comprendre l'ordre et l'emplacement des opérations permettant d'évaluer une requête répartie (quel site traite quelles opérations?).
Scénario
cd <votre repertoire de travail> tar zxvf /Infos/bd/public/tmeJointureRep.tgz
On dispose de 2 SGBD : site 1 et site 2
- site 1 @ora11 :
CONNECT E1234567/E1234567@ora11 -- remplacer 1234567 par votre numéro d'étudiant -- vérifier la connexion en affichant le nom du SGBD : SELECT sys_context('USERENV', 'SESSION_USER') FROM dual; -- doit afficher oracle
- site 2 @ora10 :
CONNECT E1234567/E1234567@ora10 -- remplacer 1234567 par votre numéro d'étudiant SELECT sys_context('USERENV', 'SESSION_USER') FROM dual; -- doit afficher ora10
Données:
- Le site 1 ora11 contient les Clubs dans la table Club(cnum, nom, division, ville)
- le site 2 ora10 contient les Joueurs dans la table Stagiaire(licence, cnum, salaire, sport, profil)
La couche BDR est implémentée sur le site 1 ora11
Installation
Créer la table Club sur le site 1
CONNECT ... @ora11 @tableClub DESC Club
Créer la table Stagiaire sur le site 2
CONNECT ... @ora10 @tableStagiaire DESC Stagiaire
Relier les sites : La couche BDR (site1) doit pouvoir se connecter au site 2
CONNECT ... @ora11 DROP DATABASE link site2; CREATE DATABASE link site2 CONNECT TO E1234567 IDENTIFIED BY "E1234567" USING 'ora10'; -- remplacer 1234567 par votre numéro d'étudiant
Vérifier le bon fonctionnement du lien
CONNECT ... @ora11 DESC Stagiaire@site2
Construire le schéma global
CONNECT ... @ora11 CREATE VIEW Stagiaire AS SELECT * FROM Stagiaire@site2;
Requêtes réparties
Pour chaque requête, répondre aux questions
- Où est traitée chaque opération (sélection, projection, jointure, …) ?
- Quelles sont les données transférées entre les sites pendant l'évaluation de la requête ?
R1 : Jointure seule avec un transfert volumineux
Afficher les joueurs avec leur club
CONNECT ... @ora11 EXPLAIN plan FOR SELECT s.prenom, s.profil, c.division FROM Stagiaire s, Club c WHERE s.cnum = c.cnum; @p5
R2 : jointure avec sélection
SET linesize 120 EXPLAIN plan FOR SELECT s.prenom, s.profil, c.division FROM Stagiaire s, Club c WHERE s.cnum = c.cnum AND s.salaire > 59000; @p5
La sélection est-elle poussée sur le site 2 ?
R3 Jointure très sélective
- R3a : jointure très sélective et avec un transfert volumineux
EXPLAIN plan FOR SELECT s.prenom, s.profil, c.division FROM Stagiaire s, Club c WHERE s.cnum = c.cnum AND c.ville = 'Paris'; @p5
- R3b : jointure très sélective et avec un transfert faible.
La directive driving_site prend en argument le nom de la variable j1 associée à la relation stockée sur le site dans lequel oracle doit traiter la jointure (i.e. le site 2).
EXPLAIN plan FOR SELECT /*+ driving_site(j1) */ s.prenom, s.profil, c.division FROM Stagiaire s, Club c WHERE s.cnum = c.cnum AND c.ville = 'Paris'; @p5
Proposer d'autres requête pour illustrer les optimisations de requêtes réparties vues en cours.
Divers
Aller vers BDR