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é. Définissez ces options de schéma de la manière suivante :

  • 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. Cependant, les modifications du schéma de partition ne sont pas prises en charge. La réplication transactionnelle et la fusion ne supportent pas la réplication des commandes suivantes : ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, ni l’instruction REBUILD WITH PARTITION de ALTER INDEX. Les modifications qui leur sont associées ne sont pas automatiquement reproduites à l’abonné. Vous devez effectuer des modifications similaires manuellement chez l’abonné.

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

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. Utilisez la SWITCH PARTITION commande pour déplacer des données. Par défaut, lorsque vous activez une table pour la réplication, le système bloque SWITCH PARTITION les opérations pour les raisons suivantes :

  • Si vous déplacez des données vers ou hors d'une table existant chez le Publisher mais qui n'existe pas chez l'abonné, le Publisher et l'abonné peuvent devenir incohérents l'un avec l'autre. Ce problème survient généralement lorsque vous déplacez des données vers ou hors d’une table de staging.

  • Si l’Abonné a une définition différente de la table partitionnée de celle du Publisher, l’Agent de distribution échoue lorsqu’il tente d’appliquer des modifications à l’Abonné.

Malgré ces problèmes potentiels, vous pouvez activer la commutation de partitions pour la réplication transactionnelle. Avant d’activer le changement de partition, assurez-vous que toutes les tables impliquées dans le changement de partition existent au Publisher et à l’abonné, et que les définitions de table et de partition 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 effectuer des opérations de fractionnement et de fusion dans un avenir proche. Avant d’exécuter une opération de division ou de fusion sur une table répliquée ou compatible CDC, assurez-vous que la partition concernée ne contient aucune commande répliquée 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 ne sont pas traitées par le lecteur de journal ou la capture CDC, ou si vous effectuez des opérations DML sur une partition d’une table répliquée ou compatible CDC pendant qu’une opération de division ou de fusion est en cours (impliquant la même partition), cela peut entraîner une erreur de traitement (erreur 608 - Aucune entrée de catalogue trouvée pour l’ID de partition) avec un agent lecteur de journal ou une capture CDC. Pour corriger l’erreur, il se peut que vous deviez réinitialiser l’abonnement ou désactiver le CDC sur cette table ou cette base de données.

Scénarios non pris en charge

Les scénarios suivants ne sont pas pris en charge lors de la réplication avec commutation de partitions :

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

Utilisation de variables avec le basculement de partition

L’utilisation de variables avec commutation de partition sur des tables publiées avec réplication transactionnelle ou Change Data Capture (CDC) n’est pas prise en charge pour cette ALTER TABLE ... SWITCH TO ... PARTITION ... instruction.

Par exemple, le code de commutation de partition suivant ne fonctionne pas avec CDC activé sur la base de données, ni avec la participation de TableA à une publication transactionnelle :

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

À la place, échangez votre partition en utilisant directement 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 partitions

Les propriétés suivantes pour les publications transactionnelles vous permettent de contrôler le comportement du changement de partition dans un environnement répliqué :

  • @allow_partition_switch: Lorsqu’il est réglé sur true, vous pouvez exécuter SWITCH PARTITION sur la base de données de publication.

  • @replicate_partition_switch: Détermine s’il faut répliquer l’instruction DDL SWITCH PARTITION vers les Abonnés. Cette option est valide uniquement quand @allow_partition_switch a la valeur true.

Définissez ces propriétés en utilisant sp_addpublication lors de la création de la publication, ou en l’utilisant sp_changepublication après avoir créé la publication. Comme mentionné précédemment, la réplication par fusion ne supporte pas le changement de partition. Pour exécuter SWITCH PARTITION sur une table activée pour la réplication de fusion, retirez la table de la publication.