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: IDENTITY (özellik) (Transact-SQL). Kimlik sütunları birincil anahtarın bir parçası olarak dahil olabileceğinden, yinelenen kimlik sütunlarının değerleri önlemek önemlidir.Çoğaltma topolojisinde, her düğümde kimlik sütunlarının, güncelleştirmeleri birden fazla düğüme sahip çoğaltma topolojisinde kullanmak için , yinelemeler ortaya değil için kimlik değerlerini, farklı aralık kullanmanız gerekir.
Örneğin, aralık 1-100, abone BIR yayımcı atanabilir aralığı 101-200 ve abone B 201-300 aralığı.Satır Yayımcı tarafında eklenir ve kimlik değeri, örneğin, 65, bu değer her abone için yinelenir.Çoğaltma her Abone tarafında 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 artan için değil çoğaltma aracısı ekler neden kimlik sütun değerini.
Çoğaltmayı Kimlik sütunları tüm yayın gerçekleştirir ve sütunları el ile yönetmek veya çoğaltma sağlayarak abonelik türleri, bunları otomatik olarak yönetir.
Not
Kimlik sütun için yayımlanmış ekleme tablo sütun için abone çoğaltıldığında, yakınsama sağladığından, desteklenmiyor.Kimliği değerleri sütun Yayımcı tarafında etkilenen bir tablo için satır fiziksel olarak depolanır siparişteki bağlıdır.Satırları farklı Abone tarafında depolanmış olabilir; bu nedenle, kimlik sütun değeri aynı satırlar için farklı olabilir.
Bir kimlik aralık yönetimi seçeneği belirtme
Çoğaltma, üç kimlik aralık yönetimi seçenekleri sunar:
Otomatik.Birleştirme çoğaltma ve abone güncelleştirme işlem çoğaltma için kullanılır.Yayımcı ve aboneleri için boyut aralıkları belirtmek ve çoğaltma, yeni aralıkları atama otomatik olarak yönetir.Böylece, yalnızca kullanıcının eklediği değer, Abone tarafında artan neden çoğaltma, Abone tarafında kimlik sütun IÇIN NOT REPLICATION seçeneğini ayarlar.Daha fazla bilgi için bkz: Sınırlamaları, kimlik ve Tetikleyicileri NOT ile denetlemek IÇIN çoğaltma.
Not
Abonelerin, yeni aralığı olarak almak için yayımcı ile eşitlemeniz gerekir.Aboneleri kimlik aralıklarını otomatik olarak atanır, çünkü sürekli yeni aralıkları isterse, kimliği aralıklarının tüm tedarik tüketebileceği her abone için olasıdır.
El kitabı.anlık görüntü görüntü görüntüleme ve güncelleştirme, eşler arası işlem çoğaltma abone olmadan işlem çoğaltma için kullanılan veya uygulama kimlik aralıklarını programsal olarak denetlemek gerekir.El ile yönetim belirtirseniz, aralıkları, yayımcı ve her abone için atanmış olan ve ilk aralıkları kullanılıyorsa, yeni bir aralık atanır emin olmalısınız.Çoğaltma, Abone tarafında kimlik sütun IÇIN NOT REPLICATION seçeneğini belirler.
Yok.Bu seçenek yalnızca geriye dönük'ün önceki sürümüyle olan uyumluluğu önerilir SQL Server işlem yayınlar için saklı yordam arabirimden yalnızca kullanılabilir.
Kimlik aralık yönetimi seçeneğini belirtmek için
SQL Server Management Studio: Nasıl Yapılır: Kimlik sütunları (SQL Server Management Studio'yu) yönetme
Çoğaltma Transact-SQL programlama: Nasıl Yapılır: Kimlik sütunları (çoğaltma Transact-SQL programlama) yönetme
Kimlik aralıkları atama
Birleştirme çoğaltma ve işlem çoğaltma aralıkları atamak için farklı yöntemler kullanır; bu yöntem, bu bölümde açıklanmıştır.
Aralıkları, kimlik sütunlarının çoğaltma yapılırken dikkate almanız için iki tür vardır: Yayımcı ve aboneleri için atanan aralıkları ve veri türünün sütundaki aralık. Aşağıdaki tabloda, tipik olarak kimlik sütunlarının kullanılan veri türleri için aralıklar gösterir.Aralık topolojisinde, tüm düğümler arasında kullanılır.Örneğin, kullanıyorsanız smallint 1'bir artış maksimum ekleme sayısı 1 ile başlayan yayımcı için 32.767 ve tüm abonelere ' dir.Ekler sayısını kaydedilip üzerinde bağlıdır kullanılan değerleri boşluklar ve bir eşik değerini kullanılıp kullanılmadığını vardır.Eşikler hakkında daha fazla bilgi için aşağıdaki bölümlerde "Birleştirme çoğaltma" ve "İşlem çoğaltma ile kuyruğa alınmış güncelleştirme abonelikler" konusuna bakın.
Yayımcı kimliği aralık bir ekleme exhausts, ekleme bir üyesi tarafından gerçekleştirilen, bunu otomatik olarak yeni aralık atayabilirsiniz db_owner sabit veritabanı rolü.Ekleme, kullanıcı bu rolü, Günlük Okuyucu Aracısı, Birleştirme Aracısı veya üye olan bir kullanıcı tarafından gerçekleştirilen varsa, db_owner rolünü çalıştırmanızsp_adjustpublisheridentityrange (Transact-SQL). Günlük Okuyucu Aracısı işlem yayınlar için otomatik olarak yeni aralık (sürekli çalışacak şekilde aracı için varsayılandır) tahsis etmek için çalışmalıdır.
Veri türü |
Aralık |
---|---|
tinyint |
Otomatik yönetim 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 |
birleştirme çoğaltma
Kimlik aralık yayımcı tarafından yönetilen ve aboneleri için Birleştirme Aracısı tarafından bulaşan (republishing bir hiyerarşi içinde aralıkları Publisher kök ve republishers tarafından yönetilen).Havuzu konumunda yayımcı kimliği değerler atanır.Yayınına yeni yayın sihirbazını veya kullanarak kimlik sütun içeren bir makale eklediğinizde sp_addmergearticle (Transact-SQL), değerlerini belirtin:
The @identity_range parameter, which controls the identity aralık size initially allocated both to the Yayımcı and to Subscribers with istemci subscriptions.
Not
Önceki sürümlerini çalıştıran abonelere yönelik SQL Server, bu parametre (yerine @ pub_identity_range parameter), ayrıca aboneleri yeniden yayımlama sırasında kimlik aralık boyutunu denetler.
The @pub_identity_range parameter, which controls the identity aralık size for republishing allocated to Subscribers with server subscriptions (required for republishing data).Gerçekte verileri yeniden yayımlayın yoksa bile, tüm abonelere sunucu abonelikler ile yeniden yayımlama için bir aralık alırsınız.
The @threshold parameter, which is used to determine when a new aralık of identities is required for a abonelik to SQL Server Compact 3.5 SP1 or a previous sürüm of SQL Server.
Örneğin, 10000 için belirtebilirsiniz. @ identity_range ve 500000 için**@ pub_identity_range**.Yayımcı ve çalışan tüm abonelere SQL Server 2005 ya da sunucuyla aboneyi içeren bir sonraki bir sürümnü abonelik, birincil 10000 aralık atanır. Abone sunucu abone olan (aynı zamanda belirtmelisiniz republishing abone ile eşitlemeyi aboneleri tarafından kullanılan 500000 birincil aralık atanır. @ identity_range, @ pub_identity_range, and @ Eşiği republishing abone adresindeki yayındaki makaleler için).
Her abone çalışıyor SQL Server 2005 veya sonraki bir sürüm de, ikincil kimlik aralık alır. Ikincil aralığı birincil aralığın boyutunu eşit; birincil aralığı yetersiz kaldığında, ikincil aralığı kullanılır ve Birleştirme Aracısı yeni bir aralık için abone atar.Yeni aralık ikincil aralığı olur ve abone kimlik değerlerini kullanır gibi işlem devam eder.
Abonelerin çalıştırma SQL Server Compact 3.5 SP1 veya önceki sürümleri SQL Server yalnızca birincil aralık; atanmış yeni aralıkları atama tarafından denetlenen @ Eşiği parametresi.Ayrıca, bir republishing abone, yalnızca belirtilen aralık sahip @ identity_range parametre; bu aralığı ve değişiklikleri republishing abone ile eşitlemeyi aboneleri sırasında yerel değişiklikler için kullanmalısınız.Örneğin, 10000 için belirtebilirsiniz. @ pub_identity_range için 500000**@ identity_range** ve yüzde 80 ' için**@ Eşiği**.8000 Yayımcı (80 yüzdesi 10000), Abone tarafında ekler, sonra yeni bir aralık atanır.Yeni bir aralık atandığında, olacak bir aralığa kimlik aralık değerlerini tablo.Daha küçük aralıklar, ancak sistem, daha yüksek bir eşik sonuçlar belirtme daha az hataya dayanıklı şöyledir: herhangi bir nedenle birleştirme Aracı çalıştıramazsanız, bir abone daha kolay bir şekilde dışında bir kimlik çalıştırabilir.
Kuyruğa atılmış güncelleştirme abonelikler ile işlem çoğaltma
Kimlik aralık dağıtımcı tarafından yönetilen ve aboneleri için Dağıtım Aracısı tarafından bulaşan.Kimlik değerlerini havuzu dağıtımcı konumunda atanır.Havuz boyutu, veri türü ve kimlik sütun için kullanılan artım boyutunu temel alır.Yayınına yeni yayın sihirbazını veya kullanarak kimlik sütun içeren bir makale eklediğinizde sp_addarticle (Transact-SQL), değerlerini belirtin:
The @identity_range parameter, which controls the identity aralık size initially allocated to all Subscribers.
The @pub_identity_range parameter, which controls the identity aralık size allocated to the Yayımcı.
The @threshold parameter, which is used to determine when a new aralık of identities is required for a abonelik.
Örneğin, 10000 için belirtebilirsiniz. @ pub_identity_range, 1000 for @ identity_range (daha az sayıda güncelleştirme abone varsayılarak) ve için yüzde 80**@ Eşiği**.800 Bir abone bir Abone tarafında (1000 yüzde 80,) ekler, sonra yeni bir aralık atanır.Yayımcı, yayımcı adresindeki 8000 ekler sonra yeni bir aralık atanır.Yeni bir aralık atandığında, olacak bir aralığa kimlik aralık değerlerini tablo.Daha küçük aralıklar, ancak sistem, daha yüksek bir eşik sonuçlar belirtme daha az hataya dayanıklı şöyledir: herhangi bir nedenle dağıtım Aracı çalıştıramazsanız, bir abone daha kolay bir şekilde dışında bir kimlik ç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 olmalıdır.Örneğin, bir tablo sırasında yayımcı kimlik sütun olarak tanımlanan ile IDENTITY(1,1): kimlik sütun 1'den başlar ve 1 ile bir satırı her eklendiğinde artırılır. Yayımcı tabloya 5.000 satırlar vardır ve bazı büyüme tabloda uygulama ömrünü beklediğiniz yayımcı aralık 1-10, 000 kullanabilirsiniz.Iki aboneleri, abone A, 10, 000 001–20, kullanabilir ve abone B 20,001-30, 000 kullanabilirsiniz.
Sonra bir abone bir anlık görüntü veya başka bir araçlarla, yürütmek DBCC abone, kimlik aralığının başlangıç noktası atamak için CHECKIDENT başlatıldı.Örneğin, BIR Abone tarafında yaptığınız yürütmek DBCC CHECKIDENT('<TableName>','reseed',10001). Abone B'DE yaptığınız yürütmek CHECKIDENT('<TableName>','reseed',20001).
Yayımcının veya aboneleri için yeni aralıklar atamak için DBCC CHECKIDENT yürütmek ve tablo reseed yeni bir değer belirtin.Yeni bir aralık atanan belirlemek için birkaç yol olmalıdır.Örneğin, uygulamanız, düğüm, aralığı ve DBCC CHECKIDENT kullanarak yeni bir aralık atamak olduğunda, algılayan bir düzenek olabilir.Bir işyeri dışı kullanılacak kimlik değeri aralık neden olur, satır eklenemiyor emin olmak için denetim kısıtlamasını de 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 yedekten geri yüklendiğinde otomatik olarak yeni değer aralık boyunca kimlik ister.Yayımcı bir yedek kopyasından geri yüklenirse, yayımcı uygun bir aralık atanır emin olmalısınız.Birleştirme çoğaltma için yeni bir aralık kullanma atayın. sp_restoremergeidentityrange (Transact-SQL). Işlem çoğaltma için kullanılan en yüksek değerini belirlemek ve küme yeni aralığı için başlangıç noktası.yayın veritabanı geri sonra aşağıdaki yordamı kullanın:
Tüm etkinliklerin tüm abonelere durdurun.
Yayımlanan her tablo için kimlik sütun içerir:
Her bir abonelik sırasında Abonelik veritabanındaki yürütmek IDENT_CURRENT('<TableName>').
Tüm abonelere üzerinde bulunan en yüksek değeri kaydedin.
Içinde yayın veritabanı Yayımcı tarafında yürütmek DBCC CHECKIDENT(<TableName>','reseed',<HighestValueFound+1>).
Yayımcı yayın veritabanında çalıştırın. sp_adjustpublisheridentityrange <PublicationName>, <TableName>.
Not
Kimlik sütun değeri ayarlanırsa, bu azaltma yerine artış, kayıt için en düşük değer buldu ve sonra bu değerle reseed.