1

J'ai fondamentalement une base de données et une application, et ce que je veux faire est de créer une deuxième base de données et une deuxième application qui fonctionne la plupart du temps indépendamment. Cette configuration est facile, mais ce que je veux maintenant, c'est une connexion entre les deux, de sorte que l'outil de configuration soit capable de configurer les deux configurations en même temps. Pour un exemple simple, nous pouvons supposer que toute la configuration est faite dans une seule table de la base de données. Donc, je vois essentiellement deux façons de le faire:Réplication du serveur SQL avec des contraintes?

Modifier l'outil de configuration, de sorte qu'il écrira à la fois au lieu d'un seul serveur, ou utiliser la réplication pour obtenir la table de configuration d'un DB à l'autre.

Comme je devrais aller au fond de beaucoup de vieux code que je n'ai pas écrit moi-même, je préférerais de loin que cela se fasse par réplication. Lorsque SQL Server 2008R2 est utilisé, j'ai des réplications d'instantané, de transaction et de fusion disponibles. Snapshot est un peu mauvais parce que je veux que le tout soit en "temps réel" et ce n'est pas comme ça que fonctionnent les snapshots.

Transactional et de fusionner le son à la fois très agréable, et je pense que les deux seraient possibles, mais j'ai connu quelques problèmes avec cela. La réplication transactionnelle tue les contraintes sur l'abonné, ce qui n'est pas acceptable. La réplication de fusion ne le fait pas, mais lorsque la deuxième base de données est en cours d'exécution, je ne peux pas appliquer la réplication de fusion car elle souhaite supprimer la table, ce qu'elle ne peut pas faire à cause des contraintes existantes.

J'ai essayé de configurer ces deux réplications sans initialisation, mais cela n'a pas fonctionné du tout. Je suppose que je dois mettre en place quelque chose de différent pour cela mais je ne sais pas quoi.

Y a-t-il un moyen de faire tourner cette course comme je le veux, ou y a-t-il un autre moyen que j'ai manqué complètement?

+0

Vous souhaitez une réplication bidirectionnelle entre les sites? ou voulez-vous créer un rapport sur un autre site? Toute la base de données? Un côté peut-il être lu seulement? – gbn

+0

à sens unique serait bien, seulement quelques tables – Flo

+0

et le reste de mes questions? – gbn

Répondre

3

Nous utilisons la réplication transactionnelle à grande échelle pour faire plus ou moins exactement ce que vous décrivez ici, en distribuant la configuration d'un point central à de nombreuses bases de données d'abonnés.

Bien que vous ne soyez pas satisfait des options par défaut proposées par la réplication transactionnelle, vous avez un grand contrôle sur son comportement. Le masque de bits des options de schéma, défini lors de l'ajout d'un article à une publication, vous permet de contrôler à peu près tous les aspects du DDL répliqué sur l'abonné. Pour plus de détails, voir la documentation sur sp_addarticle. L'interface graphique de réplication vous donne accès à la plupart de ces paramètres, mais vous devrez peut-être utiliser des scripts T-SQL pour obtenir exactement ce que vous voulez. Je n'ai pas accès à une base de données pour vérifier si les contraintes check, default et foreign-key font toutes surface dans l'interface graphique. Même la réplication transactionnelle par défaut serait appropriée dans ce scénario s'il est vraiment acceptable que la réplication soit unidirectionnelle, car il n'est pas nécessaire de gérer les contraintes sur la base de données en lecture seule, car aucune donnée n'est insérée.

+0

unidirectionnel est vraiment ok, mais toujours les contraintes ne peuvent pas être ignorées, car certaines des tables qui doivent être répliquées peuvent être référencées à partir d'autres tables sur l'abonné que ne sont pas répliqués. 0x200 semble être ce que je veux, mais dans la description qu'il lit, cela ne fonctionnera que si les tables référencées sont également répliquées, ce qui ne sera pas le cas. En tout cas merci de souligner cette possibilité de configuration. – Flo

+0

@Flo - Les seules contraintes qui seraient répliquées sont celles créées sur les tables répliquées référençant d'autres tables. Les contraintes provenant d'autres tables (non répliquées) qui référencent les tables répliquées ne seront pas répliquées. –

+1

@Flo - si vous devez ajouter des contraintes de tables non répliquées à des tables répliquées sur l'abonné, vous pouvez avoir besoin d'un modèle de réplication transactionnelle légèrement différent où les tables répliquées sur l'abonné sont créées indépendamment de la réplication. l'éditeur (en utilisant un 'schema_option' de 0x0 et un' pre_create_cmd' de 'truncate') –