Ceci est une ancienne révision du document !
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.
cd <votre repertoire de travail> tar zxvf /Infos/bd/public/tmeJointureRep.tgz cd tmeJointureRep emacs tmeJR.sql &
On dispose de deux SGBD hébergés sur des sites différents
-- se connecter en remplaçant 1234567 par votre numéro d'étudiant CONNECT E1234567/E1234567@ora11 -- vérifier la connexion en affichant le nom du SGBD : SELECT sys_context('USERENV', 'INSTANCE_NAME') FROM dual; -- doit afficher oracle
-- se connecter en remplaçant 1234567 par votre numéro d'étudiant CONNECT E1234567/E1234567@ora10 SELECT sys_context('USERENV', 'INSTANCE_NAME') FROM dual; -- doit afficher ora10
Données:
La couche BDR est implémentée sur le site 1 appelé ora11
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; -- remplacer 1234567 par votre numéro d'étudiant CREATE DATABASE link site2 CONNECT TO E1234567 IDENTIFIED BY "E1234567" USING 'ora10';
Vérifier le bon fonctionnement du lien
CONNECT ... @ora11 DESC Stagiaire@site2
CONNECT ... @ora11 CREATE VIEW Stagiaire AS SELECT * FROM Stagiaire@site2;
Pour chaque requête, répondre aux questions
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
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 ?
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
La directive driving_site prend en argument le nom de la variable s associée à la table Stagiaire stockée sur le site dans lequel oracle doit traiter la jointure. Autrement dit, Oracle doit traiter la jointure sur le site 2 contenant Stagiaire.
EXPLAIN plan FOR SELECT /*+ driving_site(s) */ s.prenom, s.profil, c.division FROM Stagiaire s, Club c WHERE s.cnum = c.cnum AND c.ville = 'Paris'; @p5
Aller vers BDR