Bases de Données Réparties Architecture Mise en œuvre Duplication et Réplication Michel Tuffery
BDR : Définition Ensemble de bases de données gérées par des sites différents et apparaissant à l utilisateur comme une base unique Les 4 universités Toulousaines : SELECT * FROM etudiant WHERE date_naissance=1994; UTM UPS USS INP BD réparties Michel Tuffery 2
Architecture d une BD répartie Gérant d applications Gérant d applications Gérant de données réparties Gérant de communication Réseau Gérant de communication Gérant de données réparties SGBD SGBD Site 1 Base 1 Site 2 Base 2 BD réparties Michel Tuffery 3
Fonctions d un SGBD réparti Gestion d un dictionnaire de données global Dictionnaire centralisé, dupliqué ou réparti Définition des données réparties Règles de localisation des données réparties Évaluation des requêtes réparties optimisation Gestion des transactions réparties COMMIT réparti Graphe local des transactions réparties BD réparties Michel Tuffery 4
Comparatif Client-Serveur et BD répartie Plusieurs bases vues par le client Plusieurs connexions Localisation explicite des bases ( connect string ou DSN) Règles de localisation dans l application 1 ordre SQL 1 seule BD N transactions mono-base Synchronisation des transactions dans l application Plusieurs COMMIT mono-base CLIENT SERVEUR Une base logique vue par le client Une seule connexion Indépendance à la localisation Règles de localisation dans le dictionnaire 1 ordre SQL plusieurs BD 1 transaction logique Synchronisation automatique des n sous-transactions 1 COMMIT généralisé BD REPARTIE BD réparties Michel Tuffery 5
Les 12 règles d un SGBD (1) Autonomie locale (2) Pas de site fédérateur (3) Exploitation en continue (4) Indépendance à la localisation (5) Règles de fragmentation (6) Duplications multiples (7) Requêtes distribuées (8) Transactions distribuées (9) Indépendance du matériel (10) Indépendance des systèmes d exploitation (11) Indépendance du réseau (12) Indépendance du SGBD BD réparties Michel Tuffery 6
(1) Autonomie locale Les données locales sont gérées localement Administration locale des données locales Site autonome pour ses propres opérations L administration de la BDR est décentralisée Administrateurs locaux coordonnés Pas d administration globale Possibilité d autoriser ou non un accès réparti à une base locale Accès local possible simultanément aux accès répartis BD réparties Michel Tuffery 7
(2) Pas de site fédérateur Pas de dépendance d un site par rapport à un autre Avantages : Architecture non vulnérable en cas de panne Pas de goulot d étranglement Inconvénients : Pas de contrôle centralisé des accès concurrents Pas de dictionnaire central Pas de recovery central Pas d exécution des requêtes centralisée BD réparties Michel Tuffery 8
(3) Exploitation en continue Pas d arrêt de la BDR pour la modification d un site Modification de la structure d une BD locale (LDD) Modification d un SGBD (Release, Upgrade, ) Extensibilité Ajout, suppression ou modification d un site Opération locale et non globale (règle 1) Propriété importante : évolution permanente BD réparties Michel Tuffery 9
(4) Indépendance à la localisation Objectif le plus important : changement de la localisation des données sans changer les programmes Nécessité d un dictionnaire réparti Avantages attendus : Illusion, pour l utilisateur, de travailler sur un seul site avec BD centralisée Évolution des règles de localisation sans impact sur l application Invisibilité du ou des réseaux (règle 11) Inconvénient majeur : Attention aux performances après un changement de localisation de données BD réparties Michel Tuffery 10
(5) Règles de fragmentation Découpage d une relation pour des raisons fonctionnelles Mémorisation des règles de localisation (optimisation des requêtes) Transparent pour l utilisateur Trois types de fragmentation Horizontal, Vertical et Mixte Opérateurs SQL utilisés projection et restriction pour fragmenter UNION et JOINTURE pour reconstituer BD réparties Michel Tuffery 11
Fragmentation horizontale ETUDIANT_L ETUDIANT_M ETUDIANT ETUDIANT_D Projection et Sélection UNION BD réparties Michel Tuffery 12
Fragmentation verticale SCOLARITE S T A G E PROJECTION JOINTURE ETUDIANT Duplication de la clé primaire sur chaque fragment BD réparties Michel Tuffery 13
Fragmentation mixte EMPLOYE NOM AGE NO SAL DPT E2 E3 E1 E1 ( NO, SAL, DPT) E2 (NOM, AGE, NO) E3 (NOM, AGE, NO) AGE<=30 AGE>30 Prise en compte des règles de fragmentation pour optimiser les requêtes : SELECT. FROM e3 WHERE. AND age <28 SELECT e3.* FROM e2,e3 WHERE e2.no=e3.no BD réparties Michel Tuffery 14
Fragmentation : construction de la BDR Construction descendante : la base centralisée est distribuée sur plusieurs sites (BDD) C est le cas le plus fréquent La base centralisée devient trop importante : elle est distribuée avec des règles Construction ascendante : les diverses bases locales sont restructurées et assemblées, la base est répartie sur plusieurs sites (BDR) Cas du rachat ou du regroupement d entreprises Principe : "ne pas dupliquer les données" BD réparties Michel Tuffery 15
Faire une bonne fragmentation 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 BD réparties Michel Tuffery 16
(6) Duplications multiples (indépendance à la localisation) Duplication des données sur des sites distants Gain de temps pour les accès en lecture (interdit en modification) augmentation des performances Mises à jour par rafraîchissements périodiques à partir du site qui possède le fragment initial Inconvénient : pas de mise à jour immédiate Intéressant pour les données stables BD réparties Michel Tuffery 17
Duplication : le principe des clichés ou "snapshots" Duplication en "cohérence faible" Rafraîchissements périodiques Plusieurs solutions techniques "estampillage" des lignes modifiées avec la date et heure de sa dernière MAJ Utilisation d une "table différentielle" contenant uniquement les lignes modifiées Oracle a choisi la deuxième technique avec un "journal" de transactions sur le fragment initial (voir plus loin) BD réparties Michel Tuffery 18
(7) Requêtes distribuées Évaluation des requêtes distribuées ou réparties plan d exécution réparti Le SGBD comprend que la requête traite avec des objets physiques distants La requête est reconstruite en tenant compte de la localisation des objets Les opérateurs de restriction (sélection, projection) qui réduisent la taille sont appliqués au plus tôt Utilisation du parallélisme BD réparties Michel Tuffery 19
Évaluation d une requête répartie DECOMPOSITION SQL ALGEBRE LOCALISATION Reconstruction de la requête avec le dictionnaire réparti OPTIMISATION EXECUTION Ordonnancement et algorithme d accès : règles de localisation choix du site de transfert semi - jointure BD réparties Michel Tuffery 20
Optimisation d une requête répartie : 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 réparties Michel Tuffery 21
Requête répartie avec jointures Jointure (Site 3) Jointure (Site 2) Sélection adrcli= Tlse Emprunt (Site 2) Sélection auteur= Michel Client (Site 1) Ouvrage (Site 3) BD réparties Michel Tuffery 22
Requête répartie avec semi-jointures Jointure (Site 3) Jointure (Site 1) O Semi-Jointure (Site 2) Semi-Jointure (Site 2) C O (idouv, titre) Emprunt (Site 2) Projection Idouv Projection IdCli C (idcli, nomcli) Sélection auteur= Michel Sélection adrcli= Tlse Client (Site 1) Ouvrage (Site 3) BD réparties Michel Tuffery 23
(8) Transactions distribuées Sécurité, fiabilité et continuité quoi qu il arrive Différents types de pannes Panne d une transaction en exécution Panne simple d un site Panne catastrophique d un site Notion de transaction Atomicité Cohérence Isolation Durabilité BD réparties Michel Tuffery 24
Panne d une transaction ou panne simple PANNE Garantir l atomicité des transactions en utilisant les mécanismes de journalisation et le protocole de validation en deux étapes Transactions réparties : commit généralisé Commit normal Le site initiateur d une transaction décide du commit Les sites exécutants obéissent SITE 1 SITE 0 SITE 2 COMMIT Rollback effectué!! Solution insuffisante COMMIT Commit effectué BD réparties Michel Tuffery 25
Commit à deux phases (2PC) Le site initiateur envoie, à tous les sites touchés par la transaction, un "prêt à commettre? " Chaque site répond "prêt" Le site initiateur envoie les commit à tous les sites Chaque site répond "ok" La transaction est validée quand tous les sites ont fait le commit Tous les cas d erreur sont traités grâce aux journaux sur chaque site BD réparties Michel Tuffery 26
Commit à deux phases SITE 1 Prêt à commettre? SITE 0 SITE 2 Prêt à commettre? Prêt Prêt Commit Commit OK État? Commit OK BD réparties Michel Tuffery 27
Exemples de validation en deux étapes (1) Validation normale S1 S0 S2 Prêt? Prêt? Prêt Prêt Commit Commit OK OK BD réparties Michel Tuffery 28
Exemples de validation en deux étapes (2) Panne de S2 avant d être prêt S1 S0 S2 Prêt? Prêt? Prêt Défaire TIMEOUT Défaire OK Reprise à chaud (rollback) BD réparties Michel Tuffery 29
Exemples de validation en deux étapes (3) Panne de S2 après envoi de prêt S1 S0 S2 Prêt? Prêt? Prêt Prêt Commit OK Commit Prêt Commit OK Reprise BD réparties Michel Tuffery 30
Exemples de validation en deux étapes (4) Panne du coordinateur S1 S0 S2 Prêt? Prêt? Prêt Prêt? Prêt Commit OK Prêt Prêt? Prêt Commit OK BD réparties Michel Tuffery 31
Reprise à froid après 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 l ensemble du système réparti Le site coordinateur décide : Le site en panne peut restaurer la transaction ("prêt") et la séquence se poursuit (processus "Reco") Le site en panne ne peut restaurer la transaction : Demande à tous les sites de défaire les transactions Risque d effet domino BD réparties Michel Tuffery 32
Problème des accès concurrents verrou mortel global Pose de verrous sur des objets répartis Gestion d un graphe d attente réparti Graphe Qui Attend Quoi (QAQ) réparti Chaque site gère son propre graphe local et communique l information sur ses propres transactions bloquées Site 1 Site 2 T1 T3 T2 T4 BD réparties Michel Tuffery 33
(9), (10), (11) Indépendance du matériel, des systèmes d exploitation et du réseau Une base est "cliente" d une autre base et vice versa : architecture client - serveur C est le "connect string" ou "chaîne hôte" qui permet cette indépendance Contenu du "connect string" Protocole réseau Serveur hôte (n port) Nom de l instance de la base BD réparties Michel Tuffery 34
(12) Indépendance du SGBD Très difficile d arriver à cette indépendance Interfaces communes minimum : Protocole d échange Lecture et traduction des dictionnaires, types de données. Fonctions réciproques client serveur Système de mise à jour cohérent Verrouillage cohérent,.. Noyau standard avec SQL ANSI BD réparties Michel Tuffery 35
Création des fragments dans les bases distantes SQL-ANSI propose un ordre CREATE FRAGMENT permettant de créer les tables distantes Cet ordre permettra de conserver les règles de fragmentation dans le dictionnaire réparti Cet ordre n est pas encore implémenté Oracle propose l ordre COPY COPY est un ordre SQL+ permettant de Duplicationr un fragment d une base vers une autre en utilisant les connect string COPY possède 2 variables d environnement configurables COPYCOMMIT : intervalle du nombre de lignes transférées entre 2 COMMIT (0 : COMMIT à la fin) ARRAYSIZE : nombre de lignes transférées par chaque FETCH BD réparties Michel Tuffery 36
Commande COPY Syntaxe de la commande COPY FROM spécification_base1 - TO spécification_base2 - {APPEND CREATE REPLACE INSERT} - fragment [(colonnes)] - USING SELECT. APPEND : [CREATE] + INSERT Caractère ligne suite CREATE : CREATE + INSERT REPLACE : [DROP] + CREATE + INSERT INSERT : INSERT BD réparties Michel Tuffery 37
Exemples de COPY Création 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' Création d un 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 réparties Michel Tuffery 38
Contraintes des fragments La commande COPY n exporte pas les contraintes (sauf NOT NULL) Il faut les recréer Clés primaires Clés étrangères Contraintes autres Problème pour les clés étrangères distantes Impossible d utiliser les DB LINKS (voir plus loin) Créer deux TRIGGERS : Sur le fragment fils : le père doit exister Sur le fragment père : suppression impossible si des fils sont présents BD réparties Michel Tuffery 39
Bases réparties : travail de compte à compte Ne pas travailler avec les véritables comptes propriétaires des données Chaque site distant doit créer un compte ayant accès aux objets répartis locaux Ces comptes 'miroir' sont crées par le DBA et reçoivent les droits d accès par les propriétaires des données réparties Chaque responsable local de la BDR ne connaît que le password des comptes 'miroir' distants BD réparties Michel Tuffery 40
Organisation de l ensemble base1 base2 OWNER 1 OWNER 2 GRANT GRANT DB LINK Compte miroir bdr/bdr Compte miroir bdr/bdr BD réparties Michel Tuffery 41
Lien inter-bases : Database Link Lien défini par un utilisateur pour relier deux bases Connaissance du user/password du compte miroir distant Utilisation du 'connect string' du serveur local pour accéder à l instance distante CREATE DATABASE LINK dbl_base2 CONNECT TO bdr IDENTIFIED by bdr USING 'vers_base2'; Nom du connect string User/password BD réparties Michel Tuffery 42
Manipulation des DataBase Link Suppression d un lien DROP DATABASE LINK dbl_base2; Dictionnaire de données : USER_DB_LINKS SQL> col DB_LINK format a8 SQL> col USERNAME format a8 SQL> col PASSWORD format a8 SQL> col HOST format a8 SQL> col CREATED format a8 SQL> select * from user_db_links; DB_LINK USERNAME PASSWORD HOST CREATED -------- -------- -------- -------- -------- DB_ORA MICHEL MICHEL oracle 14/01/03 BD réparties Michel Tuffery 43
Utilisation des DataBase Link Sélection d un fragment distant SQL> select * from etudiant@db_ora; INE NOM DIPLO CYCLE ---------- -------------------- ----- ---------- 100 étudiant 100 miag3 2 200 étudiant 200 stri3 2 300 étudiant 300 miag3 2 400 étudiant 400 stri2 2 Manipulation distante SQL> update etudiant@db_ora SET cycle=3; 4 ligne(s) mise(s) à jour. BD réparties Michel Tuffery 44
Indépendance à la localisation les SYNONYMS Création d un synonyme CREATE SYNONYM etudiant FOR etudiant@db_ora; Suppression d un synonyme DROP SYNONYM etudiant; BD réparties Michel Tuffery 45
Constructions des objets virtuels Reconstitution d un 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 d un objet non éclaté : SYNONYM CREATE SYNONYM sequence_client FOR sequence_client@db_link; BD réparties Michel Tuffery 46
Manipulation d une base répartie les Procédures stockées Les procédures stockées ou packages se comportent comme de véritables méthodes Les données réparties sont encapsulées et ne sont pas accessibles directement aux développeurs clients Les règles de fragmentation sont dans les procédures La localisation des données est transparente aux utilisateurs : appel des procédures sans connaissance de la base La transaction est traitée dans la procédure (COMMIT / ROLLBACK) BD réparties Michel Tuffery 47
Manipulation d une base répartie les Triggers INSTEAD OF Ces triggers s appliquent sur des vues Les développeurs clients connaissent les objets virtuels et exécutent les ordres du LMD Les triggers INSTEAD OF prennent la main et font les mises à jour sur les fragments distants Les développeurs serveur connaissent les règles de distribution Ces triggers lèvent éventuellement des erreurs applicatives (raise_application_error) La transaction n est pas dans le Trigger mais dans le programme client BD réparties 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 réparties Michel Tuffery 49
Duplication et Réplication des données réparties
Distribution, Duplication et Réplication 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) BD réparties Michel Tuffery 51
Duplication de données : différentes possibilités Duplication d une base entière EXPORT IMPORT programmé Duplication d une table Create ou Copy Duplication synchrone : trigger ou trigger instead of Duplication asynchrone programmée par programmateur Duplication asynchrone assurée par Oracle : les snapshot ou vues matérialisées BD réparties Michel Tuffery 52
Exportation et Importation d une base Base maître Fichier de paramètres Log EXPORT Fichier export Base dupliquée IMPORT Automatisation par shell OS Fichier de paramètres Log BD réparties Michel Tuffery 53
Duplication d une table distante Processus simple, rapide et fiable (PUSH ou PULL) Duplication complète (sans les contraintes) CREATE TABLE copie AS SELECT * FROM maître@dblink; Duplication d un fragment CREATE TABLE Duplication AS SELECT col1, col3, col5 FROM maître@dblink WHERE prédicat_de_resriction; BD réparties Michel Tuffery 54
Duplication d une table distante (2) Table locale existante DELETE FROM copie; INSERT INTO copie SELECT * FROM maître@dblink; COMMIT; Marquage des lignes transférées INSERT INTO copie SELECT * FROM maître@dblink WHERE jeton='pas transféré' FOR UPDATE; UPDATE maître SET jeton='transféré' WHERE jeton='pas transféré'; COMMIT; BD réparties Michel Tuffery 55
Duplication d une table distante (3) COPY La Duplication peut être 'pilotée' à partir d un site tiers Plusieurs cas de Duplication (page 37) Duplication des données sans les contraintes Fortement utilisé pour créer les fragments répartis initiaux BD réparties Michel Tuffery 56
Duplication Synchrone Mise à jour instantanée de la Duplication pour toute modification de la table maître La duplication synchrone fait partie de la transaction Maître Cliché Ordre de MAJ Ordre de MAJ déclenché instantanément BD réparties Michel Tuffery 57 Duplication Synchrone
Duplication Synchrone : mise en œuvre avec les trigger Trigger de type 'before' qui répercute l ordre exécuté sur la table maître dans la table cliché La transaction est gérée par le client : exceptions possibles Insertion, mise à jour et suppression de données Plusieurs clichés possibles Méthode 'PUSH' Cliché 1 Maître TRIGGER Ordre de synchronisation Cliché 2 Ordre de MAJ BD réparties Michel Tuffery 58 Duplication Synchrone
Duplication Asynchrone par programmateur La mise à jour du cliché est différée Utilisation d un programmateur et d une file d attente Maître TRIGGER Cliché Mise de l ordre en attente Ordre de MAJ File d attente Ordre déclenché sur horloge (programmateur) BD réparties Michel Tuffery 59 Duplication Asynchrone par programmateur
Exemple de mise en attente d un ordre Un trigger de type 'before' est posé sur la table maître Important de conserver la séquence des ordres de mise à jour Utilisation du dblink CREATE TRIGGER mise_attente BEFORE INSERT ON maître FOR EACH ROW vordre VARCHAR(200); BEGIN vordre:='insert INTO cliché@dblink VALUES '; INSERT INTO attente(numéro,ordre) VALUES (seq_ordre.nextval,vordre); END; BD réparties Michel Tuffery 60 Duplication Asynchrone par programmateur
Exemple de mise en attente d ordres Ordres de mise à jour dans maître INSERT INTO maitre VALUES('ligne1'); INSERT INTO maitre VALUES('ligne2'); INSERT INTO maitre VALUES('ligne3'); DELETE FROM maitre WHERE nom='ligne2'; UPDATE maitre SET nom='ligne33' WHERE nom='ligne3'; 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 SQL> select * from 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' BD réparties Michel Tuffery 62 Duplication Asynchrone par programmateur
Notion de Programmateur Service de déclenchement d un processus par ordre d une horloge Logiciel installé extérieur (OS) ou interne à la base de données La table d attente peut être sur le site maître ou de Duplication Le programmateur peut être sur le site maître ou de Duplication Programmateur interne à la BD : JOBS BD réparties Michel Tuffery 63 Duplication Asynchrone par programmateur
Programmateur avec Oracle Processus (Unix) ou Service de type SNP Vérifier l état du service sur NT (activé) Le processus ouvre une session dans la base à intervalle régulier (programmé) et consulte les tâches Exécution en tâche de fond Utilisation multiple : sauvegarde, export, duplication, MAJ d attributs dérivés,. Exécution asynchrone BD réparties Michel Tuffery 64 Duplication Asynchrone par programmateur
Mise en service du programmateur (DBA) Vérification du nombre de jobs autorisés SQL> SELECT name,value FROM v$parameter 2 WHERE name LIKE '%job%'; NAME VALUE ------------------------------ --------- job_queue_processes 10 Si = 0, modifier le paramètre (init.ora, pfile) ou la commande système : ALTER SYSTEM SET job_queue_processes=10; -- 1000 au maximum Droits d exécution du package CONNECT system GRANT EXECUTE ON dbms_job TO user; BD réparties Michel Tuffery 65 Duplication Asynchrone par programmateur
Package DBMS_JOB Ce package permet de manipuler des taches ou JOBS Il contient des procédures : REMOVE CHANGE WHAT RUN SUBMIT BD réparties Michel Tuffery 66 Duplication Asynchrone par programmateur
Procédure SUBMIT 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 ); -- 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 réparties Michel Tuffery 67 Duplication Asynchrone par programmateur
Autres Procédures REMOVE WHAT 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); 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 réparties Michel Tuffery 68 Duplication Asynchrone par programmateur
Exemple de manipulation de job Procédure d insertion d une 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 réparties 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 réparties Michel Tuffery 70 Duplication Asynchrone par programmateur
Exemple de job d extraction de la file d attente 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 réparties Michel Tuffery 71 Duplication Asynchrone par programmateur
Placement du programmateur Gestion lourde pour la base (et l OS) Gestion des processus de fond Placé dans la base la moins chargée Deux types de propagations possibles PUSH Le programmateur "pousse" les ordres de MAJ PULL Le programmateur "tire" les ordres de MAJ BD réparties Michel Tuffery 72 Duplication Asynchrone par programmateur
Propagation par PUSH La base maître pousse vers le répliqua Maître Cliché Ordre de MAJ Mise de l ordre en attente Ordre déclenché sur horloge (programmateur) BD réparties Michel Tuffery 73 Duplication Asynchrone par programmateur
Propagation par PULL Le répliqua tire les modifications Maître Cliché Ordre de MAJ Mise de l ordre en attente Ordre déclenché sur horloge (programmateur) BD réparties Michel Tuffery 74 Duplication Asynchrone par programmateur
Gestion des erreurs Obligation de gérer les erreurs de façon autonome Plusieurs types d erreur Erreur de connexion vers le site de répliqua Violation de contraintes (?) Panne du réplicateur. Création d un journal (log) des erreurs Certaines erreurs sont irrattrapables Actions ponctuelles pour ramener à un état stable BD réparties Michel Tuffery 75 Duplication Asynchrone par programmateur
Duplication par Oracle Les vues matérialisées ou snapshots Technique d Oracle pour la duplication asynchrone Un cliché ou snapshot est un fragment de données en lecture seule Le cliché est rafraîchi à intervalles réguliers (refresh) ou à la demande Les rafraichissements sont complets (complete) ou différentiels (fast) Le cliché (fragment dupliqué) peut être le résultat de : Restriction verticale d une table Restriction horizontale Une jointure de plusieurs tables BD réparties Michel Tuffery 76 Duplication Asynchrone par Oracle
Principe général C est le site du cliché qui tire les MAJ (pull) On crée une vue matérialisée pour créer le cliché avec les méthodes de rafraîchissement et le contenu choisis Pour chaque table maître qui alimente un cliché, il faut créer un journal de vue matérialisée Ce journal contient les mises à jour différées gérées selon deux techniques possibles Par rowid (pas conseillé en cas de réorganisation de blocs) Par clé primaire (utilisé par défaut) table maître avec une clé primaire obligatoire Une table maître (un même journal) peut alimenter plusieurs fragments dupliqués BD réparties Michel Tuffery 77 Duplication Asynchrone par Oracle
Mise en œuvre d un rafraîchissement complet exécuté volontairement Création de la table maître sur le site maître DROP TABLE maitre; CREATE TABLE maitre (idm NUMBER PRIMARY KEY, texte varchar(20)); Création du journal de vue matérialisée sur le site maître DROP MATERIALIZED VIEW LOG ON maitre; CREATE MATERIALIZED VIEW LOG ON maitre; BD réparties Michel Tuffery 78 Duplication Asynchrone par Oracle
Journal de vue matérialisée De nom MLOG$_nom_de_table_maître SQL> DESC mlog$_maitre Clé primaire Nom Type ----------------------- --------------- IDM NUMBER Ordre du LMD SNAPTIME$$ DATE DMLTYPE$$ VARCHAR2(1) OLD_NEW$$ VARCHAR2(1) CHANGE_VECTOR$$ RAW(255) Old ou New Pour les copies multiples BD réparties Michel Tuffery 79 Duplication Asynchrone par Oracle
Ordre de création de vue matérialisée (1) Création sans intervalles de rafraîchissements CREATE MATERIALIZED VIEW copie REFRESH [NEVER COMPLETE FAST FORCE] AS SELECT FROM maître@dblink ; 4 méthodes de rafraîchissement NEVER : jamais rafraîchie COMPLETE : transfert complet FAST : transferts différentiels FORCE : FAST si possible, COMPLETE sinon BD réparties Michel Tuffery 80 Duplication Asynchrone par Oracle
Ordre de création de vue matérialisée (2) Création avec intervalles de rafraîchissements CREATE MATERIALIZED VIEW copie REFRESH FAST START WITH sysdate NEXT sysdate + 1 WITH PRIMARY KEY AS SELECT FROM maître@dblink ; Début du transfert Intervalle de rafraîchissement BD réparties Michel Tuffery 81 Duplication Asynchrone par Oracle
Mise en œuvre : cliché par rafraîchissement manuel Création du cliché CREATE MATERIALIZED VIEW cliché REFRESH FAST AS SELECT * FROM maitre@db_tuf; On utilisera la procédure refresh du package dbms_mview pour rafraîchir DBMS_MVIEW.REFRESH('nom_mv','F',NULL); F (fast) ou C (complète) BD réparties Michel Tuffery 82 Duplication Asynchrone par Oracle
Mises à jour sur la table maître Ordres de mise à jour INSERT INTO maitre VALUES(1,'ligne 1'); INSERT INTO maitre VALUES(2,'ligne 2'); INSERT INTO maitre VALUES(3,'ligne 3'); UPDATE maitre SET texte = 'LIGNE 1' WHERE idm=1; UPDATE maitre SET texte = 'LIGNE 3' WHERE idm=3; DELETE FROM maitre WHERE idm=2; SQL> SELECT * FROM maitre; IDM TEXTE ---------- -------------------- 1 LIGNE 1 3 LIGNE 3 BD réparties Michel Tuffery 83 Duplication Asynchrone par Oracle
Contenu du journal de MV La date indique qu aucun rafraîchissement n a eu lieu à partir de ce journal (pour un éventuel autre cliché) SQL> COL CHANGE_VECTOR$$ FORMAT a10 SQL> SELECT * FROM mlog$_maitre; IDM SNAPTIME D O CHANGE_VEC ---------- -------- - - ---------- 1 01/01/00 I N FE 2 01/01/00 I N FE 3 01/01/00 I N FE 1 01/01/00 U U 04 3 01/01/00 U U 04 2 01/01/00 D O 00 BD réparties Michel Tuffery 84 Duplication Asynchrone par Oracle