Répliquer des tables et des index partitionnés

S’applique à :SQL ServerAzure SQL Managed Instance

Le partitionnement facilite la gestion des tables et des index de grande taille, car il permet de gérer et d'accéder rapidement et efficacement à des sous-ensembles de données, tout en conservant l'intégrité d'une collecte de données. Pour plus d’informations, consultez Tables et index partitionnés. La réplication prend en charge le partitionnement en fournissant un ensemble de propriétés qui indiquent comment les tables et les index partitionnés doivent être traités.

Propriétés d'article pour la réplication transactionnelle et de fusion

Le tableau suivant répertorie les objets utilisés pour partitionner des données.

Objet Créé en utilisant
Table ou index partitionné CREATE TABLE ou CREATE INDEX
Fonction de partition CREATE PARTITION FUNCTION
Schéma de partition CREATE PARTITION SCHEME

Les propriétés de partitionnement sont les options de schéma d’article qui déterminent si le partitionnement d’objets doit être copié vers l’Abonné. Ces options de schéma peuvent être définies de plusieurs façons :

  • Sur la page Propriétés de l'article de l'Assistant Nouvelle publication ou la boîte de dialogue Propriétés de la publication. Pour copier les objets répertoriés dans le tableau précédent, spécifiez la valeur true pour les propriétés Copier les schémas de partition de table et Copier les schémas de partition d'index. Pour plus d’informations sur la façon d’accéder à la page Propriétés de l’article, consultez Afficher et modifier des propriétés de publication.

  • En utilisant le paramètre schema_option de l'une des procédures stockées suivantes :

    Pour copier les objets répertoriés dans le tableau précédent, spécifiez les valeurs d'options de schéma appropriées. Pour plus d'informations sur la spécification d'options de schéma, consultez Specify Schema Options.

La réplication copie les objets vers l'Abonné pendant la synchronisation initiale. Si le schéma de partition utilise des groupes de fichiers autres que le groupe de fichiers PRIMARY, ces groupes de fichiers doivent exister sur l'Abonné avant la synchronisation initiale.

Après avoir initialisé l'Abonné, les modifications de données sont propagées à l'Abonné et appliquées aux partitions appropriées. Toutefois, les modifications apportées au schéma de partition ne sont pas prises en charge. La réplication transactionnelle et de fusion ne prend pas en charge la réplication des commandes suivantes : ALTER PARTITION FUNCTION, ALTER PARTITION SCHEMEou l’instruction REBUILD WITH PARTITION de ALTER INDEX. Les modifications associées ne sont pas automatiquement répliquées sur l’Abonné. Il incombe à l'utilisateur d'effectuer manuellement les mêmes modifications au niveau de l'Abonné.

Prise en charge de la réplication pour la commutation de partition

La possibilité de déplacer rapidement et efficacement des sous-ensembles de données entre des partitions constitue l'un des principaux avantages du partitionnement de table. Les données sont déplacées à l'aide de la commande SWITCH PARTITION. Par défaut, lorsqu'une table est activée pour la réplication, les opérations SWITCH PARTITION sont bloquées pour les raisons suivantes :

  • Si les données sont déplacées dans ou hors d'une table qui existe sur le serveur de publication mais pas sur l'Abonné, le serveur de publication et l'Abonné risquent de devenir incohérents entre eux. Ce problème se produit généralement lorsque les données sont déplacées dans ou hors d'une table intermédiaire.

  • Si l'Abonné et le serveur de publication ont des définitions différentes pour la table partitionnée, l'Agent de distribution échouera lorsqu'il tentera d'appliquer des modifications à l'Abonné.

Malgré ces problèmes potentiels, le basculement de partition peut être activé pour la réplication transactionnelle. Avant d’activer le changement de partition, assurez-vous que toutes les tables qui participent au changement de partition existent sur le serveur de publication et sur l’Abonné, et vérifiez que les définitions des tables et des partitions sont identiques.

Lorsque les partitions ont exactement le même schéma de partition chez les éditeurs et les abonnés, vous pouvez activer allow_partition_switch en même temps que replication_partition_switch, ce qui ne répliquera à l’abonné que l’instruction de basculement de partition. Vous pouvez également activer allow_partition_switch sans répliquer le DDL. Cela est utile lorsque vous souhaitez retirer les anciens mois de la partition tout en conservant la partition répliquée chez l’abonné pendant encore un an à des fins de sauvegarde.

Si vous activez le basculement de partition (sur SQL Server 2008 R2 jusqu’à la version actuelle), vous devrez peut-être également fractionner et fusionner des opérations dans un futur proche. Avant d’exécuter une opération de fractionnement ou de fusion sur une table répliquée ou compatible CDC, vérifiez que la partition en question n’a pas de commandes répliquées en attente. Vous devez également vous assurer qu’aucune opération DML n’est exécutée sur la partition pendant les opérations de fractionnement et de fusion. Si des transactions n’ont pas été traitées par le lecteur de journal ou travail de capture CDC, ou que des opérations DML sont exécutées sur la partition d’une table répliquée ou compatible CDC en même temps qu’une opération de fractionnement ou de fusion (sur la même partition), il est possible que l’Agent de lecture du journal ou le travail de capture CDC fasse l’objet d’une erreur de traitement (erreur 608 : Aucune entrée de catalogue trouvée pour l’ID de partition). Pour corriger l’erreur, une réinitialisation de l’abonnement ou la désactivation de CDC sur cette table ou cette base de données peut s’avérer nécessaire.

Scénarios non pris en charge

Les scénarios suivants ne sont pas pris en charge lors de l’utilisation de la réplication avec basculement de partition :

Réplication d’égal à égal
La réplication d’égal à égal n’est pas prise en charge avec le basculement de partition.

Utilisation de variables avec le basculement de partition

L’utilisation de variables avec le basculement de partition sur les tables publiées avec la réplication transactionnelle ou la capture des changements de données (CDC) n’est pas prise en charge pour l’instruction ALTER TABLE ... SWITCH TO ... PARTITION ....

Par exemple, le code de basculement de partition suivant ne fonctionne pas avec la capture des changements de données activée sur la base de données, ou avec la TableA qui participe à une publication transactionnelle :

DECLARE @SomeVariable INT = $PARTITION.pf_test(10);
ALTER TABLE dbo.TableA
SWITCH TO dbo.TableB 
PARTITION @SomeVariable;

À la place, changez directement de partition à l’aide de la fonction de partition, comme dans l’exemple suivant :

ALTER TABLE NonPartitionedTable 
SWITCH TO PartitionedTable PARTITION $PARTITION.pf_test(10);

Activation de la commutation de partition

Les propriétés suivantes des publications transactionnelles permettent aux utilisateurs de contrôler le comportement du basculement de partition dans un environnement de réplication :

  • @allow_partition_switch, quand la valeur spécifiée est true, SWITCH PARTITION peut être exécuté sur la base de données de publication.

  • @replicate_partition_switch détermine si l’instruction SWITCH PARTITION DDL doit être répliquée sur les Abonnés. Cette option est valide uniquement quand @allow_partition_switch a la valeur true.

Vous pouvez définir ces propriétés en utilisant sp_addpublication lors de la création de la publication, ou en utilisant sp_changepublication après la création de la publication. Comme indiqué précédemment, la réplication de fusion ne prend pas en charge la commutation de partition. Pour exécuter SWITCH PARTITION sur une table qui est activée pour la réplication de fusion, supprimez la table de la publication.