Synchroniser des bases de données

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 16 févr. 2009 à 07:37
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 16 févr. 2009 à 14:39
Bonjour, voici un post que j'ai mis sous le "site" SQL mais qui expliquera la situation.

Bonjour,  désoél si mon poste n'est pas dans le bon theme je ne sais pas trop  quoi mettre comme catégorie...
Voici mon "probleme" , je n'ai jamais eu a gérer de bd autre qu'en reseau local.
J'utilise
sqlexpress 2005 , j'aurais besoin de "synchroniser" des bases de
données sur differents postes afin de pouvoir avoir toutes les infos
d'une bd en cas de probleme de connexion ( ca c'est une option qui peut
etre interessante ...)
Disons que pour l'instant , mes postes se
connectent a un serveur local ( eux n'ont pas forcement les données ds
la BD) donc d'une part ce serait bien qu'elle les récupèrent de temps
en temps afin d'eviter le risque de crash du serveur et de la perte des
dernieres données ( je fais quand meme une sauvegarde journaliere....
Mais
ce que je voudrais surtout c'est pouvoir faire remonter les infos
stockées sur le serveur local vers un serveur "centrale" qui gere un
ensemble d'agence  (Si on peut parler d'architecture il y a donc un
serveur principal et des agences délocalissées )
je voudrais que les
agences bénéficient des informations du serveur "principal" et qu'elles
remontent egalement leur données vers celui - ci.

La connexion
internet n'etant pas tres bonne , (pour l'instant ca fonctionne meme
pas connexion telephonique) ,cette syncronisation entre agence n'a pas
besoin (dans un premier temps) d'etre permanante et peut etre faite le
soir ou manuellement  (donc une a deux fois par jour).
Le volume
d'information peut etre relativement important (centaines d emilleirs
de lignes dans une seule bd contenant une vingtaine de tables)

J'ai
vu que sur sql serveur (la version payante ) il existe des modes
mirroring et replication mais je ne crois pas qu'ils soient present sur
sql express

Je voudrais donc qques conseils pour me permettre de gérer cette synchronisation....
Dois
je tout faire manuellement ? (update,test,insert sur les tables
concernées (pratiquement toutes ds la BD) pour verifier la presence des
lignes , si elles ont été modifiées , etc...)
ou existe t il un moyen d'automatiser cela un peu ? ....

Voila je n'ai rien fait de tel et suis ouvert a tout conseil ...
J'aimerais avoir quelques aides ou conseil sur les outils de visual c# permettant eventuellement de simplifier un peu tout cela ou meme si vous avez des exemples de codes ou des tutoriaux sympas afin de m'aider a avncer un peu dans ma tache...

D'avance merci

5 réponses

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
16 févr. 2009 à 08:12
J'aimerais savoir egalement s'il existe une fonction permettant de mettre a jour des tables d'une bd a l'autre (meme strucutre , meme nom , etc...)
sans avoir a se soucier des differents nom de colonnes (apres qu'on se soit assuré que toutes les colonnes sont bien crées s'il y a eu modification)
eventuellement si on peut "gerer" automatiquement s'il y a des differences entre la structure des tables de mettre a jour la strucutre d'une aprt a rapport a l'autre en doonant la "priorité" a une bd sur l'autre ( celle qui correspondrait au serveur principal sur lequel on ferait les mises ajour en premier lieu)
on pourrait faire des tests manuels sql de partout mais cela me semble extrement fastidieux , je suppose qu'il existe qques techniques ou fonctions qui permettent au moins de dégrossir la tache .... (voir de tout faire ...;-)
je ne sais pas du tout ou chercher et j'aimerais bcp eviter d'avoir a tout parametrer si cela est possible

merci pour tout conseil
0
titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
16 févr. 2009 à 08:51
Bonjour,

Cette fonction de synchronisation de bases est assez longue à réaliser mais reste somme toute très simple.

Puisque tu utilise une base SQL Express, il va te falloir effectuer toi même la remontée des informations.

Tu peux par exemple écrire un service de synchronisation qui va mettre à jour les infos dans le sens siege > agence, puis dans le sens agence > siege.

Dans tout les cas, tu va te heurter à des problèmes d'accès concurrent comme par exemple :

Une donnée à été modifiée par l'agence 1 et par l'agence 2, que faire lors de la mise à jour ?

Aucun logiciel, aucune architecture ne pourra résoudre ce problème automatiquement pour toi. Mais c'est un autre sujet.

Pour information, il existe dans SQL server (payant) le composant Integration Services (remplacant des lots DTS de SQL 2000) qui te permet d'effectuer des opérations de transfert de données d'une base vers une autre et même d'utiliser des fichiers plats/XML pour transférer tes données. Ces jobs peuvent être batchés et monitorés.

Par contre, je ne penses pas que tu puisse couper à la tache d'écrire ton service de synchro à la mimine. Pour gagner du temps, tu peux te pencher sur des frameworks d'ORM tels que NHibernate ou EntityFramewok afin de te faciliter la tâche.

Bon courage.
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
16 févr. 2009 à 11:23
bon j'attendais une réponse qui me peremmtte de tut faire d'un coup sans avoir a me soucier de tous les noms de tables,etc...
n'ya til pas un yen en passant par lesdatasets ?

quand on utilise les datasets sur des (avec datagridview) on peut remplir le datagridview vec lesinfos du datasource
en ajouter, en modifier ... et quand on fait  table.update la absede données es modifiée sans qu'n ai a se soucier "manuellement"de créer tousl es parmetres , etc...
peut faire faire qque chose du genreentre 2 datasets ?
j'ai essayé de remplir un dataset avec la connexionstring de ma base "serveur" et de la changer ensuite  avec celle de la base client (adrsse ip differente) et de faire un update mais ca ne marche pas ...
y'aurait til qqu chose permettant de faire cela ?
0
titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
16 févr. 2009 à 13:17
tu peux toujours essayer ce moyen mais le fait de déconnecter ton dataset de ta base va te casser le lien vers la base et donc perdre toutes les informations RowState sur lesquelles reposent l'update différentiel.

Peut etre qu'en sérialisant les données de ton dataset en Xml puis en les rechargeant dans un autre dataset qui lui serai connecté à ton autre base de données cela pourrait marcher mais je n'y crois pas trop.

De plus la question reste entiere : comment comptes tu gérer les accès concurrents ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
16 févr. 2009 à 14:39
ben je n'ai aps réussi a trouver le moyen avec les datatsets mais je n'avais pas encore lu ton post.

en fait je sais bien que l'histoire des accès concurrent pose probleme.
dison que dans un premier temps
je vais limiter le fonctionnement dans es agences , elles ne pourront que créer , modifier les lignes d'une table qui leur est propre ( en se servant des infos redecendues par le serveur chaque soir (comme ca meme si ca prend un peu de temps , une fnction se lance a minuit uand les gens dorment et le lendemain leur base est mise a jour ( du moins avec un jour de decalage ) ...
Comme personne ne va travailler ds les agences a ces heures , je pense pouvoir utiliser une grosse transaction
delete+ bulkcopy de mes tables contenues sur le serveur principal , ce qui me permettra de faire a mise a jour de facon barbare certe mais au moins de gagner du temps ds l'ecriture de mon programme dans un premier temps.
Pour l'instant les qques tables qui sont modifiées ds les agneces contiennent un champ trasnfert permettant de savoir si celui ci s'est bien effectué ou non ...

Voila un ptit bout de solution pour que je puisse debuter assez rapidement (bien qu'elle impose qque contraintes de fonctionnement)
evidemment je voudrais améliorer ce systeme ( qu'il soi plus léger) pour gérer aussi les copies entre les psotes sur les reseau local

les tables que le agences vont modifier n'ont pas de clé primaire a poprement parler (juste une date ...)

par contre si ajmais justement, il y a cette histoire d'acces concurent sur differentes tables contenat des cles primaires , etc..
Comment les gens le gerent ils en général ?

Ca n'existe as une foncion sql qqui fait la difference de deux tables (avec le meme schema) puis qui se debrouille pour faire les updates et insert en prenant comme table de reference celle donnée en argument 1 par exemple ? 

  desole pour ls fautes de frappe mais jai un clavier de M... en caouchouc

merci en tous cas pour ls infos
0