Replikera partitionerade tabeller och index

gäller för:SQL ServerAzure SQL Managed Instance

Partitionering gör stora tabeller eller index mer hanterbara eftersom partitionering gör att du kan hantera och komma åt delmängder av data snabbt och effektivt och upprätthålla integriteten för en datainsamling på samma gång. Mer information finns i partitionerade tabeller och index. Replikering stöder partitionering genom att tillhandahålla en uppsättning egenskaper som anger hur partitionerade tabeller och index ska behandlas.

Artikelegenskaper för transaktions- och sammanslagningsreplikering

I följande tabell listas de objekt som används för att partitionera data.

Object Skapad med hjälp av
Partitionerad tabell eller index CREATE TABLE eller CREATE INDEX
Partitionsfunktion CREATE PARTITION FUNCTION
Partitionsschema CREATE PARTITION SCHEME

Partitioneringsegenskaper är artikelschemaalternativen som avgör om partitioneringsobjekt ska kopieras till prenumeranten. Ställ in dessa schemaalternativ på följande sätt:

  • På sidan Artikelegenskaper i guiden Ny publikation eller dialogrutan Egenskaper för publikation. Om du vill kopiera objekten som anges i föregående tabell anger du värdet true för egenskaperna Kopiera tabellpartitioneringsscheman och Kopiera indexpartitioneringsscheman. Information om hur du kommer åt sidan Artikelegenskaper finns i Visa och ändra publikationsegenskaper.

  • Med hjälp av parametern schema_option i någon av följande lagrade procedurer:

    Om du vill kopiera objekten som anges i föregående tabell anger du lämpliga schemaalternativvärden. Information om hur du anger schemaalternativ finns i Ange schemaalternativ.

Replikering kopierar objekt till Prenumeranten under den första synkroniseringen. Om partitionsschemat använder andra filgrupper än DEN PRIMÄRA filgruppen måste dessa filgrupper finnas i Prenumeranten före den första synkroniseringen.

När prenumeranten har initierats sprids dataändringar till prenumeranten och tillämpas på lämpliga partitioner. Dock stöds inte ändringar i partitioneringsschemat. Transaktionell och sammanslagen replikering stödjer inte replikering av följande kommandon: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, eller REBUILD WITH PARTITION-satsen .ALTER INDEX De ändringar som är kopplade till dem replikeras inte automatiskt till prenumeranten. Du behöver göra liknande ändringar manuellt hos Prenumeranten.

Replikeringsstöd för partitionväxling

En av de viktigaste fördelarna med tabellpartitionering är möjligheten att snabbt och effektivt flytta delmängder av data mellan partitioner. Använd kommandot SWITCH PARTITION för att flytta data. Som standard, när du aktiverar en tabell för replikering, blockerar SWITCH PARTITION systemet operationer av följande skäl:

  • Om du flyttar data in i eller ur en tabell som finns hos Publisher men inte finns hos Subscriber, kan Publisher och Subscriber bli inkonsekventa med varandra. Detta problem uppstår vanligtvis när du flyttar data in i eller ut ur en stagingtabell.

  • Om Subscriber har en annan definition av den partitionerade tabellen än Publisher, misslyckas Distribution Agent när den försöker göra ändringar hos Subscriber.

Trots dessa potentiella problem kan du aktivera partitionsswitching för transaktionell replikering. Innan du aktiverar partitionsbyte, se till att alla tabeller som ingår i partitionsbyte finns hos Publisher och Subscriber, och att tabell- och partitionsdefinitionerna är desamma.

När partitioner har exakt samma partitionsschema hos utgivare och prenumeranter kan du aktivera allow_partition_switch tillsammans med replication_partition_switch, som endast replikerar instruktionen för partitionsväxeln till prenumeranten. Du kan också aktivera allow_partition_switch utan att replikera DDL:en. Detta är användbart om du vill distribuera gamla månader från partitionen men behålla den replikerade partitionen på plats i ytterligare ett år i säkerhetskopieringssyfte hos prenumeranten.

Om du aktiverar partitionsväxling på SQL Server 2008 R2 till och med den aktuella versionen kan du också behöva delnings- och sammanslagningsåtgärder inom en snar framtid. Innan du utför en delnings- eller sammanslagningsoperation på en replikerad eller CDC-aktiverad tabell, se till att partitionen inte har några väntande replikerade kommandon. Du bör också se till att inga DML-åtgärder körs på partitionen under delnings- och sammanslagningsåtgärderna. Om det finns transaktioner som loggläsaren eller CDC-fångstjobbet inte behandlade, eller om du utför DML-operationer på en partition av en replikerad eller CDC-aktiverad tabell medan en delnings- eller sammanslagningsoperation körs (med samma partition), kan det leda till ett bearbetningsfel (fel 608 – Ingen katalogpost hittad för partitions-ID) med loggläsaragenten eller CDC-fångstjobbet. För att rätta felet kan du behöva ominitiera prenumerationen eller inaktivera CDC på den tabellen eller databasen.

Scenarier som inte stöds

Följande scenarier stöds inte vid användning av replikering med partitionväxling:

Peer-to-peer-replikation
Peer-to-peer-replikering stöds inte med partitionväxling.

Användning av variabler med partitionsväxling

Att använda variabler med partitionsbyte på tabeller publicerade med transaktionell replikering eller Change Data Capture (CDC) stöds inte för satsen ALTER TABLE ... SWITCH TO ... PARTITION ... .

Till exempel fungerar följande kod för partitionsväxling inte när CDC är aktiverat i databasen eller när TableA ingår i en transaktionspublicering:

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

Byt istället din partition genom att använda partitionsfunktionen direkt, som i följande exempel:

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

Aktivering av partitionväxling

Följande egenskaper för transaktionspublikationer gör det möjligt för dig att kontrollera beteendet för partitionsbyte i en replikerad miljö:

  • @allow_partition_switch: När den är inställd på true, kan du köra SWITCH PARTITION mot publikationsdatabasen.

  • @replicate_partition_switch: Avgör om DDL-satsen SWITCH PARTITION ska replikeras till prenumeranter. Det här alternativet är endast giltigt när @allow_partition_switch är inställt på true.

Ställ in dessa egenskaper genom att använda sp_addpublication när du skapar publikationen, eller genom att använda sp_changepublication efter att du skapat publikationen. Som nämnts tidigare stöder inte sammanslagningsreplikering partitionväxling. För att köra SWITCH PARTITION på en tabell som är aktiverad för sammanslagningsreplikering, ta bort tabellen från publikationen.