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

PostgreSQL Discussion :

Synchronisation de base de données


Sujet :

PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Synchronisation de base de données
    Bonjour,

    Je cherche un moyen de synchroniser deux base de données dans un environnement réseau.
    C'est à dire que je dispose d'une base A qui doit synchroniser une base B tous les jours.
    Avez vous des pistes pour réaliser cette opération sur des base de données Postgresql par exemple.
    Le cas échéant, quel autre SGBD me permettra de faire cela aisement.

    Merci d'avance.

  2. #2
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 564
    Points : 7 288
    Points
    7 288
    Par défaut
    Bonsoir.


    Ta réplication se fait une fois par jour uniquement? Elle est donc asynchrone?
    La base B doit-elle être disponible en lecture ou est-ce seulement une sauvegarde?
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Oui disons que une fois par jour sera suffisant. ça ne sera pas une réplication sur toute la base de donnés, mais seulement sur des tables bien ciblées et la base B est effectivement utilisée en lecture aussi.
    Juste un exemple de cas concret pour lequel j'articule mon besoin fonctionnel :
    J'ai des commerciale qui sont en déplacement et vendent des produits, et il enregistre tout ça en local sur leur pc portable(information sur le client entre autre), ils doivent donc disposer d'une base de donnés sur leur postes, et donc à la fin de la journée ils doivent transférer tout leur donné dans la base de donnée central de la boite.

    =>Techniquement quel est le moyen le plus simple de mettre cela en œuvre avec Postgresql? Le cas echeant, si c'est trop compliquer avec pgsql, y a t-il d'autre sgbd ou concept permettant de faire cela aisément?

  4. #4
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Je pense que le plus simple est encore de faire un export/import des tables que tu veux répliquer, en utilisant la commande pg_dump
    Ca c'est si ton besoin est juste de copier/écraser quotidiennement les tables de la base A vers la base B

    Après si par "synchronisation" tu entends intégrer dans la base B les données de la base A qui n'y sont pas ou qui ont été modifiées (insert ou update), tu peux utiliser les dblinks et les triggers sur insert/update/delete, mais ça va vite devenir une usine à gaz ...
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par dany_dane Voir le message
    Oui disons que une fois par jour sera suffisant. ça ne sera pas une réplication sur toute la base de donnés, mais seulement sur des tables bien ciblées et la base B est effectivement utilisée en lecture aussi.
    Juste un exemple de cas concret pour lequel j'articule mon besoin fonctionnel :
    J'ai des commerciale qui sont en déplacement et vendent des produits, et il enregistre tout ça en local sur leur pc portable(information sur le client entre autre), ils doivent donc disposer d'une base de donnés sur leur postes, et donc à la fin de la journée ils doivent transférer tout leur donné dans la base de donnée central de la boite.

    =>Techniquement quel est le moyen le plus simple de mettre cela en œuvre avec Postgresql? Le cas echeant, si c'est trop compliquer avec pgsql, y a t-il d'autre sgbd ou concept permettant de faire cela aisément?
    Ce que tu demande c'est de la réplication et dans ton cas elle est à flux multiples, voir full duplex. Faire des imports exports est hautement casse gueule...

    Il faut un flux descendant du serveur central vers les portables pour les nouveaux produits et les modif de tarif, et un flux montant pour les clients et commandes.

    Il existe différentes techniques pour ce faire :
    1) capturer les transactions qui ont lieu sur le portable et les reproduire sur le central (c'est le moyen le plus sûr). Mais c'est complexe car il faut un outil de lecture du journla des transactions.
    2) effectuer des clichés des données (photocopie des données des tables) et les appliquer en retour aux abonnés (en général cela se fait de manière binaire avec des outils spécifiques).
    3) utiliser les déclencheur placés dans chacune des tables à répliquer, afin capturer les données qui évoluent (INSERT, UPDATE et DELETE) et alimenter des tables tampon qui vont aller ensuite modifier le contenu de la cible. C'est le principe, de réplication par fusion.
    Dans ce dernier cas il y a des possibilité de conflits de réplicationj, si la réplication est bilatérale (FULL DUPLEX). Il faudra donc un moniteur de réplication pour gérer les conflits.

    Sans outils spécifique cela est à la fois complexe et couteux en terme de développement.

    Il existe des SGBDR qui incorprorent tous ces outils ainsi qui divers assistants pour mettre en place de telles choses, comme Oracle ou plus simplement SQL Server...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Après si par "synchronisation" tu entends intégrer dans la base B les données de la base A qui n'y sont pas ou qui ont été modifiées (insert ou update), tu peux utiliser les dblinks et les triggers sur insert/update/delete, mais ça va vite devenir une usine à gaz ...
    Oui c'est exactement cela dont j'ai besoin, uniquement de prendre en compte les nouvelles données de la base A vers le central.
    Vriament pas mal les triggers, j'y avais pensé mais je me suis dit qu'éffectivement ça allait devenir vite complexe... et je prefere etre sûr avant d'adopter cette solution, il ne doit pas y avoir de risque possible.


    "Il faut un flux descendant du serveur central vers les portables pour les nouveaux produits et les modif de tarif, et un flux montant pour les clients et commandes."
    Oui effectivement, ce cas est à prendre en compte, mais l'autre est plus préocupant car le besoin est quotidien.
    J'abdandonen tes 2 premieres options que je ne capte pas très bien. + 1 pour ta 3 eme solution qui rejoint celui de scheu...

    Il existe des SGBDR qui incorprorent tous ces outils ainsi qui divers assistants pour mettre en place de telles choses, comme Oracle ou plus simplement SQL Server...

    Sinon c'est intéressant ce que tu dis apr rapport aux autres sgbd, je ne savais pas que sql server permettait de faire cela, en effet j'ai aussi la possibilité d'utiliser ce SGBD, peut-tu m'en dire un peu plus? Existe t-il des tuto sur le site qui en parle?

  7. #7
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Je rejoins SQLPro en te conseillant d'utiliser les fonctionnalités des SGBDs qui le permettent en natif (Postgresql n'en fait pas partie à ma connaissance), plutôt que de développer ta propre usine à gaz avec dblinks, triggers, etc ... qui sera long, coûteux et difficile à maintenir
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par dany_dane Voir le message
    J'abdandonen tes 2 premieres options que je ne capte pas très bien. + 1 pour ta 3 eme solution qui rejoint celui de scheu...
    Entre nous le 3e mode (réplication de fusion avec des déclencheurs) est le pire dans tous les sens du terme :
    1) aucune garantit de conservation de l'intégrité de la base
    2) conflit de réplication possible indécidable
    3) administration lourde
    4) importantes ressources à prévoir tant sur le serveur que les postes client.

    le mieux est la réplication transactionnelle qui ne possède aucun des inconvénients cités, mais interdit les flux full duplex, ce qui n'est pas le cas a priori dans ton modèle.

    Citation Envoyé par dany_dane Voir le message
    Sinon c'est intéressant ce que tu dis apr rapport aux autres sgbd, je ne savais pas que sql server permettait de faire cela, en effet j'ai aussi la possibilité d'utiliser ce SGBD, peut-tu m'en dire un peu plus? Existe t-il des tuto sur le site qui en parle?
    présentation générale :
    http://msdn.microsoft.com/fr-fr/library/ms151198.aspx

    Ressources diverses :
    http://technet.microsoft.com/fr-fr/l...SQL.90%29.aspx

    En particulier dans ton cas :
    http://technet.microsoft.com/fr-fr/l...SQL.90%29.aspx

    je te conseille cependant de bien étudier ton scénario et de faire une maquette, et enfin de TOUT scripter à la fin, car retirer une réplication ou la reporter sur une autre machine en cas de panne est très complexe !
    Investir aussi dans l'ouvrage sur la réplication aux éditions Apress.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Ok merci pour vos réponses, je pense me trourner vers sql serveur alors
    Il me semble que Mysql est capable de le faire : http://dev.mysql.com/doc/refman/5.0/fr/replication.html
    Bizarre que Mysql fait de la réplication et pas pgsql qui est réputé plus robuste, non?

  10. #10
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Apparemment si ça existe aussi sous Postgresql, c'est possible avec Bucardo, que je n'ai jamais testé personnellement. Il semble que tu puisses faire de la réplication maître/maître
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

Discussions similaires

  1. Synchronisation de bases de données
    Par mfofana dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/02/2007, 21h29
  2. Synchronisation de bases de données
    Par loreleï85 dans le forum Alimentation
    Réponses: 7
    Dernier message: 29/01/2007, 11h48
  3. Synchronisation de bases de données
    Par loreleï85 dans le forum Outils
    Réponses: 2
    Dernier message: 18/01/2007, 17h39
  4. Synchronisation entre base de données et caractéristiques
    Par Debault dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/08/2006, 23h44
  5. Synchronisation de base de données locale/distante Internet
    Par StefC30 dans le forum Développement
    Réponses: 3
    Dernier message: 25/07/2003, 14h47

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