IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Réplication Oracle avec vues matérialisées : "updatable matérialized view"


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Profil pro
    DBA-Administrateur système
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : DBA-Administrateur système

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Points : 18
    Points
    18
    Par défaut Réplication Oracle avec vues matérialisées : "updatable matérialized view"
    Bonjour à tous

    Je souhaite mettre en place un système de réplication bi-directionnelle dans un environnement Oracle.

    Cela se ferait entre une base MASTER et plusieurs bases répliquées sur des Laptop (qui utilise ORACLE XE)

    Comme j'ai du oublier les outils tels que STREAMS , j'ai décidé de passer par les vues matérialisées en m'aidant de la doc officiel de ORACLE.

    J'ai donc mis en place des "updatable materialized view" car je souhaite répliquer les infos des tables de la base master sur mes "vues matérialisé" qui seront sur les bases locales des laptops , mais également , lorsque l'utilisateur "écrira " dans la vue faire remonter les infos sur la base MASTER.

    selon le schéma de la doc oracle , on voit bien que la réplication des infos se fait dans les deux sens ..hors actuellement , voici ce que j'ai:

    Si je met a jour ma base master et que je rafraîchis ma vue (ou attend ma maj automatique ) pas de soucis , je retrouve bien les infos de ma table master dans sa vue en locale.

    Si j'ecris une ligne dans ma vue , l'infos ne remonte pas....(je sais que un refresh sur une vue efface ce qu'on a écrit dedans ..mais je pesais que je pourrais au moins faire remonter les infos à la table master..((( )


    Si vous pouviez m'éclairer la dessus ,au moins me dire si il y a une possibilité de faire ca..car a par les vues "updatable" je ne vois pas..

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 22
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Les vues matérialisées modifiables fonctionnent dans XE, j'ai le vérifié.

    Si nous rafraîchissons une vue matérialisée sans propager la transaction déférée, une ligne insérée dans une vue matérialisée peut disparaître temporairement, pour la raison que la modification doit d'abord parvenir à la table maître.

    C'est plus clair si le rafraîchissement n'est pas automatique et la propagation n'est pas non plus. Un exemple:

    La table maître:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    connect TEST_SCHEMA@OR11203
    test_schema@OR11203> select * from TEST_TABLE;
     
    aucune ligne sélectionnée
    La base de la vue matérialisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    connect TEST_SCHEMA@XE112
     
    test_schema@XE> select * from TEST_MVIEW;
     
    aucune ligne sélectionnée
     
    test_schema@XE> insert into TEST_MVIEW (ID,VAL) values (1,1);
     
    1 ligne créée.
     
    commit;
    Validation effectuée.
     
    test_schema@XE>  select * from TEST_MVIEW;
     
            ID        VAL
    ---------- ----------
             1          1
    La ligne existe dans la vue matérialisée, mais n'existe pas dans la table maître:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test_schema@XE>select * from TEST_SCHEMA.TEST_TABLE@OR11203.LOCAL;
    aucune ligne sélectionnée
    Rafraîchissons la vue matérialisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    connect MVIEWADMIN@XE112
     
    begin
        dbms_mview.refresh(
            list=>'TEST_SCHEMA.TEST_MVIEW',
            push_deferred_rpc=>false);
    end;
    /
     
    Procédure PL/SQL terminée avec succès.
    La ligne insérée a disparu de la vue matérialisée et ne s'est pas présenté dans la table maître.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mviewadmin@XE> select * from TEST_SCHEMA.TEST_MVIEW;
    aucune ligne sélectionnée
     
    mviewadmin@XE> select * from TEST_SCHEMA.TEST_TABLE@OR11203.LOCAL;
    aucune ligne sélectionnée
    Mais la ligne disparue s'est conservée dans la queue des transactions déférées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mviewadmin@XE> select dblink dest, count(1) trans
    from deftrandest D
    group by dblink;
     
    DEST                      TRANS
    -------------------- ----------
    OR11203.LOCAL                 1
    Propageons la transaction déférée à la base maître:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mviewadmin@XE> declare
        V_DUMMY INTEGER;
    begin
        V_DUMMY := dbms_defer_sys.push(destination=>'OR11203.LOCAL');
    end;
    /
     
    Procédure PL/SQL terminée avec succès.
    La ligne s'est présentée à la table maître:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mviewadmin@XE> select * from TEST_SCHEMA.TEST_TABLE@OR11203.LOCAL;
            ID        VAL
    ---------- ----------
             1          1
    Mais non dans la vue matérialisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mviewadmin@XE> select * from TEST_SCHEMA.TEST_MVIEW;
    aucune ligne sélectionnée
    Rafraîchissons la vue matérialisée de nouveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mviewadmin@XE> begin
        dbms_mview.refresh(
            list=>'TEST_SCHEMA.TEST_MVIEW',
            push_deferred_rpc=>false);
    end;
    /
    Procédure PL/SQL terminée avec succès.
    La ligne est enfin parvenue à la vue matérialisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mviewadmin@XE> select * from TEST_SCHEMA.TEST_MVIEW;
            ID        VAL
    ---------- ----------
             1          1

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/09/2016, 13h39
  2. Oracle Database - Vue matérialisée et Streams
    Par Apaachee dans le forum Oracle
    Réponses: 0
    Dernier message: 19/11/2012, 19h27
  3. [Oracle 9i] : Vues matérialisées
    Par dcollart dans le forum Administration
    Réponses: 2
    Dernier message: 22/05/2007, 17h14
  4. [Oracle 9] vues matérialisées
    Par doukem dans le forum Administration
    Réponses: 15
    Dernier message: 09/11/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo