Académique Documents
Professionnel Documents
Culture Documents
Réparties
Architecture
Mise en œuvre
Duplication et
Réplication
Michel Tuffery
BDR : Définition
USS INP
SGBD SGBD
Site 1 Site 2
Base 1 Base 2
ETUDIANT_L
ETUDIANT
ETUDIANT_M
ETUDIANT_D
Projection et Sélection
UNION
S
SCOLARITE PROJECTION
T
A ETUDIANT
G
E
JOINTURE
EMPLOYE
NOM AGE NO SAL DPT
• Horizontale
– Fragments (prédicats) disjoints
– Fréquence d’accès uniforme (complétude) aux
fragments
• Verticale
– Regroupement des attributs accédés souvent ensemble
– Calcul de "l’affinité" entre deux attributs
Ordonnancement et algorithme
OPTIMISATION d’accès :
Ærègles de localisation
Æ choix du site de transfert
EXECUTION Æ semi - jointure
Jointure (Site 3)
Jointure (Site 2)
Jointure (Site 3)
Jointure (Site 1) O
Semi-Jointure (Site 2) C
O (idouv, titre)
Semi-Jointure (Site 2)
Projection Idouv
Emprunt (Site 2) Projection IdCli
C (idcli, nomcli)
Sélection auteur=‘Michel’
Sélection adrcli=‘Tlse’
Ouvrage (Site 3)
Client (Site 1)
BD réparties Michel Tuffery 23
(8) Transactions distribuées
COMMIT COMMIT
PANNE
Commit effectué
Rollback effectué !!
Solution insuffisante
BD réparties Michel Tuffery 25
Commit à deux phases (2PC)
Prêt Prêt
Commit Commit
OK
État ?
Commit
OK
• Validation normale
S1 S0 S2
Prêt ? Prêt ?
Prêt Prêt
Commit Commit
OK OK
S1 S0 S2
Prêt ? Prêt ?
Prêt
TIMEOUT
Défaire Défaire
OK
Reprise à chaud
(rollback)
S1 S0 S2
Prêt ? Prêt ?
Prêt Prêt
Commit Commit
Prêt
OK Reprise
Commit
OK
• Panne du coordinateur
S1 S0 S2
Prêt ? Prêt ?
Prêt Prêt
Prêt ? Prêt ?
Prêt Prêt
Commit Commit
OK OK
Site 1 Site 2
T1 T3
T2 T4
• Syntaxe de la commande
base1 base2
OWNER 1 OWNER 2
GRANT GRANT
DB LINK
• Manipulation distante
• Distribution
– BD distribuée ou répartie
– Sans redondance
• Duplication
– Duplication locale d’un fragment éloigné maître
– Fragment local en lecture seule
– Notion de cliché ou snapshot (materialized view)
– Duplication synchrone (maj instantannée) ou asynchrone (maj
en différé)
• Réplication
– Pas de fragment maître
– Duplications en miroir
– Réplication synchrone (emploi de jetons) ou asynchrone
(problèmes de cohérence)
Fichier
EXPORT export
• Base dupliquée
IMPORT
Log
Fichier
• Automatisation de paramètres
par shell OS
BD réparties Michel Tuffery 53
Duplication d’une table distante
Maître Cliché
Ordre de MAJ
déclenché
instantanément
Ordre de MAJ
Maître
Ordre de
TRIGGER
synchronisation
Cliché 2
Ordre de MAJ
Mise de l’ordre
en attente
Ordre de MAJ
Ordre déclenché
sur horloge
File d’attente (programmateur)
• Table Maître
SQL> SELECT * FROM maitre;
NOM
----------
ligne1
ligne33
BD réparties Michel Tuffery 61
Duplication Asynchrone par programmateur
Exemple de mise en attente d’ordres (2)
• Table attente
NUMERO ORDRE
------ ----------------------------------------------
1 insert into cliché@db_ora values('ligne1')
2 insert into cliché@db_ora values('ligne2')
3 insert into cliché@db_ora values('ligne3')
4 delete from cliché@db_ora where nom = 'ligne2'
5 update cliché@db_ora set nom = 'ligne33'
where nom = 'ligne3'
• Spécification
PROCEDURE submit
( job OUT BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE DEFAULT sysdate,
interval IN VARCHAR2 DEFAULT 'null',
no_parse IN BOOLEAN DEFAULT FALSE,
instance IN BINARY_INTEGER DEFAULT 0,
force IN BOOLEAN DEFAULT FALSE );
• REMOVE
PROCEDURE remove( job IN BINARY_INTEGER );
-- Remove an existing job from the job queue.
-- This currently does not stop a running job.
-- execute dbms_job.remove(14144);
• WHAT
PROCEDURE what( job IN BINARY_INTEGER,
what IN VARCHAR2 );
-- Change what an existing job does, and
--replace its environment
• NEXT_DATE
PROCEDURE next_date ( job IN BINARY_INTEGER,
next_date IN DATE );
-- Change when an existing job will next execute
Maître
Cliché
Ordre de MAJ
Ordre déclenché
sur horloge
Mise de l’ordre (programmateur)
en attente
Maître Cliché
Ordre de MAJ
• De nom MLOG$_nom_de_table_maître
Old ou New
• 4 méthodes de rafraîchissement
– NEVER : jamais rafraîchie
– COMPLETE : transfert complet
– FAST : transferts différentiels
– FORCE : FAST si possible, COMPLETE sinon
• Création du cliché
CREATE MATERIALIZED VIEW cliché
REFRESH FAST
AS SELECT * FROM maitre@db_tuf;
DBMS_MVIEW.REFRESH('nom_mv','F',NULL);
F (fast) ou C (complète)
IDM TEXTE
---------- --------------------
1 LIGNE 1
3 LIGNE 3
IDM TEXTE
---------- --------------------
1 LIGNE 1
3 LIGNE 3
EXECUTE dbms_mview.refresh('cliché','F',null);
EXECUTE dbms_mview.refresh('cliché2','F',null);
• Rafraîchissement de cliché2
EXECUTE dbms_mview.refresh(‘cliché2','F',null);
IDM TEXTE
---------- --------------------
1 LIGNE 1
3 LIGNE 3
4 ligne 4
5 ligne 5
6 ligne 6
7 ligne 7
• Rafraîchissement de cliché
EXECUTE dbms_mview.refresh(‘cliché','F',null);
• Création du cliché
Fragment 1 Fragment 2
ordres
déclenchés
ordres ordres
locaux locaux
Trigger déclenché
sans jeton
Fragment 1 Fragment 2
ordres
déclenchés
(avec jeton)
Trigger déclenché
ordres sans jeton ordres
locaux locaux
(sans jeton) (sans jeton)
F1 J J F2
J=2
V1 J J=1 J V2
J=NUL J=NUL
BD réparties Michel Tuffery 99
Réplication Synchrone par jetons
Synchronisation d’une insertion