Vous êtes sur la page 1sur 107

Bases de Donnes Rparties

Architecture Mise en uvre Duplication et Rplication


Michel Tuffery

BDR : Dfinition

Ensemble de bases de donnes gres par des sites diffrents et apparaissant lutilisateur comme une base unique Les 4 universits Toulousaines :
SELECT * FROM etudiant WHERE date_naissance=1994;

UTM

UPS

USS

INP

BD rparties

Michel Tuffery

Architecture dune BD rpartie

Grant dapplications Grant de donnes rparties Grant de communication Rseau

Grant dapplications Grant de communication Grant de donnes rparties

SGBD
Site 1 Base 1

SGBD
Site 2 Base 2

BD rparties

Michel Tuffery

Fonctions dun SGBD rparti Gestion dun dictionnaire de donnes global


Dictionnaire centralis, dupliqu ou rparti

Dfinition des donnes rparties Rgles de localisation des donnes rparties valuation des requtes rparties
optimisation

Gestion des transactions rparties


COMMIT rparti Graphe local des transactions rparties
BD rparties Michel Tuffery 4

Comparatif Client-Serveur et BD rpartie


Plusieurs bases vues par le client Plusieurs connexions Localisation explicite des bases (connect string ou DSN) Rgles de localisation dans lapplication 1 ordre SQL 1 seule BD N transactions mono-base Synchronisation des transactions dans lapplication Plusieurs COMMIT mono-base CLIENT SERVEUR
BD rparties Michel Tuffery

Une base logique vue par le client Une seule connexion Indpendance la localisation Rgles de localisation dans le dictionnaire 1 ordre SQL plusieurs BD 1 transaction logique Synchronisation automatique des n sous-transactions 1 COMMIT gnralis BD REPARTIE
5

Les 12 rgles dun SGBD

(1) Autonomie locale (2) Pas de site fdrateur (3) Exploitation en continue (4) Indpendance la localisation (5) Rgles de fragmentation (6) Duplications multiples (7) Requtes distribues (8) Transactions distribues (9) Indpendance du matriel (10) Indpendance des systmes dexploitation (11) Indpendance du rseau (12) Indpendance du SGBD
Michel Tuffery 6

BD rparties

(1) Autonomie locale

Les donnes locales sont gres localement Administration locale des donnes locales Site autonome pour ses propres oprations Ladministration de la BDR est dcentralise
Administrateurs locaux coordonns Pas dadministration globale Possibilit dautoriser ou non un accs rparti une base locale Accs local possible simultanment aux accs rpartis

BD rparties

Michel Tuffery

(2) Pas de site fdrateur

Pas de dpendance dun site par rapport un autre Avantages :


Architecture non vulnrable en cas de panne Pas de goulot dtranglement

Inconvnients :
Pas de contrle centralis des accs concurrents Pas de dictionnaire central Pas de recovery central Pas dexcution des requtes centralise
Michel Tuffery 8

BD rparties

(3) Exploitation en continue

Pas darrt de la BDR pour la modification dun site


Modification de la structure dune BD locale (LDD) Modification dun SGBD (Release, Upgrade, )

Extensibilit
Ajout, suppression ou modification dun site Opration locale et non globale (rgle 1) Proprit importante : volution permanente

BD rparties

Michel Tuffery

(4) Indpendance la localisation


Objectif le plus important : changement de la localisation des donnes sans changer les programmes Ncessit dun dictionnaire rparti Avantages attendus :
Illusion, pour lutilisateur, de travailler sur un seul site avec BD centralise volution des rgles de localisation sans impact sur lapplication Invisibilit du ou des rseaux (rgle 11)

Inconvnient majeur :
Attention aux performances aprs un changement de localisation de donnes

BD rparties

Michel Tuffery

10

(5) Rgles de fragmentation

Dcoupage dune relation pour des raisons fonctionnelles Mmorisation des rgles de localisation (optimisation des requtes) Transparent pour lutilisateur Trois types de fragmentation
Horizontal, Vertical et Mixte

Oprateurs SQL utiliss


projection et restriction pour fragmenter UNION et JOINTURE pour reconstituer
BD rparties Michel Tuffery 11

Fragmentation horizontale

ETUDIANT_L ETUDIANT_M ETUDIANT_D Projection et Slection ETUDIANT

UNION

BD rparties

Michel Tuffery

12

Fragmentation verticale

SCOLARITE

S T A G E

PROJECTION ETUDIANT JOINTURE

Duplication de la cl primaire sur chaque fragment

BD rparties

Michel Tuffery

13

Fragmentation mixte
EMPLOYE NOM AGE NO SAL DPT E1 ( NO, SAL, DPT)

E2 E1 E3

E2 (NOM, AGE, NO) E3 (NOM , AGE, NO)

AGE<=30 AGE>30

Prise en compte des rgles de fragmentation pour optimiser les requtes :


SELECT . FROM e3 WHERE . AND age <28 SELECT e3.* FROM e2,e3 WHERE e2.no=e3.no
BD rparties Michel Tuffery 14

Fragmentation : construction de la BDR


Construction descendante : la base centralise est distribue sur plusieurs sites (BDD)
Cest le cas le plus frquent La base centralise devient trop importante : elle est distribue avec des rgles

Construction ascendante : les diverses bases locales sont restructures et assembles, la base est rpartie sur plusieurs sites (BDR)
Cas du rachat ou du regroupement dentreprises Principe : "ne pas dupliquer les donnes"

BD rparties

Michel Tuffery

15

Faire une bonne fragmentation

Horizontale
Fragments (prdicats) disjoints Frquence daccs uniforme (compltude) aux fragments

Verticale
Regroupement des attributs accds souvent ensemble Calcul de "laffinit" entre deux attributs

BD rparties

Michel Tuffery

16

(6) Duplications multiples (indpendance la localisation)


Duplication des donnes sur des sites distants Gain de temps pour les accs en lecture (interdit en modification) augmentation des performances Mises jour par rafrachissements priodiques partir du site qui possde le fragment initial Inconvnient : pas de mise jour immdiate Intressant pour les donnes stables

BD rparties

Michel Tuffery

17

Duplication : le principe des clichs ou "snapshots"


Duplication en "cohrence faible" Rafrachissements priodiques Plusieurs solutions techniques
"estampillage" des lignes modifies avec la date et heure de sa dernire MAJ Utilisation dune "table diffrentielle" contenant uniquement les lignes modifies

Oracle a choisi la deuxime technique avec un "journal" de transactions sur le fragment initial (voir plus loin)

BD rparties

Michel Tuffery

18

(7) Requtes distribues


valuation des requtes distribues ou rparties plan dexcution rparti Le SGBD comprend que la requte traite avec des objets physiques distants La requte est reconstruite en tenant compte de la localisation des objets Les oprateurs de restriction (slection, projection) qui rduisent la taille sont appliqus au plus tt Utilisation du paralllisme

BD rparties

Michel Tuffery

19

valuation dune requte rpartie

DECOMPOSITION

SQL ALGEBRE

LOCALISATION

Reconstruction de la requte avec le dictionnaire rparti

OPTIMISATION

Ordonnancement et algorithme daccs :


rgles de localisation choix du site de transfert

EXECUTION

semi - jointure

BD rparties

Michel Tuffery

20

Optimisation dune requte rpartie : la semi - jointure


Site 1 : Client (IdCli, nomcli, .) Site 2 : Emprunt (IdCli,IdOuv, .) Site 3 : Ouvrage (IdOuv, titre, .)

SELECT c.nomcli, o.titre FROM client c, emprunt e, ouvrage o WHERE c.idcli=e.idcli AND e.idouv=o.idouv AND c.adrcli=Tlse AND o.auteur=Michel;
BD rparties Michel Tuffery 21

Requte rpartie avec jointures

Jointure (Site 3)

Jointure (Site 2)

Slection adrcli=Tlse

Emprunt (Site 2)

Slection auteur=Michel

Client (Site 1)

Ouvrage (Site 3)

BD rparties

Michel Tuffery

22

Requte rpartie avec semi-jointures

Jointure (Site 3) Jointure (Site 1) Semi-Jointure (Site 2) Semi-Jointure (Site 2) Emprunt (Site 2) Projection IdCli C O (idouv, titre) Projection Idouv C (idcli, nomcli) Slection auteur=Michel O

Slection adrcli=Tlse Client (Site 1)


BD rparties Michel Tuffery

Ouvrage (Site 3)
23

(8) Transactions distribues

Scurit , fiabilit et continuit quoi quil arrive Diffrents types de pannes


Panne dune transaction en excution Panne simple dun site Panne catastrophique dun site

Notion de transaction

Atomicit Cohrence Isolation Durabilit


BD rparties Michel Tuffery 24

Panne dune transaction ou panne simple


Garantir latomicit des transactions en utilisant les mcanismes de journalisation et le protocole de validation en deux tapes Transactions rparties : commit gnralis Commit normal
Le site initiateur dune transaction dcide du commit Les sites excutants obissent
SITE 1 PANNE COMMIT Rollback effectu !! SITE 0 COMMIT Commit effectu SITE 2

Solution insuffisante
BD rparties Michel Tuffery 25

Commit deux phases (2PC)


Le site initiateur envoie, tous les sites touchs par la transaction, un "prt commettre ? " Chaque site rpond "prt" Le site initiateur envoie les commit tous les sites Chaque site rpond "ok" La transaction est valide quand tous les sites ont fait le commit Tous les cas derreur sont traits grce aux journaux sur chaque site

BD rparties

Michel Tuffery

26

Commit deux phases

SITE 1

Prt commettre ? Prt Commit

SITE 0

Prt commettre ? Prt Commit OK

SITE 2

tat ? Commit OK

BD rparties

Michel Tuffery

27

Exemples de validation en deux tapes (1)


Validation normale
S1 Prt ? Prt Commit OK S0 Prt ? Prt Commit OK S2

BD rparties

Michel Tuffery

28

Exemples de validation en deux tapes (2)


Panne de S2 avant dtre prt
S1 Prt ? Prt Dfaire OK S0 Prt ? S2

TIMEOUT Dfaire Reprise chaud (rollback)

BD rparties

Michel Tuffery

29

Exemples de validation en deux tapes (3)


Panne de S2 aprs envoi de prt
S1 Prt ? Prt Commit OK S0 Prt ? Prt Commit Prt Commit OK Reprise S2

BD rparties

Michel Tuffery

30

Exemples de validation en deux tapes (4)


Panne du coordinateur
S1 Prt ? Prt Prt ? Prt Commit OK S0 Prt ? Prt Prt ? Prt Commit OK S2

BD rparties

Michel Tuffery

31

Reprise froid aprs une panne catastrophique


Restauration de la base partir de la sauvegarde et du journal ("Recovery de la base") Une reprise est toujours locale Retour un tat stable de lensemble du systme rparti Le site coordinateur dcide :
Le site en panne peut restaurer la transaction ("prt") et la squence se poursuit (processus "Reco") Le site en panne ne peut restaurer la transaction : Demande tous les sites de dfaire les transactions Risque deffet domino

BD rparties

Michel Tuffery

32

Problme des accs concurrents verrou mortel global


Pose de verrous sur des objets rpartis Gestion dun graphe dattente rparti
Graphe Qui Attend Quoi (QAQ) rparti Chaque site gre son propre graphe local et communique linformation sur ses propres transactions bloques
Site 1 T1 Site 2 T3

T2

T4

BD rparties

Michel Tuffery

33

(9), (10), (11) Indpendance du matriel, des systmes dexploitation et du rseau


Une base est "cliente" dune autre base et vice versa : architecture client - serveur Cest le "connect string" ou "chane hte" qui permet cette indpendance Contenu du "connect string"
Protocole rseau Serveur hte (n port) Nom de linstance de la base

BD rparties

Michel Tuffery

34

(12) Indpendance du SGBD


Trs difficile darriver cette indpendance Interfaces communes minimum :
Protocole dchange Lecture et traduction des dictionnaires, types de donnes . Fonctions rciproques client serveur Systme de mise jour cohrent Verrouillage cohrent, ..

Noyau standard avec SQL ANSI

BD rparties

Michel Tuffery

35

Cration des fragments dans les bases distantes


SQL-ANSI propose un ordre CREATE FRAGMENT permettant de crer les tables distantes Cet ordre permettra de conserver les rgles de fragmentation dans le dictionnaire rparti Cet ordre nest pas encore implment Oracle propose lordre COPY COPY est un ordre SQL+ permettant de Duplicationr un fragment dune base vers une autre en utilisant les connect string COPY possde 2 variables denvironnement configurables
COPYCOMMIT : intervalle du nombre de lignes transfres entre 2 COMMIT (0 : COMMIT la fin) ARRAYSIZE : nombre de lignes transfres par chaque FETCH

BD rparties

Michel Tuffery

36

Commande COPY
Syntaxe de la commande
COPY FROM spcification_base1 TO spcification_base2 {APPEND|CREATE|REPLACE|INSERT} fragment [(colonnes)] USING SELECT . -

APPEND : [CREATE] + INSERT Caractre ligne suite CREATE : CREATE + INSERT REPLACE : [DROP] + CREATE + INSERT INSERT : INSERT

BD rparties

Michel Tuffery

37

Exemples de COPY
Cration ou remplacement du fragment
COPY FROM michel/michel@vers_base1 TO michel/michel@vers_base2 REPLACE enseignants_info USING SELECT * FROM enseignants WHERE ufr='info' -

Cration dun fragment initial avec restriction verticale


COPY FROM michel/michel@vers_base1 TO michel/michel@vers_base2 CREATE etudiant_scol(ine,nom,adr) USING SELECT inet,nomet,adret FROM etudiant

BD rparties

Michel Tuffery

38

Contraintes des fragments

La commande COPY nexporte pas les contraintes (sauf NOT NULL) Il faut les recrer
Cls primaires Cls trangres Contraintes autres

Problme pour les cls trangres distantes


Impossible dutiliser les DB LINKS (voir plus loin) Crer deux TRIGGERS : Sur le fragment fils : le pre doit exister Sur le fragment pre : suppression impossible si des fils sont prsents

BD rparties

Michel Tuffery

39

Bases rparties : travail de compte compte


Ne pas travailler avec les vritables comptes propritaires des donnes Chaque site distant doit crer un compte ayant accs aux objets rpartis locaux Ces comptes 'miroir' sont cres par le DBA et reoivent les droits daccs par les propritaires des donnes rparties Chaque responsable local de la BDR ne connat que le password des comptes 'miroir' distants

BD rparties

Michel Tuffery

40

Organisation de lensemble
base1 base2

OWNER 1

OWNER 2

GRANT

GRANT

DB LINK

Compte miroir bdr/bdr

Compte miroir bdr/bdr

BD rparties

Michel Tuffery

41

Lien inter-bases : Database Link


Lien dfini par un utilisateur pour relier deux bases Connaissance du user/password du compte miroir distant Utilisation du 'connect string' du serveur local pour accder linstance distante
CREATE DATABASE LINK dbl_base2 CONNECT TO bdr IDENTIFIED by bdr USING 'vers_base2'; Nom du connect string
BD rparties Michel Tuffery

User/password
42

Manipulation des DataBase Link


Suppression dun lien
DROP DATABASE LINK dbl_base2;

Dictionnaire de donnes : USER_DB_LINKS


SQL> SQL> SQL> SQL> SQL> SQL> col DB_LINK format a8 col USERNAME format a8 col PASSWORD format a8 col HOST format a8 col CREATED format a8 select * from user_db_links;

DB_LINK USERNAME PASSWORD HOST CREATED -------- -------- -------- -------- -------DB_ORA MICHEL MICHEL oracle 14/01/03
BD rparties Michel Tuffery 43

Utilisation des DataBase Link


Slection dun fragment distant
SQL> select * from etudiant@DB_ORA; INE ---------100 200 300 400 NOM -------------------tudiant 100 tudiant 200 tudiant 300 tudiant 400 DIPLO CYCLE ----- ---------miag3 2 stri3 2 miag3 2 stri2 2

Manipulation distante
SQL> update etudiant@DB_ORA SET cycle=3; 4 ligne(s) mise(s) jour.
BD rparties Michel Tuffery 44

Indpendance la localisation les SYNONYMS

Cration dun synonyme


CREATE SYNONYM etudiant FOR etudiant@db_ora;

Suppression dun synonyme


DROP SYNONYM etudiant;

BD rparties

Michel Tuffery

45

Constructions des objets virtuels


Reconstitution dun objet fragment : VIEW
CREATE VIEW etudiant (ine,nom,adr,cycle) AS SELECT inet,nomet,adret,L FROM etud_licence UNION SELECT inet,nomet,adret,M FROM etud_mastere;

Reconstitution dun objet non clat : SYNONYM


CREATE SYNONYM sequence_client FOR sequence_client@db_link;

BD rparties

Michel Tuffery

46

Manipulation dune base rpartie les Procdures stockes

Les procdures stockes ou packages se comportent comme de vritables mthodes Les donnes rparties sont encapsules et ne sont pas accessibles directement aux dveloppeurs clients Les rgles de fragmentation sont dans les procdures La localisation des donnes est transparente aux utilisateurs : appel des procdures sans connaissance de la base La transaction est traite dans la procdure (COMMIT / ROLLBACK)

BD rparties

Michel Tuffery

47

Manipulation dune base rpartie les Triggers INSTEAD OF


Ces triggers sappliquent sur des vues Les dveloppeurs clients connaissent les objets virtuels et excutent les ordres du LMD Les triggers INSTEAD OF prennent la main et font les mises jour sur les fragments distants Les dveloppeurs serveur connaissent les rgles de distribution Ces triggers lvent ventuellement des erreurs applicatives (raise_application_error) La transaction nest pas dans le Trigger mais dans le programme client
BD rparties Michel Tuffery 48

Exemple de Trigger INSTEAD OF


CREATE TRIGGER insert_etudiant INSTEAD OF INSERT ON etudiant FOR EACH ROW BEGIN IF :NEW.cycle=L THEN INSERT INTO etudiant_licence@db_l VALUES (:NEW.ine,:NEW.nom,:NEW.adresse); INSERT INTO stage@db_s VALUES (:NEW.ine,:NEW.nomstage,:NEW.adstage); ELSIF :NEW.cycle=M THEN ....... Idem pour M et D ........ ELSE RAISE_APPLICATION_ERROR (-20455,Entrer M, L ou D); END IF; END; /
BD rparties Michel Tuffery 49

Duplication et Rplication des donnes rparties

Distribution , Duplication et Rplication


Distribution
BD distribue ou rpartie Sans redondance

Duplication
Duplication locale dun fragment loign matre Fragment local en lecture seule Notion de clich ou snapshot (materialized view) Duplication synchrone (maj instantanne) ou asynchrone (maj en diffr)

Rplication
Pas de fragment matre Duplications en miroir Rplication synchrone (emploi de jetons) ou asynchrone (problmes de cohrence)

BD rparties

Michel Tuffery

51

Duplication de donnes : diffrentes possibilits


Duplication dune base entire
EXPORT IMPORT programm

Duplication dune table


Create ou Copy

Duplication synchrone : trigger ou trigger instead of Duplication asynchrone programme par programmateur Duplication asynchrone assure par Oracle : les snapshot ou vues matrialises
BD rparties Michel Tuffery 52

Exportation et Importation dune base


Base matre
Fichier de paramtres Log

EXPORT
Base duplique

Fichier export

IMPORT
Log Fichier de paramtres

Automatisation par shell OS

BD rparties

Michel Tuffery

53

Duplication dune table distante


Processus simple, rapide et fiable (PUSH ou PULL) Duplication complte (sans les contraintes)
CREATE TABLE copie AS SELECT * FROM matre@dblink;

Duplication dun fragment


CREATE TABLE Duplication AS SELECT col1, col3, col5 FROM matre@dblink WHERE prdicat_de_resriction;

BD rparties

Michel Tuffery

54

Duplication dune table distante (2)


Table locale existante
DELETE FROM copie; INSERT INTO copie SELECT * FROM matre@dblink; COMMIT;

Marquage des lignes transfres


INSERT INTO copie SELECT * FROM matre@dblink WHERE jeton='pas transfr' FOR UPDATE; UPDATE matre SET jeton='transfr' WHERE jeton='pas transfr'; COMMIT;
BD rparties Michel Tuffery 55

Duplication dune table distante (3) COPY

La Duplication peut tre 'pilote' partir dun site tiers Plusieurs cas de Duplication (page 37) Duplication des donnes sans les contraintes Fortement utilis pour crer les fragments rpartis initiaux

BD rparties

Michel Tuffery

56

Duplication Synchrone
Mise jour instantane de la Duplication pour toute modification de la table matre La duplication synchrone fait partie de la transaction
Matre Clich

Ordre de MAJ

Ordre de MAJ dclench instantanment

BD rparties

Michel Tuffery

57 Duplication Synchrone

Duplication Synchrone : mise en uvre avec les trigger


Trigger de type 'before' qui rpercute lordre excut sur la table matre dans la table clich
La transaction est gre par le client : exceptions possibles Insertion, mise jour et suppression de donnes Plusieurs clichs possibles Mthode 'PUSH'

Clich 1

Matre Ordre de synchronisation

TRIGGER

Clich 2

Ordre de MAJ
BD rparties Michel Tuffery 58 Duplication Synchrone

Duplication Asynchrone par programmateur


La mise jour du clich est diffre Utilisation dun programmateur et dune file dattente
Matre
TRIGGER

Clich

Mise de lordre en attente Ordre de MAJ Ordre dclench sur horloge (programmateur)

File dattente
BD rparties

Michel Tuffery

59 Duplication Asynchrone par programmateur

Exemple de mise en attente dun ordre


Un trigger de type 'before' est pos sur la table matre Important de conserver la squence des ordres de mise jour Utilisation du dblink

CREATE TRIGGER mise_attente BEFORE INSERT ON matre FOR EACH ROW vordre VARCHAR(200); BEGIN vordre:='INSERT INTO clich@dblink VALUES '; INSERT INTO attente(numro,ordre) VALUES (seq_ordre.NEXTVAL,vordre); END;
BD rparties Michel Tuffery 60 Duplication Asynchrone par programmateur

Exemple de mise en attente dordres


Ordres de mise jour dans matre
INSERT INSERT INSERT DELETE UPDATE WHERE INTO maitre VALUES('ligne1'); INTO maitre VALUES('ligne2'); INTO maitre VALUES('ligne3'); FROM maitre WHERE nom='ligne2'; maitre SET nom='ligne33' nom='ligne3';

Table Matre
SQL> SELECT * FROM maitre; NOM ---------ligne1 ligne33
BD rparties Michel Tuffery 61 Duplication Asynchrone par programmateur

Exemple de mise en attente dordres (2)


Table attente
SQL> select * from attente; NUMERO -----1 2 3 4 5 ORDRE ---------------------------------------------insert into clich@db_ora values('ligne1') insert into clich@db_ora values('ligne2') insert into clich@db_ora values('ligne3') delete from clich@db_ora where nom = 'ligne2' update clich@db_ora set nom = 'ligne33' where nom = 'ligne3'

BD rparties

Michel Tuffery

62 Duplication Asynchrone par programmateur

Notion de Programmateur

Service de dclenchement dun processus par ordre dune horloge Logiciel install extrieur (OS) ou interne la base de donnes La table dattente peut tre sur le site matre ou de Duplication Le programmateur peut tre sur le site matre ou de Duplication Programmateur interne la BD : JOBS

BD rparties

Michel Tuffery

63 Duplication Asynchrone par programmateur

Programmateur avec Oracle


Processus (Unix) ou Service de type SNP
Vrifier ltat du service sur NT (activ)

Le processus ouvre une session dans la base intervalle rgulier (programm) et consulte les tches Excution en tche de fond Utilisation multiple : sauvegarde, export, duplication, MAJ dattributs drivs, . Excution asynchrone

BD rparties

Michel Tuffery

64 Duplication Asynchrone par programmateur

Mise en service du programmateur (DBA)


Vrification du nombre de jobs autoriss
SQL> SELECT name,value FROM v$parameter 2 WHERE name LIKE '%job%'; NAME VALUE ------------------------------ --------job_queue_processes 10

Si = 0, modifier le paramtre (init.ora, pfile) ou la commande systme :


ALTER SYSTEM SET job_queue_processes=10; -- 1000 au maximum

Droits dexcution du package


CONNECT system GRANT EXECUTE ON dbms_job TO user;
BD rparties Michel Tuffery 65 Duplication Asynchrone par programmateur

Package DBMS_JOB

Ce package permet de manipuler des taches ou JOBS Il contient des procdures :


REMOVE CHANGE WHAT RUN SUBMIT

BD rparties

Michel Tuffery

66 Duplication Asynchrone par programmateur

Procdure SUBMIT
Spcification
PROCEDURE submit ( job what next_date interval no_parse instance force OUT IN IN IN IN IN IN BINARY_INTEGER, VARCHAR2, DATE DEFAULT sysdate, VARCHAR2 DEFAULT 'null', BOOLEAN DEFAULT FALSE, BINARY_INTEGER DEFAULT 0, BOOLEAN DEFAULT FALSE );

-- Submit a new job.Chooses JOB from the -- sequence sys.jobseq. -- For example, -variable x number; -execute dbms_job.submit(:x,'pack.proc(''arg1'');' -- ,sysdate,'sysdate+1');
BD rparties Michel Tuffery 67 Duplication Asynchrone par programmateur

Autres Procdures
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

BD rparties

Michel Tuffery

68 Duplication Asynchrone par programmateur

Exemple de manipulation de job


Procdure dinsertion dune ligne avec horaire
drop table testjob; create table testjob (t varchar(50)); create or replace procedure test_job is heure varchar(20); begin heure:=to_char(sysdate,'HH24-MI-SS'); ; insert into testjob values('ajout : '||heure) end; / execute test_job; SQL> select * from testjob; T ------------------------ajout : 14-23-51
BD rparties Michel Tuffery 69 Duplication Asynchrone par programmateur

Exemple de manipulation de job (2)


variable numjob number; execute dbms_job.submit(:numjob,'test_job;', sysdate,'sysdate+1/1440'); SQL>print numjob NUMJOB ---------Attention au ; 3 SQL> select * from testjob T -----------------ajout : 14-44-28 ajout : 14-45-30 ajout : 14-46-31 SQL>select job,what from user_jobs; JOB WHAT ---------- -----------3 test_job; execute dbms_job.remove(3);
BD rparties Michel Tuffery 70 Duplication Asynchrone par programmateur

Exemple de job dextraction de la file dattente


Sans traiter les exceptions CREATE PROCEDURE exeordres IS CURSOR c1 is SELECT ordre FROM attente ORDER BY numero FOR UPDATE; BEGIN FOR c1rec IN c1 LOOP EXECUTE IMMEDIATE c1rec.ordre; DELETE FROM attente WHERE CURRENT OF c1; END LOOP; COMMIT; END; Le job qui lance le programmateur variable numjob number; execute dbms_job.submit(:numjob,'exeordres;', sysdate,'sysdate+1'); print numjob
BD rparties Michel Tuffery 71 Duplication Asynchrone par programmateur

Placement du programmateur

Gestion lourde pour la base (et lOS)


Gestion des processus de fond

Plac dans la base la moins charge Deux types de propagations possibles


PUSH Le programmateur "pousse" les ordres de MAJ PULL Le programmateur "tire" les ordres de MAJ

BD rparties

Michel Tuffery

72 Duplication Asynchrone par programmateur

Propagation par PUSH


La base matre pousse vers le rpliqua

Matre Clich

Ordre de MAJ Mise de lordre en attente

Ordre dclench sur horloge (programmateur)

BD rparties

Michel Tuffery

73 Duplication Asynchrone par programmateur

Propagation par PULL


Le rpliqua tire les modifications

Matre

Clich

Ordre de MAJ Mise de lordre en attente Ordre dclench sur horloge (programmateur)

BD rparties

Michel Tuffery

74 Duplication Asynchrone par programmateur

Gestion des erreurs

Obligation de grer les erreurs de faon autonome Plusieurs types derreur


Erreur de connexion vers le site de rpliqua Violation de contraintes (?) Panne du rplicateur .

Cration dun journal (log) des erreurs Certaines erreurs sont irrattrapables
Actions ponctuelles pour ramener un tat stable

BD rparties

Michel Tuffery

75 Duplication Asynchrone par programmateur

Duplication par Oracle Les vues matrialises ou snapshots


Technique dOracle pour la duplication asynchrone Un clich ou snapshot est un fragment de donnes en lecture seule Le clich est rafrachi intervalles rguliers (refresh) ou la demande Les rafraichissements sont complets (complete) ou diffrentiels (fast) Le clich (fragment dupliqu) peut tre le rsultat de :
Restriction verticale dune table Restriction horizontale Une jointure de plusieurs tables

BD rparties

Michel Tuffery

76 Duplication Asynchrone par Oracle

Principe gnral
Cest le site du clich qui tire les MAJ (pull) On cre une vue matrialise pour crer le clich avec les mthodes de rafrachissement et le contenu choisis Pour chaque table matre qui alimente un clich, il faut crer un journal de vue matrialise Ce journal contient les mises jour diffres gres selon deux techniques possibles
Par rowid (pas conseill en cas de rorganisation de blocs) Par cl primaire (utilis par dfaut) table matre avec une cl primaire obligatoire

Une table matre (un mme journal) peut alimenter plusieurs fragments dupliqus

BD rparties

Michel Tuffery

77 Duplication Asynchrone par Oracle

Mise en uvre dun rafrachissement complet excut volontairement


Cration de la table matre sur le site matre
DROP TABLE maitre; CREATE TABLE maitre (idm NUMBER PRIMARY KEY, texte varchar(20));

Cration du journal de vue matrialise sur le site matre


DROP MATERIALIZED VIEW LOG ON maitre; CREATE MATERIALIZED VIEW LOG ON maitre;

BD rparties

Michel Tuffery

78 Duplication Asynchrone par Oracle

Journal de vue matrialise


De nom MLOG$_nom_de_table_matre
SQL> DESC mlog$_maitre Nom ----------------------IDM SNAPTIME$$ DMLTYPE$$ OLD_NEW$$ CHANGE_VECTOR$$
Cl primaire

Pour les copies multiples

Type --------------NUMBER Ordre du LMD DATE VARCHAR2(1) VARCHAR2(1) RAW(255)

Old ou New
BD rparties Michel Tuffery 79 Duplication Asynchrone par Oracle

Ordre de cration de vue matrialise (1)


Cration sans intervalles de rafrachissements
CREATE MATERIALIZED VIEW copie REFRESH [NEVER | COMPLETE | FAST | FORCE] AS SELECT FROM matre@dblink ;

4 mthodes de rafrachissement
NEVER : jamais rafrachie COMPLETE : transfert complet FAST : transferts diffrentiels FORCE : FAST si possible, COMPLETE sinon

BD rparties

Michel Tuffery

80 Duplication Asynchrone par Oracle

Ordre de cration de vue matrialise (2)

Cration avec intervalles de rafrachissements


CREATE MATERIALIZED VIEW copie REFRESH FAST START WITH sysdate NEXT sysdate + 1 WITH PRIMARY KEY AS SELECT FROM matre@dblink ;

Dbut du transfert

Intervalle de rafrachissement

BD rparties

Michel Tuffery

81 Duplication Asynchrone par Oracle

Mise en uvre : clich par rafrachissement manuel


Cration du clich
CREATE MATERIALIZED VIEW clich REFRESH FAST AS SELECT * FROM maitre@db_tuf;

On utilisera la procdure refresh du package dbms_mview pour rafrachir


DBMS_MVIEW.REFRESH('nom_mv','F',NULL);

F (fast) ou C (complte)

BD rparties

Michel Tuffery

82 Duplication Asynchrone par Oracle

Mises jour sur la table matre


Ordres de mise jour
INSERT INSERT INSERT UPDATE UPDATE DELETE INTO maitre VALUES(1,'ligne 1'); INTO maitre VALUES(2,'ligne 2'); INTO maitre VALUES(3,'ligne 3'); maitre SET texte = 'LIGNE 1' WHERE idm=1; maitre SET texte = 'LIGNE 3' WHERE idm=3; FROM maitre WHERE idm=2;

SQL> SELECT * FROM maitre; IDM ---------1 3


BD rparties

TEXTE -------------------LIGNE 1 LIGNE 3


Michel Tuffery 83 Duplication Asynchrone par Oracle

Contenu du journal de MV
La date indique quaucun rafrachissement na eu lieu partir de ce journal (pour un ventuel autre clich) SQL> COL CHANGE_VECTOR$$ FORMAT a10 SQL> SELECT * FROM mlog$_maitre; IDM ---------1 2 3 1 3 2
BD rparties

SNAPTIME -------01/01/00 01/01/00 01/01/00 01/01/00 01/01/00 01/01/00

D I I I U U D

O N N N U U O

CHANGE_VEC ---------FE FE FE 04 04 00
84 Duplication Asynchrone par Oracle

Michel Tuffery

Rafrachissement manuel
Rafrachissement manuel complet
EXECUTE dbms_mview.refresh('clich','C',null); SQL> select * from clich; IDM ---------1 3 TEXTE -------------------LIGNE 1 LIGNE 3

-- sur le site matre SQL> SELECT * FROM mlog$_maitre; aucune ligne slectionne
BD rparties Michel Tuffery

Il ny a pas dautres clichs


85 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (1)


Sur le site matre
INSERT INTO maitre VALUES(4,'ligne 4'); INSERT INTO maitre VALUES(5,'ligne 5'); COMMIT;
Sinon, pas de propagation

SQL>

SELECT * FROM mlog$_maitre; SNAPTIME -------01/01/00 01/01/00 D I I O N N CHANGE_VEC ---------FE FE


86 Duplication Asynchrone par Oracle

IDM ---------5 4
BD rparties

Michel Tuffery

Rafrachissement diffrentiel manuel avec deux clichs (2)


Sur le site de copie : on cre le second clich
create materialized view clich2 refresh fast as SELECT * FROM maitre@db_tuf;

On lance le rafrachissement manuel


EXECUTE dbms_mview.refresh('clich','F',null); EXECUTE dbms_mview.refresh('clich2','F',null);
BD rparties Michel Tuffery 87 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (3)


Vrification de la propagation des modifications
SQL> SELECT * FROM clich; IDM TEXTE ---------- -------------------1 LIGNE 1 3 LIGNE 3 4 ligne 4 5 ligne 5 SQL> SELECT * FROM clich2; IDM TEXTE ---------- -------------------1 LIGNE 1 3 LIGNE 3 4 ligne 4 5 ligne 5
BD rparties Michel Tuffery 88 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (4)


Sur le site matre
SQL> SELECT * FROM mlog$_maitre; aucune ligne slectionne INSERT INTO maitre VALUES(6,'ligne 6'); COMMIT; SQL> SELECT * FROM mlog$_maitre; IDM SNAPTIME D O CHANGE_VEC ---------- -------- - - ---------6 01/01/00 I N FE
BD rparties Michel Tuffery 89 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (5)


On ne rafrachit que le premier clich
EXECUTE dbms_mview.refresh(clich','F',null); SQL> SELECT * FROM clich; IDM TEXTE ---------- -------------------1 LIGNE 1 3 LIGNE 3 4 ligne 4 5 ligne 5 6 ligne 6

Journal du site matre


SQL> SELECT * FROM mlog$_maitre; IDM SNAPTIME D O CHANGE_VEC ---------- -------- - - ---------6 03/10/04 I N FE
BD rparties Michel Tuffery

Il reste la ligne 6 pour clich2 Voir la date - heure

90 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (6)


Mise jour de matre

INSERT INTO maitre VALUES (7,'ligne 7'); SQL> select * from mlog$_maitre; IDM ---------7 6 SNAPTIME -------01/01/00 03/10/04 D I I O N N CHANGE_VEC ---------FE FE

BD rparties

Michel Tuffery

91 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (7)


Rafrachissement de clich2
EXECUTE dbms_mview.refresh(clich2','F',null); SQL> select * from esclave2; IDM ---------1 3 4 5 6 7
BD rparties

TEXTE -------------------LIGNE 1 LIGNE 3 ligne 4 ligne 5 ligne 6 ligne 7


Michel Tuffery 92 Duplication Asynchrone par Oracle

Rafrachissement diffrentiel manuel avec deux clichs (8)


Le journal de matre
SQL> SELECT * FROM mlog$_maitre; IDM SNAPTIME D O CHANGE_VEC ---------- -------- - - ---------7 03/10/04 I N FE

Rafrachissement de clich
EXECUTE dbms_mview.refresh(clich','F',null); -- sur le site matre SQL> SELECT * FROM mlog$_maitre; aucune ligne slectionne
BD rparties Michel Tuffery 93 Duplication Asynchrone par Oracle

Rafrachissement automatique

Cration du clich

CREATE MATERIALIZED VIEW clich3 REFRESH FAST START WITH sysdate NEXT sysdate + 1 WITH PRIMARY KEY FOR UPDATE AS SELECT * FROM maitre@db_tuf;

BD rparties

Michel Tuffery

94 Duplication Asynchrone par Oracle

Rplication Synchrone des donnes


Mmes mcanismes que pour la duplication synchrone mais dans les deux sens La rplication synchrone fait partie de la transaction Mise en place de trigger (instead of) dans chaque site : problme de diffrentiation des ordres de mise jour :
Ordres locaux de MAJ, Ordres de MAJ dclench par trigger

Utilisation de JETONS pour diffrencier

BD rparties

Michel Tuffery

95 Rplication Synchrone par jetons

Rplication synchrone : le principe


Deux fragments en miroir complet

Fragment 1 ordres dclenchs

Fragment 2

ordres locaux

ordres locaux

BD rparties

Michel Tuffery

96 Rplication Synchrone par jetons

Principe des triggers avec jetons


Jeton nul pour les ordres locaux
Trigger dclench sans jeton ordres dclenchs (avec jeton) Trigger dclench sans jeton

Fragment 1

Fragment 2

ordres locaux (sans jeton)

ordres locaux (sans jeton)

BD rparties

Michel Tuffery

97 Rplication Synchrone par jetons

Cohrence des donnes : squence commune

Pas de problme de cl primaire dans les fragments Utilisation dune squence commune pour alimenter les cls primaires des fragments rpliqus Chaque site travaille sur la mme squence grce un synonyme

BD rparties

Michel Tuffery

98 Rplication Synchrone par jetons

Technique de synchronisation Fragment et vues


Chaque fragment (F) possde sa vue (V) Fragment et vue ont une colonne jeton (J)
Soit valeur nulle Soit une valeur permettant de savoir le site metteur
F1 J J F2

J=2 V1 J J=1 J V2

BD rparties

J=NUL

J=NUL
Michel Tuffery 99 Rplication Synchrone par jetons

Synchronisation dune insertion

Linsertion locale se fait avec un jeton nul Le trigger instead of comprend si lordre est local ou de synchronisation La valeur finale du jeton dans le fragment permet de savoir le site metteur de linsertion Prvoir une exception avec lerreur SQL

BD rparties

Michel Tuffery

100 Rplication Synchrone par jetons

Synchronisation dune suppression

Le jeton permet de savoir quel type de suppression En cas de suppression avec un ordre local, il faut renseigner (modifier) le jeton distant (X) et faire les suppressions Si le jeton a t modifi (X), la suppression ne sera que locale

BD rparties

Michel Tuffery

101 Rplication Synchrone par jetons

Synchronisation dune modification

Le jeton nouveau dune modification locale est nul Modification des 2 fragments avec un jeton non nul (connaissance du site qui modifie) Si le jeton nouveau nest pas nul , modification locale

BD rparties

Michel Tuffery

102 Rplication Synchrone par jetons

Rplication Asynchrone
La mise jour des fragments se fait en diffr comme pour la duplication mais dans les deux sens

MAJ sur horloge

MAJ mis en attente MAJ MAJ

BD rparties

Michel Tuffery

103 Rplication Asynchrone

Rplication Asynchrone risque dincohrence des donnes


La convergence des donnes est trs difficile assurer Les mises jour risquent de sexcuter dans un ordre diffrent sur une mme donne Le principe ACID des transactions peut ne plus tre respect On peut avoir des fragments diffrents : divergence des copies !

BD rparties

Michel Tuffery

104 Rplication Asynchrone

Divergence des copies

En asynchrone, la transaction de MAJ ne pilote pas la rplication Impossible de dfaire des transactions valides Mettre en uvre une technique pour dtecter et rsoudre les conflits Possible aussi de revenir en simple duplication en choisissant un site matre Choisir une solution SGBD : vues matrialises modifiables
BD rparties Michel Tuffery 105 Rplication Asynchrone

Rplication asynchrone avec Oracle

Oracle propose une rplication asynchrone avec la technique des vues matrialises modifiables (for update) Notion de groupes de vues matrialises Technique assez lourde et complexe mettre en oeuvre

BD rparties

Michel Tuffery

106 Rplication Asynchrone avec Oracle

Travaux Pratiques
(1) Cration base centralise et manipulation
Cration des objets : tables, contraintes, squences Manipulation avec des procdures stockes Fragmentation des donnes Reconstruction des contraintes Cration des objets virtuels (db_link) Commit deux phases Procdures stockes Trigger Instead Of Synchrone : trigger Asynchrone : programmateur Jobs diffrs avec procdures Asynchrone : vues matrialises (snapshot)

(2) Cration de la base rpartie

(3) Manipulation de la base rpartie


(4) Duplication des donnes

(5) Rplication des donnes

Synchrone : trigger ou trigger instead of (avec jeton) [Asynchrone : programmateur (?)] [Asynchrone : vues matrialises en modification (?)] BD rparties Michel Tuffery

107

Vous aimerez peut-être aussi