2011-04-22 1 views
2

J'ai un problème s'il vous plaît aidez-moi.Comment implémenter une réplication de modèle d'abonné central?

suppose que j'ai trois bases de données DB1, Db2, DbCenter et tbl_country existe dans toutes les bases de données.

tbl_country DB1 a la suite des enregistrements:

tbl_country 

Id Name 
1  US 
2  Germany 

tbl_country dans Db2 a suivant enregistre:

tbl_country 

Id  Name 
1  Australia 
2  Italy 

et les enregistrements fusionnés de tbl_country DB1 et Db2 doivent être fusionnés dans DbCenter,

donc tbl_country dans DbCenter a les entrées suivantes:

tbl_country 

Id Name 
1  Us 
2  Germany 
3  Australia 
4  Italy 

La colonne "id" dans toutes les tables est la clé primaire et l'identité.

Que dois-je faire pour les dossiers de deux Db1 et Db2 être ajoutés dans le dernier tbl_country de DbCenter.

J'utilise la réplication transactionnelle. définissez Db1 et Db2 en tant qu'éditeurs et spécifiez DbCenter en tant qu'abonné et dans les propriétés d'article de Db2 définissez l'action "Action si nom en cours d'utilisation" sur "Conserver l'objet existant inchangé", mais supprimez les enregistrements dans DbCenter et remplacez-les par des nouveaux. les enregistrements dans la colonne "id" sont les mêmes. Db1 et Db2 sont la version SQL Server 2000 et Db3 est SQL Server 2008R2.

Répondre

0

Si Db1 et Db2 ont des valeurs de clé primaire qui se chevauchent, je ne pense pas qu'il y ait aucune façon de le faire. Si vous avez le contrôle sur le schéma et que vous pouvez le modifier, vous pouvez remplacer les clés primaires par le type uniqueidentifier (au lieu de int), qui est garanti unique au monde.

1

Tenir à jour les valeurs clés d'origine dans la base de données DbCenter, ainsi que des métadonnées qui spécifie la base de données il vient. Générez ensuite une clé de substitution qui sera utilisée comme PK. De cette façon, vous disposez tous deux de références uniques pour chaque enregistrement de pays et d'un moyen de revenir à l'information source.

Par exemple: -

ID_SK SOURCE_ID SOURCE_DB NAME 
1  1   Db1  US 
2  2   Db1  Germany 
3  1   Db2  Australia 
4  2   Db2  Italy 
Questions connexes