La réplication est une fonctionnalité puissante dans SQL Server qui vous permet de distribuer et de synchroniser des données sur plusieurs serveurs. Cependant, lorsqu’il s’agit de modifier le schéma d’une table répliquée, il y a certaines considérations et défis à prendre en compte.
Un problème courant qui se pose lors de la tentative de modification du schéma d’une table répliquée est le message d’erreur “Impossible de modifier/supprimer la table ‘nomtable’ car elle est publiée pour la réplication”. Cette erreur se produit car SQL Server restreint les modifications directes des tables répliquées afin de maintenir la cohérence des données sur tous les abonnés.
Alors, comment pouvons-nous modifier une colonne existante sans interrompre la réplication ? Il existe deux options principales :
Option 1 : Modification des abonnements
Cette option convient à la réplication instantanée. Voici comment cela fonctionne :
- Supprimez l’abonnement à l’article
- Supprimez l’article
- Modifiez le schéma de la table
- Ajoutez à nouveau l’article
- Ajoutez à nouveau l’abonnement
En suivant ces étapes, la prochaine fois que l’agent de capture instantanée s’exécute, il prendra en compte le nouveau schéma sans aucun problème.
Cependant, pour la réplication transactionnelle, nous devons être plus prudents. La modification de la définition de la colonne peut nécessiter la modification des procédures stockées associées sur tous les abonnés. Cela peut être un processus complexe et chronophage, surtout si la table a plusieurs abonnés.
Option 2 : Modification de la table sur place
Si la table est volumineuse et qu’il n’est pas souhaitable d’exécuter une nouvelle capture instantanée, nous pouvons utiliser les procédures stockées intégrées sp_repladdcolumn
et sp_repldropcolumn
pour effectuer les modifications. Voici comment cela fonctionne :
- Ajoutez une colonne fictive pour contenir les données
- Transférez les données de la colonne d’origine vers la colonne fictive
- Supprimez la colonne d’origine
- Ajoutez à nouveau la colonne d’origine avec le schéma souhaité
- Transférez les données de la colonne fictive vers la colonne d’origine
- Supprimez la colonne fictive
Cette méthode nous permet d’apporter des modifications de schéma sans avoir besoin d’une nouvelle capture instantanée. Cependant, il est important de noter que ces procédures stockées ne sont compatibles qu’avec les abonnés SQL Server 2000.
Il convient de mentionner que la méthodologie interne pour effectuer des modifications de schéma diffère entre la réplication transactionnelle et la réplication de fusion. La réplication de fusion suit les lignes mises à jour dans la table système MSmerge_contents
, tandis que la réplication transactionnelle propage chaque mise à jour en tant que mise à jour d’abonné distincte. Cela signifie que la réplication de fusion a un avantage en ce qui concerne les modifications de schéma, car elle ne nécessite que deux mises à jour par ligne.
Lorsque vous travaillez avec la réplication, il est crucial de planifier et de tester soigneusement toutes les modifications de schéma afin de garantir l’intégrité des données et de minimiser les perturbations. Comprendre les options disponibles et leurs implications peut vous aider à prendre des décisions éclairées et à éviter d’éventuels problèmes.
Pour plus d’informations et des exemples détaillés, vous pouvez consulter l’article de blog de Paul Ibison sur SQL Server MVP.