Kimlik sütunları çoğaltılıyor

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.Daha fazla bilgi için bkz: KİMLİK (özelliği) (Transact-SQL).Kimlik sütunları birincil anahtar bir parçası olarak dahil olabilir çünkü yinelenen kimlik sütunlarının değerleri önlemek önemlidir.Her düğüm çoğaltma topolojisinde güncelleştirmeleri birden fazla düğüme sahip bir çoğaltma topolojisi IDENTITY sütunları kullanmak için Yinelenenleri ortaya böylece farklı bir kimlik değerleri aralık kullanmanız gerekir.

Örneğin, Yayımcı aralık 1-100, a abone atanabilir aralık 101-200 ve abone b 201-300 aralık.Satır Yayımcı tarafında eklenir ve kimlik değeri, örneğin, 65, bu değeri her abone için yinelenir.Her abone çoğaltma veri eklediğinde, abone kimlik sütun değerini artırmaz tablo; Bunun yerine, hazır bilgi değeri 65 eklenir.Yalnızca kullanıcının eklediği ancak değil, neden çoğaltma aracısı ekler kimlik sütunu 'er için değer.

Kimlik sütunları tüm yayın çoğaltma işleme ve abonelik türleri sütunları el ile yönetmek veya çoğaltma sahip olmasını sağlayarak, bunları otomatik olarak yönetir.

Not

Sütun için abone çoğaltıldığında yakınsaması içinde neden olabileceği için yayımlanmış bir tablo için kimlik sütunu ekleme, desteklenmiyor.Değerler kimlik sütunu içinde etkilenen tablo için satır fiziksel olarak saklanır siparişte Yayımcı tarafında bağlıdır.Satır Abone tarafında farklı şekilde depolanmış olabilir; Bu nedenle değeri kimlik sütunu aynı satırlar için farklı olabilir.

Kimlik aralık yönetimi seçeneği belirtme

Çoğaltma üç kimlik aralık yönetimi seçenekleri sunar:

  • Otomatik.Birleştirme çoğaltması ve abone güncelleştirme ile işlem çoğaltma kullanılır.Yayımcı ve aboneleri için boyut aralıkları belirtmek ve çoğaltma yeni aralıkları atama otomatik olarak yönetir.Yineleme üzerinde not for REPLICATION seçeneği ayarlar kimlik sütunu yalnızca kullanıcı ekler böylece abone Abone tarafında 'er değeri neden olur.Daha fazla bilgi için bkz: Denetleme sınırlamaları, kimlikleri ve tetikleyiciler not ile çoğaltma.

    Not

    Abonelerin yeni aralıkları almak için yayımcı ile eşitlemeniz gerekir.Abonelerin kimlik aralıklarını otomatik olarak atanan çünkü her abone için sürekli olarak yeni aralıkları isterse tüm tedarik kimlik aralıklarını tüketmesine olanak mümkündür.

  • El kitabı.Anlık görüntü ve işlem çoğaltma abone, eşler arası işlem çoğaltma güncelleştirme olmadan kullanılan veya uygulamanızın kimlik aralıklarını program aracılığıyla kontrol gerekir.El ile yönetim belirtirseniz, Yayımcı ve her abone için aralıkları atanır ve başlangıç aralığı kullanılıyorsa, yeni aralıklarını atanan emin olmanız gerekir.Yineleme üzerinde not for REPLICATION seçeneği ayarlar kimlik sütunu adresindeki abone.

  • Yok.Bu seçenek yalnızca geriye doğru önceki sürümleri ile uyumluluk önerilen SQL Server ve saklı yordam yalnızca kullanılabilir arabirim işlem yayınlar için

Bir kimlik aralık yönetimi seçeneğini belirtmek için

Kimlik aralıkları atama

Birleştirme çoğaltma ve işlem çoğaltma aralıkları atama için farklı yöntemler kullanır; Bu yöntemler, bu bölümde açıklanmıştır.

Kimlik sütunları çoğaltılıyor olduğunda hesaba katmanız için aralıkları iki tür vardır: Yayımcı ve aboneleri için atanan aralıkları ve veri aralık yazın sütun.Aşağıdaki tablo aralıkları genellikle kimlik sütunlarının içinde kullanılan veri türleri için kullanılabilir gösterir.Bir topoloji tüm düğümler arasında aralık kullanılır.Örneğin, kullandığınız, smallint 1 1 bir artış ile başlayan, maksimum ekleme sayısı 32,767 yayımcı ve tüm aboneleri olduğunu.Gerçek sayısını ekler bağlıdır kullanılan değerleri boşluklar ve bir eşik değeri kullanılıp kullanılmadığını vardır.Eşikleri hakkında daha fazla bilgi için aşağıdaki bölümlerde "Merge Replication" konusuna bakın. ve "Kuyruğa alınmış güncelleştirme abonelikleri ile işlem çoğaltma".

Yayımcı bir ekleme sonrasında kendi kimlik aralık aşarsa, INSERT üye tarafından yapıldıysa bunu otomatik olarak yeni aralık atayabilirsiniz db_owner sabit veritabanı rolü.INSERT olmayan bir kullanıcı, rol, Günlük Okuyucu Aracısı, Birleştirme Aracısı veya üye olan bir kullanıcı tarafından yapıldıysa, db_owner rol çalıştırmalısınız sp_adjustpublisheridentityrange (Transact-sql).İşlemsel yayımlar için Günlük Okuyucu Aracısı (aracı sürekli çalışacak şekilde varsayılandır) yeni aralık otomatik olarak tahsis etmek için çalışmalıdır.

Veri türü

Aralık

tinyint

Otomatik yönetimi için desteklenmiyor

smallint

-2 ^ 15 (-32,768) ile 2 ^ 15-1 (32.767)

int

-2 ^ 31 (-2.147.483.648) ile 2 ^ 31-1 (2.147.483.647)

bigint

-2 ^ 63 (-9.223.372.036.854.775.808) ile 2 ^ 63-1 (9,223,372,036,854,775,807)

decimal ve numeric

-10 ^ 38 + 1 ile 10 ^ 38-1

Çoğaltma Birleştir

Kimlik aralıklarını yayımcı tarafından yönetilir ve aboneye Birleştirme Aracısı tarafından yayılan (republishing bir hiyerarşi içinde aralıkları Publisher kök ve republishers tarafından yönetilir).Yayımcı adresindeki bir havuzdan kimlik değerleri atanır.İçeren bir makale eklediğinizde, bir kimlik sütunu yayınına yeni yayın Sihirbazı'nı veya kullanarak sp_addmergearticle (Transact-sql), için değerleri belirtin:

  • The @identity_range parameter, which controls the identity range size initially allocated both to the Publisher and to Subscribers with client subscriptions.

    Not

    Önceki sürümlerini çalıştıran aboneleri için SQL Server, bu parametre (yerine @ pub_identity_range parametresi) da aboneleri yeniden yayınlama adresindeki kimlik aralık boyutunu denetler.

  • The @pub_identity_range parameter, which controls the identity range size for republishing allocated to Subscribers with server subscriptions (required for republishing data).Bunlar gerçekte verileri yeniden yayımlamanız gerekmez bile sunucu abonelikleri ile tüm aboneleri yeniden yayınlama için bir aralık alırsınız.

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

Örneğin, 10000 için belirtebilirsiniz @ identity_range ve için 500000 @ pub_identity_range.Yayımcı ve tüm aboneleri çalışan SQL Server 2005 veya sonraki bir sürüm, sunucu ile abone de dahil olmak üzere abonelik, 10000 birincil aralık atanır.Abone sunucu ile abonelik da republishing abone ile eşitlemek aboneleri tarafından kullanılan 500000, birincil bir aralık atanır (belirtmeniz de gerekir @ identity_range, @ pub_identity_range, ve @ eşik republishing abone adresindeki yayın makaleler için).

Her abone çalışan SQL Server 2005 ya da sonraki bir sürüm alır bir ikincil kimlik aralık.İkincil birincil aralığın boyutunu eşit aralık; birincil aralık kaldığında, ikincil aralık kullanılır ve Birleştirme Aracısı abone ile yeni aralık atar.Yeni aralık ikincil aralığı olur ve abone kimlik değerleri kullanır gibi işlem devam eder.

Çalıştıran aboneleri SQL Server Compact 3.5 SP1 veya önceki sürümleri SQL Server yalnızca birincil aralık; atanır Yeni aralıkları atama tarafından denetlenen @ eşik parametresi.Ayrıca, yalnızca belirtilen aralık republishing abone olan @ identity_range parametresi; republishing abone ile eşitlemek aboneleri adresindeki değişiklikleri ve yerel değişiklikler için bu aralık kullanmalısınız.Örneğin, 10000 için belirtebilirsiniz @ pub_identity_range, 500000 için @ identity_range ve yüzde 80'i için @ eşik.Yayımcı Abone tarafında (yüzde 80'in 10000), 8000 ekledikten sonra yeni bir aralık atanır.Yeni bir aralığı atanan kimlik aralığı değerleri serisinde olacaktır tablo.Daha küçük boşluklar, ancak sistem içinde daha yüksek bir eşik sonuçlar belirtme daha az dayanıklı: herhangi bir nedenle Birleştirme Aracısı çalışmıyorsa, bir abone kimlikleri dışında daha kolay çalıştırabilir.

Kuyruğa alınmış güncelleştirme abonelikleri ile işlem çoğaltma

Kimlik aralıklarını dağıtıcı tarafından yönetilir ve abonelere Dağıtım Aracısı tarafından yayılır.Kimlik değerlerini dağıtıcı adresindeki bir havuzu atanır.Havuz boyutu üzerinde veri türü boyutunu temel alır ve Artım için kullanılan kimlik sütunu.İçeren bir makale eklediğinizde, bir kimlik sütunu yayınına yeni yayın Sihirbazı'nı veya kullanarak sp_addarticle (Transact-sql), için değerleri belirtin:

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

  • The @pub_identity_range parameter, which controls the identity range size allocated to the Publisher.

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

Örneğin, 10000 için belirtebilirsiniz @ pub_identity_range, 1000 için @ identity_range (daha az güncelleştirmeleri abone adresindeki varsayılarak) ve yüzde 80'i için @ eşik.Abone Abone tarafında (80 yüzde 1000) 800 ekledikten sonra yeni bir aralık atanır.Yayımcı adresindeki 8000 ekler sonra Publisher yeni bir aralık atanır.Yeni bir aralığı atanan kimlik aralığı değerleri serisinde olacaktır tablo.Daha küçük boşluklar, ancak sistem içinde daha yüksek bir eşik sonuçlar belirtme daha az dayanıklı: herhangi bir nedenle Dağıtım Aracısı çalışmıyorsa, bir abone kimlikleri dışında daha kolay çalıştırabilir.

El ile kimlik aralık yönetimi için aralıkları atama

El ile kimlik aralık yönetimi belirtirseniz, Yayımcı ve her abone kullanımı farklı kimlik aralıklarını emin olmanız gerekir.Örneğin, bir tablo ile yayımcı adresindeki düşünün bir kimlik sütunu olarak tanımlanan IDENTITY(1,1): kimlik sütunu 1 başlar ve 1 her artırılır saat bir satır eklenir.tablo 5000 Satır Yayımcı tarafında bulunur ve bazı büyüme beklediğiniz tablo 1-10, 000'den fazla uygulama süresince, Yayımcı aralık kullanabilirsiniz.Verilen iki aboneleri, abone a 10, 001–20, 000, ve abone b 20,001-30, 000'den fazla.

Abone anlık görüntü veya başka yollardan başlatıldıktan sonra yürütmek abone başlangıç atamak için dbcc CHECKIDENT kendi kimlik aralık için işaretleyin.Örneğin, a Abone tarafında yaptığınız yürütmek DBCC CHECKIDENT('<TableName>','reseed',10001).Abone b, yaptığınız yürütmek CHECKIDENT('<TableName>','reseed',20001).

Yayımcı ve aboneleri için yeni aralıklar atamak için dbcc CHECKIDENT yürütmek ve reseed için yeni bir değer belirleyin tablo.Yeni aralık atanan belirlemek için herhangi bir şekilde olması gerekir.Örneğin, uygulamanızın aralık kullanın ve dbcc CHECKIDENT kullanarak yeni aralık atamak için bir düğüm olduğunda, algılayan bir mekanizma olabilir.Kullanılacak kimlik değeri aralık dışındaki bir neden olacaksa bir satır eklenemiyor emin olmak için denetim kısıtlamasını da ekleyebilirsiniz.

Bir veritabanı geri yükleme sonrasında işleme kimlik aralıkları

Otomatik kimlik aralık yönetimi kullanıyorsanız, bir abone bir yedek kopyadan geri yüklendiğinde otomatik olarak yeni bir kimlik değerleri aralık ister.Bir Yayımcı bir yedek kopyasından geri yüklenirse, Yayımcı uygun bir aralık atanır emin olmanız gerekir.Mektup birleştirme için çoğaltma, ata kullanarak yeni aralık sp_restoremergeidentityrange (Transact-sql).İşlemsel kopyalama için kullanılmış olan en yüksek değerini belirleme ve sonra küme yeni aralığı için başlangıç noktası.Sonra aşağıdaki yordamı kullanarak yayın veritabanı geri:

  1. Tüm aboneler üzerinde tüm etkinliğini durdurun.

  2. Her yayımlanan içeren tablo için bir kimlik sütunu:

    1. De abonelik veritabanı her Abone tarafında yürütme IDENT_CURRENT('<TableName>').

    2. Tüm aboneleri arasında bulunan en yüksek değeri kaydedin.

    3. De yayın veritabanı Yayımcı tarafında yürütme DBCC CHECKIDENT(<TableName>','reseed',<HighestValueFound+1>).

    4. De yayın veritabanı Yayımcı tarafında yürütme sp_adjustpublisheridentityrange <PublicationName>, <TableName>.

    Not

    Varsa değeri kimlik sütunu azaltma yerine artırmak, en düşük değeri bulundu ve daha sonra bu değer ile reseed kaydı küme.