Replikowanie partycjonowanych tabel i indeksów

Dotyczy:SQL ServerAzure SQL Managed Instance

Partycjonowanie sprawia, że duże tabele lub indeksy są bardziej zarządzane, ponieważ partycjonowanie umożliwia szybkie i wydajne zarządzanie podzbiorami danych i uzyskiwanie do ich dostępu oraz utrzymywanie integralności kolekcji danych w tym samym czasie. Aby uzyskać więcej informacji, zobacz Partycjonowane tabele i indeksy. Replikacja obsługuje partycjonowanie, udostępniając zestaw właściwości określający sposób traktowania partycjonowanych tabel i indeksów.

Właściwości artykułu dotyczące replikacji transakcyjnej i scalania

W poniższej tabeli wymieniono obiekty używane do partycjonowania danych.

Object Utworzone przy użyciu
Partycjonowana tabela lub indeks CREATE TABLE lub CREATE INDEX
Funkcja podziału CREATE PARTITION FUNCTION
Schemat partycji CREATE PARTITION SCHEME

Właściwości partycjonowania to opcje schematu artykułu, które określają, czy obiekty partycjonowania powinny być kopiowane do subskrybenta. Ustaw te opcje schematu w następujący sposób:

  • Na stronie Właściwości artykułu w Kreatorze nowej publikacji lub w oknie dialogowym Właściwości publikacji. Aby skopiować obiekty wymienione w poprzedniej tabeli, określ wartość true dla właściwości Kopiuj schematy partycjonowania tabeli i Kopiuj schematy partycjonowania indeksu. Aby uzyskać informacje o sposobie uzyskiwania dostępu do strony Właściwości artykułu , zobacz Wyświetlanie i modyfikowanie właściwości publikacji.

  • Używając parametru schema_option jednego z następujących procedur składowanych:

    Aby skopiować obiekty wymienione w poprzedniej tabeli, określ odpowiednie wartości opcji schematu. Aby uzyskać informacje o sposobie określania opcji schematu, zobacz Określanie opcji schematu.

Replikacja kopiuje obiekty do subskrybenta podczas synchronizacji początkowej. Jeśli schemat partycji używa grup plików innych niż podstawowa grupa plików, te grupy plików muszą istnieć na subskrybenta przed początkową synchronizacją.

Po zainicjowaniu subskrybenta zmiany danych są propagowane do subskrybenta i stosowane do odpowiednich partycji. Jednak zmiany w schemacie podziału nie są obsługiwane. Replikacja transakcyjna i scalająca nie wspierają replikacji następujących poleceń: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, ani instrukcji REBUILD WITH PARTITION dla ALTER INDEX. Zmiany z nimi związane nie są automatycznie replikowane dla Subskrybenta. Podobne zmiany musisz wprowadzić ręcznie na stronie Subskrybera.

Wsparcie replikacji dla przełączania partycji

Jedną z kluczowych zalet partycjonowania tabel jest możliwość szybkiego i wydajnego przenoszenia podzestawów danych między partycjami. Użyj SWITCH PARTITION polecenia do przeniesienia danych. Domyślnie, gdy włączasz replikację tabeli, system blokuje SWITCH PARTITION operacje z następujących powodów:

  • Jeśli przeniesiesz dane do tabeli lub z tabeli, która istnieje u wydawcy, ale nie istnieje u subskrybenta, wydawca i subskrybent mogą stać się wzajemnie niespójne. Problem ten zwykle pojawia się, gdy przenosisz dane do lub z tabeli etapowej.

  • Jeśli Subskrybent ma inną definicję tabeli partycjonowanej niż Publikujący, Agent dystrybucji kończy działanie niepowodzeniem podczas próby zastosowania zmian u Subskrybenta.

Pomimo tych potencjalnych problemów można włączyć przełączanie partycji dla replikacji transakcyjnej. Zanim włączysz przełączanie partycji, upewnij się, że wszystkie tabele zaangażowane w przełączanie partycji istnieją w Publisher i Subscriber oraz że definicje tabel i partycji są takie same.

Gdy partycje mają dokładnie ten sam schemat partycji u wydawców i subskrybentów, można włączyć allow_partition_switch wraz z replication_partition_switch, co spowoduje replikowanie tylko instrukcji przełącznika partycji do subskrybenta. Można również włączyć allow_partition_switch bez replikowania instrukcji DDL. Jest to przydatne w przypadku, gdy chcesz usunąć stare miesiące z partycji, ale zachować replikowaną partycję jeszcze przez kolejny rok do celów tworzenia kopii zapasowej u subskrybenta.

Jeśli włączysz przełączanie partycji w programie SQL Server 2008 R2 za pośrednictwem bieżącej wersji, w niedalekiej przyszłości może być również konieczne przeprowadzenie operacji dzielenia i scalania. Przed wykonaniem operacji podziału lub łączenia na replikowanej lub obsługiwanej przez CDC tabeli, upewnij się, że dana partycja nie zawiera żadnych oczekujących poleceń replikowanych. Należy również upewnić się, że żadne operacje DML nie są wykonywane na partycji podczas operacji dzielenia i scalania. Jeśli istnieją transakcje, których czytnik logów lub zadanie przechwytywania CDC nie przetworzył, albo jeśli wykonujesz operacje DML na partycji replikowanej lub CDC-obsługiwanej tabeli podczas operacji split lub merge (obejmującej tę samą partycję), może to prowadzić do błędu przetwarzania (błąd 608 – Brak wpisu katalogowego dla ID partycji) z agentem czytnika logów lub zadaniem przechwytywania CDC. Aby naprawić błąd, może być konieczne ponowne zainicjalizowanie subskrypcji lub wyłączenie CDC na tej tabeli lub bazie danych.

Niewspierane scenariusze

Następujące scenariusze nie są obsługiwane przy użyciu replikacji z przełączaniem partycji:

Replikacja peer-to-peer
Replikacja peer-to-peer nie jest obsługiwana w przypadku przełączania partycji.

Używanie zmiennych z przełączaniem partycji

Używanie zmiennych przy przełączaniu partycji w tabelach publikowanych za pomocą replikacji transakcyjnej lub mechanizmu Change Data Capture (CDC) nie jest obsługiwane w instrukcji ALTER TABLE ... SWITCH TO ... PARTITION ....

Na przykład poniższy kod przełączania partycji nie działa, gdy w bazie danych jest włączona funkcja CDC lub gdy tabela TableA jest objęta publikacją transakcyjną:

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

Zamiast tego zmień partycję, używając bezpośrednio funkcji partycji, na przykład w następującym przykładzie:

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

Włączanie przełączania partycji

Następujące właściwości publikacji transakcyjnych pozwalają kontrolować zachowanie przełączania partycji w środowisku replikowanym:

  • @allow_partition_switch: Po ustawieniu wartości true można uruchomić SWITCH PARTITION względem bazy publikacji.

  • @replicate_partition_switch: Określa, czy replikować instrukcję SWITCH PARTITION DDL do subskrybentów. Ta opcja jest prawidłowa tylko wtedy, gdy @allow_partition_switch jest ustawione na true.

Ustaw te właściwości, używając sp_addpublication podczas tworzenia publikacji lub używając sp_changepublication po jej utworzeniu. Jak wspomniano wcześniej, replikacja merge nie obsługuje przełączania partycji. Aby uruchomić SWITCH PARTITION na tabeli włączonej dla replikacji scalania, usuń tabelę z publikacji.