Gepartitioneerde tabellen en indexen repliceren

Van toepassing op:SQL ServerAzure SQL Managed Instance

Partitionering maakt grote tabellen of indexen beter beheerbaar omdat u met partitionering snel en efficiënt subsets van gegevens kunt beheren en openen, en de integriteit van een gegevensverzameling tegelijkertijd kunt behouden. Zie Gepartitioneerde tabellen en indexenvoor meer informatie. Replicatie ondersteunt partitionering door een set eigenschappen op te geven die aangeven hoe gepartitioneerde tabellen en indexen moeten worden behandeld.

Artikeleigenschappen voor transactionele replicatie en samenvoeging

De volgende tabel bevat de objecten die worden gebruikt om gegevens te partitioneren.

Object Gemaakt met behulp van
Gepartitioneerde tabel of index CREATE TABLE of CREATE INDEX
partitiefunctie CREATE PARTITION FUNCTION
Partitieschema CREATE PARTITION SCHEME

Partitie-eigenschappen zijn de schemaopties voor het artikel die bepalen of partitieobjecten naar de Abonnee moeten worden gekopieerd. Stel deze schema-opties op de volgende manieren in:

  • Op de pagina Artikeleigenschappen van de wizard Nieuwe publicatie of in het dialoogvenster Publicatie-eigenschappen. Als u de objecten in de vorige tabel wilt kopiëren, geeft u een waarde op van waar voor de eigenschappen Partitioneringsschema's voor tabellen kopiëren en Indexpartitioneringsschema's kopiëren. Zie Publicatie-eigenschappen weergeven en wijzigen voor informatie over het openen van de pagina Eigenschappen van artikel.

  • Gebruik de parameter schema_option van een van de volgende opgeslagen procedures:

    Als u de objecten in de vorige tabel wilt kopiëren, geeft u de juiste schemaoptiewaarden op. Zie Schemaopties opgeven voor meer informatie over het opgeven van schemaopties.

Replicatie kopieert objecten naar de abonnee tijdens de initiële synchronisatie. Als in het partitieschema andere bestandsgroepen dan de PRIMAIRE bestandsgroep worden gebruikt, moeten deze bestandsgroepen bestaan op de abonnee voordat de eerste synchronisatie wordt uitgevoerd.

Nadat de abonnee is geïnitialiseerd, worden gegevenswijzigingen doorgegeven aan de abonnee en toegepast op de juiste partities. Wijzigingen aan het partitieschema worden echter niet ondersteund. Transactionele en merge-replicatie ondersteunen het repliceren van de volgende commando's niet: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, of de REBUILD WITH PARTITION-instructie van ALTER INDEX. De bijbehorende wijzigingen worden niet automatisch gerepliceerd naar de abonnee. Je moet soortgelijke wijzigingen handmatig doen bij de abonnee.

Replicatie-ondersteuning voor partitiewisseling

Een van de belangrijkste voordelen van tabelpartitionering is de mogelijkheid om snel en efficiënt subsets van gegevens tussen partities te verplaatsen. Gebruik het SWITCH PARTITION commando om data te verplaatsen. Wanneer je standaard een tabel inschakelt voor replicatie, blokkeert het systeem om de volgende redenen SWITCH PARTITION-bewerkingen:

  • Als je data in of uit een tabel verplaatst die bij de Publisher bestaat maar niet bij de Subscriber, kunnen de Publisher en Subscriber inconsistent met elkaar worden. Dit probleem doet zich meestal voor wanneer je data in of uit een stagingtabel verplaatst.

  • Als de abonnee een andere definitie heeft voor de gepartitioneerde tabel dan de Publisher, faalt de Distribution Agent wanneer hij probeert wijzigingen toe te passen bij de abonnee.

Ondanks deze mogelijke problemen kun je partitieswitching inschakelen voor transactionele replicatie. Voordat je partitiewisseling inschakelt, zorg ervoor dat alle tabellen die bij partitiewisseling betrokken zijn bestaan bij de Publisher en Subscriber, en zorg ervoor dat de tabel- en partitiedefinities hetzelfde zijn.

Wanneer partities exact hetzelfde partitieschema hebben bij uitgevers en abonnees, kunt u allow_partition_switch inschakelen, samen met replication_partition_switch, waarmee alleen de instructie partitieswitch naar de abonnee wordt gerepliceerd. U kunt allow_partition_switch ook inschakelen zonder de DDL te repliceren. Dit is handig wanneer u oude maanden uit de partitie wilt verwijderen, maar de gerepliceerde partitie bij de abonnee nog een jaar wilt behouden als back-up.

Als u in de huidige versie het schakelen tussen partities op SQL Server 2008 R2 inschakelt, moet u in de nabije toekomst mogelijk ook splitsen en samenvoegen uitvoeren. Voordat je een split- of merge-operatie uitvoert op een gerepliceerde of door CDC geschikte tabel, zorg ervoor dat de betreffende partitie geen in behandeling staande gerepliceerde commando's heeft. Zorg er ook voor dat er tijdens de splits- en samenvoegbewerkingen geen DML-bewerkingen op de partitie worden uitgevoerd. Als er transacties zijn die de loglezer of CDC-capturejob niet heeft verwerkt, of als je DML-operaties uitvoert op een partitie van een gerepliceerde of CDC-geschikte tabel terwijl een split- of merge-operatie wordt uitgevoerd (met dezelfde partitie), kan dit leiden tot een verwerkingsfout (fout 608 - Geen catalogusvermelding gevonden voor partitie-ID) met log reader agent of CDC-capture-job. Om de fout te corrigeren, moet je mogelijk het abonnement opnieuw initialiseren of CDC uitschakelen op die tabel of database.

Niet ondersteunde scenario's

De volgende scenario's worden niet ondersteund bij replicatie met partitiewisseling:

Peer-to-peer-replicatie
Peer-to-peer replicatie wordt niet ondersteund bij partitiewisseling.

Gebruik van variabelen met partitiewisseling

Het gebruik van variabelen met partitiewisseling op tabellen die zijn gepubliceerd met transactionele replicatie of Change Data Capture (CDC) wordt niet ondersteund voor de ALTER TABLE ... SWITCH TO ... PARTITION ... statement.

Bijvoorbeeld, de volgende partitieswitchcode werkt niet met CDC ingeschakeld in de database, of met TableA die deelneemt aan een transactionele publicatie:

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

Wissel in plaats daarvan van partitie door direct de partitiefunctie te gebruiken, zoals in het volgende voorbeeld:

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

Partitiewisseling inschakelen

De volgende eigenschappen voor transactionele publicaties stellen u in staat het gedrag van partitiewisseling in een gerepliceerde omgeving te controleren:

  • @allow_partition_switch: Wanneer ingesteld op true, kun je SWITCH PARTITION uitvoeren op de publicatiedatabase.

  • @replicate_partition_switch: Bepaalt of de SWITCH PARTITION DDL-instructie naar Subscribers wordt gerepliceerd. Deze optie is alleen geldig als @allow_partition_switch deze is ingesteld op true.

Stel deze eigenschappen in door sp_addpublication te gebruiken bij het maken van de publicatie, of door sp_changepublication te gebruiken nadat je de publicatie hebt gemaakt. Zoals eerder vermeld, ondersteunt merge-replicatie geen partitiewisseling. Als u SWITCH PARTITION wilt uitvoeren op een tabel waarvoor merge-replicatie is ingeschakeld, verwijdert u de tabel uit de publicatie.