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

Réplications Sybase Discussion :

[RS]DDL Replication Server


Sujet :

Réplications Sybase

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut [RS]DDL Replication Server
    Bonsoir,

    J'ai quelques petits soucis avec le concept de base de Sybase Replication Server.
    Voila, j'ai plusieurs bases sources (ASE 12.5.0.3 avec même modèle de donnée) qui doivent être répliquées en une seule (modèle identique si ce n'est l'ajout d'une colonne pour différencier les données).
    Le problème se pose lorsqu'il y a changement (assez conséquent) du modèle sur les bases à répliquer (lors d'une nouvelle version), comment peut-on répercuter ce changement sur la base destination de façon relativement automatique et surtout sans avoir à refaire une matérialisation ?

    Merci Beaucoup.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    A priori il faut créer des scripts d'alter table appropriés - je ne sais pas si il existe déjà des outils qui font cela (peut être DBArtisan), mais autrement cela devrait être possible sans trop d'effort avec un script perl.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Ok, effectivement j'ai appris qu'il existait plusieurs modes de Replication Server (REPDEF, MSA ou WSB).
    Dans mon cas, il s'agit de REPDEF (cela signifie donc que ce mode autorise la redéfinition d'ordres SQL tel que 'create, alter...' ?
    Apparamment, celui-ci se baserait sur le journal de transaction pour répliquer.
    N'y a-t-il pas des limites notamment avec les opérations non journalisables comme le 'select into' ?
    En gros, ce mode de réplication n'est-t-il pas obsolète par rapport aux autres ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    La répli Sybase passe toujours par le journal de transaction.
    L'utilisation de repdefs est toujours d'actualité, tout dépend des besoins et de l'architecture utilisée.

    Dans le cas présent les repdefs peuvent être modifiées (alter replication definition ...), ou alors droppées/recrées avec les modifs de DDL.

    La réplication MSA est plus simple à mettre en oeuvre, mais il est nettement plus difficile d'appliquer des modifications de structure entre la source et la destination (ajout de colonne).

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Merci, cela répond largement à mes questions.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par diablolight

    Voila, j'ai plusieurs bases sources (ASE 12.5.0.3 avec même modèle de donnée) qui doivent être répliquées en une seule (modèle identique si ce n'est l'ajout d'une colonne pour différencier les données).
    Bonsoir,

    Il serait plus simple, notamment en cas de resynchronisation des données, d'avoir le même modèle de donnée entre les bases sources et la base centrale, quitte à ajouter cette colonne dès la/les bases sources et ainsi, l'alimenter automatiquement dès la source.

    De plus, si le modèle de donnée central contiens une colonne supplémentaire, l'utilisation des Replication Definition et la personnalisation des Function String sera inévitable.
    Ceci impliquera des taches de mise à jour supplémentaires lors de l'évolution des modèles de donnée sources<=>central (mise à jour des Replication Definition et des Function String en plus de la mise à jour des modèles de donnée).


    DBRep

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par diablolight

    Dans mon cas, il s'agit de REPDEF (cela signifie donc que ce mode autorise la redéfinition d'ordres SQL tel que 'create, alter...' ?
    Non.
    Les Replication Definition (RepDef) définissent le modèle de donnée tel qui devra être "publier".
    Cela ne permet pas (ne sert pas) à la réplication des ordres DDL (tel que 'create ...', 'alter ...', etc...), uniquement les ordres DML.
    Les Function String associées aux RepDef, permettent la redéfinition des ordres SQL DML.

    Pour la réplication des DDL, il vous faudra mettre en place un système de réplication de type MSA (DB RepDef), mais dans ce cas, les modèles de données entre la source et la destination devront correspondre (d'ou mon premier post)



    Citation Envoyé par diablolight

    Apparamment, celui-ci se baserait sur le journal de transaction pour répliquer.
    N'y a-t-il pas des limites notamment avec les opérations non journalisables comme le 'select into' ?
    Effectivement, la réplication Sybase se base sur le journal de transaction, ce qui implique que les opérations non journalisées ne pourrons être répliquées.


    DBRep

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Bonsoir,

    Vous avez raison DBRep, les Fonction String vont être pour l'occasion personnalisées et mise à jour à chaque changement de modèle de donnée (je dispose d'outils d'automatisations me permettant de réaliser ces taches sans trop d'effort !).
    A priori, je n'ai malheureusement pas trop le choix de partir dans cette direction, l'ajout de la colonne au niveau des bases sources entrainerait un développement beaucoup trop important au niveau de la mise à jour de l'application cliente.
    Finalement, je pense qu'il me reste quelques "moulinettes" à écrire (en particulier pour la mise à jour du modèle sur la base centrale à partir de DDLGEN source...)

    Je vous remercie pour ces infos.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par diablolight

    ... l'ajout de la colonne au niveau des bases sources entrainerait un développement beaucoup trop important au niveau de la mise à jour de l'application cliente.
    ?!?
    L'ajout d'une colonne dans une/les table(s) en lui associant une valeur par défaut, soit, differente pour chaque base source, ne devrait entrainer aucune mise à jour de l'application cliente ...
    Normalement c'est un des avantages à travailler avec des SGDBRs ...


    DBRep - 2cts

  10. #10
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par DBRep Voir le message
    ?!?
    L'ajout d'une colonne dans une/les table(s) en lui associant une valeur par défaut, soit, differente pour chaque base source, ne devrait entrainer aucune mise à jour de l'application cliente ...
    Normalement c'est un des avantages à travailler avec des SGDBRs ...


    DBRep - 2cts
    Certains développeurs négligeants oublient de préciser le nom des colonnes lors des insert ou des select.
    DBA sybase confirmé
    Cherche un poste sur Paris

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Oui, pour mon cas il s'agit plutôt d'une application en fin de vie qui a subit pas mal d'évolutions en urgence (quelquefois par des développeurs peu expérimentés).
    Pour finir, en lisant la documentation sur les définitions de la réplication, il me semble que chaque table répliquée doit obligatoirement avoir une clé primaire (paramètre "primary key" dans create replication definition) ?

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Oui - mais cette PK est simplement une clé unique que le rep server utilise pour appliquer les modifs à la destination - il n'est donc pas nécessaire d'avoir une PK formelle.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Je n'ai très bien compris le sens de la réponse, si c'est juste pour le repserver a-t-elle les mêmes fonctionnalités qu'une PK ?
    Doit-elle être présente sur la source ou la destination ?

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Le rep server prend les modifications pour une ligne dans une table, et les applique sur la destination via une commande d'update ou de delete. Cette commande devra comporter une clause WHERE qui défini quelle enregistrement est affecté. La PK sert à ceci sur la destination.

    Un exemple permet peut-être d'être plus clair:

    Admettons qu'on a une table source T1 comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create table t1 (
    pk   int,
    col1 varchar(20),
    col2 int,
    ... autres colonnes ...
    )
    create unique index i1 on t1.pk
    create index i2 on t1.col2
    où "pk" est une clé unique.
    On a une repdef pour T1 comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create replication definition t1_repdef
    ...
    ( pk   int,
    col1   varchar,
    col2   int,
    ...
    )
    primary key ( pk )
    Admettant qu'on applique un update sur cette table qui ne s'appuie pas sur la PK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update t1 set col1 = <valeur>
    where col2 = <autre_valeur>
    Cet update peut affecter un nombre indéterminé d'enregistrement, puisqu'il n'y a pas de clé unique sur "col2". Pour chaque enregistrement mis à jour sur la source, repserver va générer un ordre d'update vers la destination, qui aura la forme suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update t1 set col1 = <valeur>
    where pk = <pk de l'enregistrement affecté>
    Pour finir - ce que j'ai voulu dire par PK "formelle" c'est qu'il n'est pas nécessaire de définir des PK "declarative", du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table ... add constraint ... primary key
    puisqu'un index unique suffit.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    C'est très clair maintenant, merci Michael.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RS]DDL Replication Server
    Par diablolight dans le forum Sybase
    Réponses: 14
    Dernier message: 11/12/2007, 18h19
  2. [RS]Replication Server & Journal de Transaction
    Par SQL972 dans le forum Sybase
    Réponses: 5
    Dernier message: 11/05/2006, 09h05
  3. [ SYBASE ] Replication server 12.1
    Par 6rose dans le forum Sybase
    Réponses: 13
    Dernier message: 17/09/2003, 14h30
  4. [ SYBASE ] Replication server 12.1
    Par 6rose dans le forum Sybase
    Réponses: 3
    Dernier message: 29/08/2003, 13h38
  5. [SYBASE] Replication Server
    Par 6rose dans le forum Sybase
    Réponses: 4
    Dernier message: 09/05/2003, 12h56

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