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 TOŻSAMOŚĆ (właściwość) (Transact-SQL).Ponieważ kolumny identyfikacji mogą być dołączone jako część klucz podstawowy, jest ważne, aby uniknąć zduplikowane wartości w kolumnach identyfikacyjnych.Aby użyć kolumny tożsamości w topologia replikacja ma aktualizacji w więcej niż jeden węzeł w każdym węźle w topologia replikacja należy użyć innego zakres tożsamości wartości tak, aby nie występują duplikaty.

Na przykład Wydawca można przypisać zakres 1-100, A abonent zakres 101-200 i subskrybenta b zakres 201-300.Jeśli zostanie wstawiona w Wydawca i wartość tożsamości jest na przykład, 65, że wartość jest replikowany poszczególnym subskrybentom.Podczas replikacja wstawia dane na każdy abonent, nie zwiększa wartości kolumna tożsamości w tabela subskrybenta; Zamiast tego wstawiana jest wartość literału 65.Tylko użytkownik wstawia, ale nie replikacja agenta wstawia przyczyną wartości kolumna tożsamości jest zwiększana.

replikacja obsługuje kolumny tożsamości we wszystkich publikacja i zarządzać nimi automatycznie typów subskrypcja, umożliwiając zarządzanie kolumny ręcznie lub mieć replikacja.

Ostrzeżenie

Dodawanie kolumna tożsamości do opublikowanych tabela nie jest obsługiwana, może powodować w innych niż zbieżności, gdy kolumna jest replikowany do subskrybenta.Wartości kolumna tożsamości w Wydawca zależy od kolejności, w jakiej fizycznie przechowywane są wiersze z tabela usterce.Wiersze mogą być przechowywane w inny sposób przez subskrybenta; Dlatego wartość kolumna tożsamości może różnić się w tych samych wierszach.

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

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

  • Automatyczne.Używany do replikacja scalająca i replikacja transakcyjna aktualizacji przez subskrybenta.Określanie zakresów wielkości dla Wydawca i abonentów i replikacja automatycznie zarządza przydziału nowych zakresów.Replikacja ustawia opcję nie dla replikacji na kolumna tożsamości przez subskrybenta tak, że tylko użytkownik wstawia powodować wartość jest zwiększana przez subskrybenta.Aby uzyskać więcej informacji, zobacz Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.

    Ostrzeżenie

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

  • Ręczne.Używane do migawka i replikacja transakcyjna bez aktualizacji przez subskrybenta peer-to-peer replikacja transakcyjna, lub jeśli aplikacja musi kontrolować zakresy tożsamości programowo.Jeśli określisz ręczny zarządzania musi zapewnić, że zakresy są przypisane do Wydawca i każdy abonent i że nowe zakresy są przypisywane jeśli początkowe zakresy są używane.Replikacja ustawia opcję nie dla replikacji na kolumna tożsamości przez subskrybenta.

  • Brak.Ta opcja jest zalecana tylko dla wstecz zgodność ze starszymi wersjami SQL Server i jest dostępna tylko z interfejs procedura składowana dla transakcyjnych publikacji.

Aby określić opcję zarządzania zakres tożsamości

Przypisywanie zakresów tożsamości

Replikacja scalania i replikacja transakcyjna różne metody przypisywania zakresów; metody te są opisane w tej sekcji.

Istnieją dwa typy zakresów do uwzględnienia podczas replikowania kolumny tożsamości: zakresy przydzielone do Wydawca i abonentó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 przyrostu 1 Maksymalna liczba wstawia wynosi 32 767 dla Wydawca i wszystkich subskrybentów.Rzeczywista liczba wstawia zależy, czy istnieją luki w wartości używane i czy jest używana wartość progowa.Aby uzyskać więcej informacji na temat progów zobacz następujące sekcje "Replikacji scalania" i "Replikacji transakcyjnej z subskrypcjami kolejce aktualizacji".

Jeśli wydawca zmagazynowane zakresu jego tożsamości, po wstawieniu, może on automatycznie przypisać nowy zakres Jeżeli Wstaw została wykonana przez element członkowski db_owner stała rola bazy danych.Jeżeli Wstaw została wykonana przez użytkownika nie jest w tej roli, Agent czytnik dziennika, scalanie agenta lub użytkownik, który jest element członkowski z db_owner roli należy uruchomić sp_adjustpublisheridentityrange (języka Transact-SQL).Transakcyjne publikacji Agent odczytywania dziennika musi być uruchomiona automatycznie przydzielić nowy zakres (domyślnie nie ma agenta do działania ciągłego).

Typ danych

Zakres

tinyint

Nie jest obsługiwane dla automatycznego zarządzania

smallint

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

int

-2 ^ 31 (648) do 2 ^ 31-1 (2 147 483 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

Scalania replikacji

Zakresy tożsamości są zarządzane przez wydawcę i propagowane przez agenta scalania dla subskrybentów (hierarchia republishing, zakresy zarządza głównego Wydawca i republishers).Wartości tożsamości są przypisywane z puli w Wydawca.Po dodaniu artykuł kolumna tożsamości za pomocą publikacja w Kreatorze nowej publikacja lub za pomocą sp_addmergearticle (języka Transact-SQL), określ wartości:

  • @ Identity_range parametr, który kontroluje rozmiar zakres tożsamości początkowo przydzielone zarówno do Wydawca i subskrybentom z subskrypcjami klient.

    Ostrzeżenie

    Dla subskrybentów, na których działają poprzednie wersje SQL Server, ten parametr (a nie @ pub_identity_range parametr) kontroluje również rozmiar zakres tożsamości na ponowne opublikowanie subskrybentów.

  • @ Pub_identity_range parametr, który kontroluje rozmiar zakres tożsamości dla publikowany ponownie przydzielone do subskrybentów z serwera subskrypcji (wymagane dla ponownego publikowania danych).Wszystkim subskrybentom z subskrypcjami serwera otrzymać zakres publikowany ponownie, nawet jeśli one faktycznie nie ponownie opublikować dane.

  • @ Próg parametr, który jest używany do określenia, kiedy nowy zakres tożsamości jest wymagana dla subskrypcja SQL Server Compact 3.5 z dodatkiem SP1 lub poprzednią wersja SQL Server.

Na przykład można określić 10000 dla @ identity_range i 500 000 dla @ pub_identity_range.Wydawca i abonentów wszystkie uruchomione SQL Server 2005 lub nowszej wersja, włączając subskrybenta z subskrypcja serwerowa są przypisywane podstawowego zakres 10000.Subskrybenta z subskrypcja serwerowa jest przypisany podstawowego zakres 500 000, mogą być używane przez abonentów, których synchronizacja z republishing subskrybenta (należy określić @ identity_zakres, @ pub_identity_zakres, i @ próg artykuły w publikacja subskrybent republishing).

Każdy uruchomiony subskrybenta SQL Server 2005 lub nowszej wersja otrzymuje również zakres tożsamości pomocniczego.Zakres pomocniczego jest równa wielkości zakres podstawowej; Po wyczerpaniu podstawowy zakres używany zakres pomocniczego i agenta scalić przypisuje nowy zakres subskrybenta.Nowy zakres staje się zakres pomocniczego, a proces jest kontynuowany, abonent używa wartości tożsamości.

Subskrybenci z systemem SQL Server Compact 3.5 z dodatkiem SP1 lub poprzednie wersje SQL Server są przypisywane tylko podstawowy zakres; Przypisanie nowych zakresów jest kontrolowana przez @ próg parametru.Ponadto republishing subskrybenta ma tylko zakres określony w @ identity_range parametr; lokalne zmiany i zmiany u abonentów, które synchronizują z subskrybentem republishing go, należy użyć tego zakres.Na przykład można określić 10000 dla @ pub_identity_range, 500 000 dla @ identity_range i 80 procent dla @ próg.Po 8000 wstawia w subskrybenta (80 procent 10000), Wydawca jest przypisany nowy zakres.Po przypisaniu nowy zakres będzie powstanie wartości zakresu tożsamości w tabela.Określanie wyższe wyniki próg w mniejszych przerwy, ale system jest mniej odporny na uszkodzenia: Jeśli z jakiegoś powodu nie można uruchomić agenta scalanie, subskrybent może łatwiej uruchomić z tożsamości.

Replikacji transakcyjnej z subskrypcjami aktualizowania w kolejce

Zakresy tożsamości są zarządzane przez dystrybutora i propagowane przez agenta dystrybucji do subskrybentów.Wartości tożsamości są przypisywane z puli u dystrybutora.Rozmiar puli jest na podstawie rozmiaru typu danych i przyrostu dla kolumna tożsamości.Po dodaniu artykuł kolumna tożsamości za pomocą publikacja w Kreatorze nowej publikacja lub za pomocą sp_addarticle (języka Transact-SQL), określ wartości:

  • @ Identity_range parametr, który kontroluje rozmiar zakres tożsamości wstępnie przydzielone do wszystkich subskrybentów.

  • @ Pub_identity_range parametr, który kontroluje rozmiar zakres tożsamości przydzielony do Wydawca.

  • @ Próg parametr, który jest używany do określenia, kiedy nowy zakres tożsamości jest wymagana dla subskrypcja.

Na przykład można określić 10000 dla @ pub_identity_range, 1000 dla @ identity_range (przy założeniu mniej aktualizacji przez subskrybenta) i 80 procent dla @ próg.Po 800 wstawia w subskrybenta (80 procent 1000), abonent jest przypisany nowy zakres.Po 8000 wstawia przez wydawcę wydawca jest przypisany nowy zakres.Po przypisaniu nowy zakres będzie powstanie wartości zakresu tożsamości w tabela.Określanie wyższe wyniki próg w mniejszych przerwy, 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, który musi zapewnić, że Wydawca i każdy abonent używać tożsamości różnych zakresów.Rozważmy na przykład tabela na Wydawca z kolumną identyfikacji zdefiniowane jako IDENTITY(1,1): Kolumna tożsamości rozpoczyna się od 1 i jest zwiększana o 1 każdego czas zostanie wstawiona.Jeśli w tabela Wydawca 5000 wiersze i oczekiwany wzrost niektórych w tabela przez cały okres stosowania, Wydawca można użyć zakres 1-10 000.Dwa abonentów, subskrybenta a można użyć 10 001–20 000, oraz b subskrybent może wykorzystać 20,001-30 000.

Po subskrybenta jest inicjowana z migawka lub innymi sposobami, należy wykonać DBCC CHECKIDENT, aby przypisać punkt wyjścia dla jego zakres tożsamości subskrybenta.Na przykład na subskrybenta a czy wykonać DBCC CHECKIDENT('<TableName>','reseed',10001).B subskrybent będzie wykonać CHECKIDENT('<TableName>','reseed',20001).

Aby przypisać nowe zakresy do Wydawca lub abonentów, wykonać DBCC CHECKIDENT i określ nową wartość do reseed w tabela.Powinien mieć sposobem ustalenia, musi być przypisany nowy zakres.Na przykład aplikacja może mieć mechanizm, który wykrywa, gdy węzeł ma zajmować jej zakres i przypisać nowy zakres przy użyciu DBCC CHECKIDENT.Można również dodać ograniczenie typu check, aby zapewnić, że nie można dodać wiersz, jeżeli mogłoby to spowodować poza zakres wartości tożsamości ma być używany.

Zakresy tożsamości obsługi po przywróceniu bazy danych

Jeżeli używasz automatycznego tożsamości zakres zarządzania, gdy abonent zostanie przywrócone z kopia zapasowa automatycznego żądania nowy zakres wartości tożsamości.Wydawca jest przywracany z kopia zapasowa, należy się upewnić, że wydawca jest przypisany odpowiedni zakres.Dla replikacja scalająca przypisać używając nowego zakres sp_restoremergeidentityrange (języka Transact-SQL).Dla replikacja transakcyjna, ustalić najwyższą wartość, która używana i następnie ustaw punkt początkowy dla nowych zakresów.Poniższa procedura po baza danych publikacji została przywrócona:

  1. Zatrzymaj wszystkie działania na wszystkich subskrybentów.

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

    1. W baza danych subskrypcja na każdy abonent wykonać IDENT_CURRENT('<TableName>').

    2. Zapisać najwyższą wartość znaleźć wszystkich subskrybentów.

    3. W baza danych publikacja Wydawca, należy wykonać DBCC CHECKIDENT(<TableName>','reseed',<HighestValueFound+1>).

    4. W baza danych publikacja Wydawca, należy wykonać sp_adjustpublisheridentityrange <PublicationName>, <TableName>.

    Ostrzeżenie

    Jeśli wartość kolumna tożsamości jest zestaw Aby zmniejszyć zamiast zwiększać rekord najniższa wartość znaleźć, a następnie reseed z tą wartością.