Replikowanie kolumny tożsamości

When you assign an IDENTITY property to a column, Microsoft SQL Server automatically generates sequential numbers for new rows inserted in the table containing the identity column.Aby uzyskać więcej informacji zobacz IDENTITY (Property) (Transact-SQL). Kolumny identyfikacji mogą być dołączone jako część klucz podstawowy, warto unikać zduplikowane wartości w kolumnach identyfikacyjnych.Kolumn identyfikacji można używać w topologii replikacja, który ma więcej niż jeden węzeł aktualizacji, w każdym węźle w topologii replikacja muszą używać inny zakres wartości tożsamości, tak że nie występują duplikaty.

Na przykład, można przypisać Wydawca z zakresu od 1 do 100, subskrybent A zakres 101-200 i subskrybent B zakres 201-300.Jeżeli wiersz jest wstawiany w Wydawca i wartość tożsamości jest na przykład, 65, że wartości są replikowane do każdego subskrybent.Podczas replikacja wstawia dane na poszczególnych subskrybent, to nie zwiększa kolumna tożsamości wartości w tabela subskrybent; zamiast tego jest wstawiana wartość literału 65.Wstawia tylko jednego użytkownika, ale nie agent replikacja wstawia spowodować kolumna tożsamości wartość ma być zwiększany.

Replikacja obsługuje kolumny identyfikacji we wszystkich publikacja i zarządzać nimi automatycznie typów subskrypcja, co pozwala na zarządzanie kolumny ręcznie lub mieć replikacji.

Uwaga

Dodawanie kolumna tożsamości do opublikowanych tabela nie jest obsługiwana, może powodować w innych niż zbieżności, gdy kolumny są replikowane do subskrybent.Wartości kolumna tożsamości w Wydawca zależy od kolejności, w jakiej fizycznie przechowywane są wiersze z tabela, których dotyczy problem.Wiersze mogą być przechowywane w inny sposób przez subskrybent, dlatego mogą być różne dla tych samych wierszach wartości kolumna tożsamości.

Określanie opcji zarządzania zakres tożsamości

Replikacja oferuje trzy opcje zarządzania zakres tożsamości:

  • Automatyczne.Używane do replikacja łączenia i replikacja transakcyjnej aktualizacji przez subskrybent.Określ rozmiar zakresów dla Wydawca i subskrybentów i replikacja automatycznie dostosowuje przypisania nowych zakresów.Replikacja ustawia opcję nie dla replikacji na kolumna tożsamości przez subskrybent, tak aby tylko użytkownik wstawia powodują wartość, która ma być zwiększany przez subskrybent.Aby uzyskać więcej informacji zobacz Kontrolowanie ograniczenia tożsamości i wyzwalaczy z nie dla replikacja.

    Uwaga

    Subskrybenci musi zsynchronizować z programem Wydawca, aby otrzymać nowe zakresy.Ponieważ subskrybent są automatycznie przypisywane zakresów tożsamości, możliwe jest do wszystkich subskrybent do wydechu dostaw całego zakresu tożsamości, jeśli wielokrotnie żądania nowych zakresów.

  • Ręczne.migawka i replikacja transakcyjnej bez aktualizacji subskrybent replikacja transakcyjnej typu peer-to-peer, lub jeśli aplikacja musi kontrolować zakresów tożsamości programowo.Jeśli określisz ręczny zarządzania, należy upewnić się, że zakresy są przypisywane do wydawcę i subskrybent każdego i że przydzielane są nowe zakresy jeżeli początkowe zakresy są używane.Replikacja ustawia opcję nie dla replikacji kolumna tożsamości przez subskrybent.

  • Brak.Ta opcja jest zalecana tylko w przypadku Wstecz zgodność ze starszymi wersjami SQL Server i jest dostępna tylko z interfejs procedura przechowywana dla transakcyjnych publikacji.

Aby określić jedną z opcji zarządzania zakres tożsamości

Przypisywanie zakresów tożsamości

replikacja łączenia i replikacji transakcyjnej różne metody służące do przypisywania zakresów; tych metod są opisane w tej sekcji.

Istnieją dwa rodzaje zakresów wziąć pod uwagę podczas replikowania kolumny identyfikacji: zakresy, do których przypisany do Wydawca i subskrybentów, a zakres typu danych kolumna. W poniższej tabela przedstawiono zakresy dostępna dla typów danych, zwykle używane w kolumnach identyfikacyjnych.Zakres jest używany we wszystkich węzłach w topologii.Na przykład, jeśli używasz smallint , począwszy od 1 z 1, maksymalna liczba wstawia przyrostu jest 32 767 Wydawca i wszystkich subskrybentów.Rzeczywista liczba wstawia zależy, czy nie ma przerw w wartości używane i czy jest używana wartość progowa.Aby uzyskać więcej informacji na temat wartości progowe zobacz następujące sekcje "" Scal replikacja"oraz"Transakcji replikacja z w kolejce aktualizowanie subskrypcji".

Jeśli wydawca wyczerpuje zakres swoją tożsamość po insert, może on automatycznie przypisać nowy zakres Jeśli insert wykonanej przez element członkowski członkowski db_owner stała rola bazy danych.W przypadku insert przez użytkownika nie jest w danej roli, Agent odczytywania dziennika, Agent korespondencji seryjnej lub użytkownik, który jest członkiem z db_owner roli należy uruchomić sp_adjustpublisheridentityrange (języka Transact-SQL). Dla transakcyjnych publikacji Agent odczytywania dziennika musi być uruchomiona automatycznie przydzielić nowego zakres (wartość domyślna to agenta do uruchomienia w sposób ciągły).

Typ danych

Zakres

tinyint

Nie obsługiwane w przypadku automatycznego zarządzania

smallint

-2 ^ 15 (-32 768) do 2 ^ 15-1 (32 767)

int

-2 ^ 31 (-2 147 483 648) do 2 ^ 2 147 483 31-1 (647)

bigint

-2 ^ 63 (-9,223,372,036,854,775,808) do 2 ^ 63-1 (9,223,372,036,854,775,807)

decimal i numeric

-10 ^ 38 + 1 do 10 ^ 38-1

replikacja łączenia

Zakresy tożsamości są zarządzane przez wydawcę i te będą propagowane do subskrybentów przez agenta korespondencji seryjnej (w hierarchii republishing zakresów zarządza głównego Wydawca i republishers).Wartości tożsamości są przypisywane z puli na Wydawca.Po dodaniu artykuł z kolumna tożsamości na publikacja w Kreatora nowej publikacja lub przy użyciu sp_addmergearticle (Transact-SQL), określ wartości:

  • The @identity_range parameter, which controls the identity zakres size initially allocated both to the Wydawca and to Subscribers with klient subscriptions.

    Uwaga

    Dla subskrybentów, na których działają poprzednie wersje SQL Server, ten parametr (a nie od @ pub_identity_range parametr) steruje także rozmiar zakres tożsamości na ponowne publikowanie subskrybentów.

  • The @pub_identity_range parameter, which controls the identity zakres size for republishing allocated to Subscribers with server subscriptions (required for republishing data).Wszystkie subskrybentów z subskrypcjami serwera wyświetlany zakres publikowany ponownie, nawet wtedy, gdy one nie faktycznie ponownie opublikować dane.

  • The @threshold parameter, which is used to determine when a new zakres of identities is required for a subskrypcja to SQL Server Compact 3.5 SP1 or a previous wersja of SQL Server.

Na przykład można określić 10000 dla @ identity_range i 500 000 dla @ pub_identity_range.Wydawca i wszystkich subskrybentów uruchomiony SQL Server 2005 lub jego nowszej wersja, łącznie z subskrypcja serwerowa Subskrybent przypisano podstawowy zakres 10 000. Subskrybent o subskrypcja serwerowa jest przypisany podstawowego zakres 500 000, które mogą być używane przez subskrybentów, synchronizowanie z republishing subskrybenta (można również wybrać @ identity_ zakres, @ pub_identity_ zakres, and próg @ artykuły w publikacja przez subskrybenta republishing).

Każde działanie subskrybent SQL Server 2005 lub jego nowszej wersja otrzymuje również zakres tożsamości pomocniczego. Zakres pomocniczy jest równa wielkości podstawowego zakresu; po wyczerpaniu podstawowy zakres pomocniczy zakres jest używany, a Agent Scal przypisuje nowy zakres do subskrybent.Nowy zakres staje się zakres pomocniczego, a proces jest kontynuowany jako subskrybent używa wartości tożsamości.

Subskrybenci uruchomiony SQL Server Compact 3.5 SP1 lub poprzednich wersji SQL Server są przypisywane tylko podstawowy zakres; przydziału nowych zakresów jest kontrolowana przez próg @ parametr.Ponadto republishing subskrybent zawiera tylko określony w zakres @ identity_range parametr; muszą używać tego zakresu dla lokalnych zmian i zmiany na subskrybent, synchronizowanie z republishing subskrybent.Na przykład można określić 10000 dla @ pub_identity_range, 500 000 dla @ identity_range a 80 %próg @.Po 8000 wstawia w subskrybent (80 procent 10 000), wydawca jest przypisana do nowego zakres.Po przypisaniu nowy zakres będzie przerwę w wartości zakresu tożsamości w tabela.Określanie wyższe wyniki próg w mniejszych luki, ale system jest mniej odporny na uszkodzenia: Jeśli z jakiegoś powodu nie można uruchomić agenta korespondencji seryjnej, subskrybent może łatwiej uruchomić z tożsamości.

Replikacja transakcyjnych w kolejce aktualizowanie subskrypcji

Zakresy tożsamości są zarządzane przez dystrybutor i te będą propagowane do subskrybentów przez agenta dystrybutor.Wartości tożsamości są przypisywane z puli u dystrybutor.Rozmiar buforu jest na podstawie rozmiaru typu danych i przyrost używany dla kolumna tożsamości.Po dodaniu artykuł z kolumna tożsamości na publikacja w Kreatora nowej publikacja lub przy użyciu sp_addarticle (języka Transact-SQL), określ wartości:

  • The @identity_range parameter, which controls the identity zakres size initially allocated to all Subscribers.

  • The @pub_identity_range parameter, which controls the identity zakres size allocated to the Wydawca.

  • The @threshold parameter, which is used to determine when a new zakres of identities is required for a subskrypcja.

Na przykład można określić 10000 dla @ pub_identity_range, 1000 for @ identity_range (przy założeniu, że aktualizacje mniej subskrybent), a 80 procent w przypadku próg @.Po 800 wstawia w subskrybenta (80 procent 1000), subskrybent jest przypisany do nowego zakres.Po 8000 wstawia przez wydawcę wydawca jest przypisywany nowy zakres.Po przypisaniu nowy zakres będzie przerwę w wartości zakresu tożsamości w tabela.Określanie wyższe wyniki próg w mniejszych luki, ale system jest mniej odporny na uszkodzenia: Jeśli z jakiegoś powodu nie można uruchomić agenta dystrybucji, subskrybent może łatwiej uruchomić z tożsamości.

Przypisywanie zakresów ręczne tożsamości zakres zarządzania

Jeśli określisz ręczny tożsamości zakres zarządzania, należy się upewnić, że Wydawca i poszczególnych zakresów subskrybent użycia innej tożsamości.Rozważmy na przykład tabela na Wydawca z zdefiniowana jako kolumna tożsamości IDENTITY(1,1): Kolumna tożsamości rozpoczyna się od 1 i jest zwiększana o 1 przy każdym wierszu jest wstawiany. Jeśli w tabela u Wydawca ma 5000 wierszy, a niektóre wzrostu oczekiwać w tabela w całej aplikacji, Wydawca można użyć z zakres 1-10 000.Biorąc pod uwagę dwie subskrybent, subskrybent A można użyć 10 001–20 000 i subskrybent B może używać 20,001-30 000.

Po subskrybent jest inicjowany z dokładną lub w inny sposób, należy wykonać CHECKIDENT DBCC przypisać subskrybent punkt wyjścia dla zakres tożsamości.Na przykład na subskrybent A, czy wykonać DBCC CHECKIDENT('<TableName>','reseed',10001). B subskrybent zostałby uruchomiony CHECKIDENT('<TableName>','reseed',20001).

Aby przypisać nowe zakresy dla Wydawca lub subskrybentów, wykonać CHECKIDENT DBCC i określ nową wartość do reseed w tabela.Należy mieć jakiś sposób, aby ustalić, kiedy musi być przypisany nowy zakres.Na przykład aplikacja może mieć mechanizm, który wykrywa, gdy węzeł ma korzystać zakresu i przypisywanie nowy zakres przy użyciu CHECKIDENT DBCC.Można również dodać ograniczenie typu check, aby zapewnić, że nie można dodać wiersza, jeśli spowodowałoby to out zakres tożsamości wartość, która zostanie użyta.

Zakresy tożsamości obsługi po operacji przywracanie bazy danych

Jeśli korzystasz z tożsamości Automatyczny zakres zarządzania, gdy subskrybent zostanie przywrócone z kopia zapasowa, automatycznego żądania nowego zakresu wartości tożsamości.Wydawca zostanie przywrócona z kopia zapasowa, należy się upewnić, że wydawcy przypisano we właściwym zakresie.Do replikacja łączenia przypisuje nowy przy użyciu zakres sp_restoremergeidentityrange (języka Transact-SQL). Najwyższą wartość, która została użyta określić replikacja transakcyjnej, a następnie zestaw punktem początkowym dla nowych zakresów.Wykonaj poniższą procedurę, po baza danych publikacji została przywrócona:

  1. Zatrzymaj wszystkie operacje wykonywane na wszystkich subskrybentów.

  2. Dla każdego opublikowanego tabela zawierającej kolumna tożsamości:

    1. W bazie danych subskrypcja na każdym subskrybent wykonać IDENT_CURRENT('<TableName>').

    2. Rejestrowanie najwyższej wartości znalezionych we wszystkich subskrybentów.

    3. W baza danych publikacja przez wydawcę, wykonać DBCC CHECKIDENT(<TableName>','reseed',<HighestValueFound+1>).

    4. W bazie danych publikacja przez wydawcę wykonać sp_adjustpublisheridentityrange <PublicationName>, <TableName>.

    Uwaga

    Jeśli ustawiono wartość kolumna tożsamości Zmniejsz, a nie wartość przyrostu, rekord najniższej wartości można znaleźć, a następnie reseed z tą wartością.