Aracılığıyla paylaş


Kimlik sütunları çoğaltma

IDENTITY özelliği bir sütun atarken Microsoft  SQL Serverotomatik olarak ardışık sayılar için kimlik sütunu içeren tabloya eklenen yeni satırlar oluşturur. Daha fazla bilgi için, bkz. IDENTITY (Özellik) (Transact-SQL). Kimlik sütunları birincil anahtar bir parçası olarak dahil olabilir, kimlik sütunlarının yinelenen değerleri önlemek önemlidir. Çoğaltma topolojisini her düğüm bir çoğaltma topolojisi güncellemeleri daha fazla düğüme sahip kimlik sütunları kullanmak için yineleme gerçekleşmez böylece kimlik değerleri, farklı bir dizi kullanmanız gerekir.

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

Çoğaltma kimlik sütunları arasında tüm yayını işleme ve abonelik türleri, sütunları el ile yönetmek veya çoğaltma var sağlayan otomatik olarak yönetebilirsiniz.

[!NOT]

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

Bir kimlik aralığı yönetimi seçeneği belirtme

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

  • Otomatik. Abone güncelleştirme ile işlem çoğaltma ve birleştirme çoğaltması kullanılır. Publisher ve aboneleri için boyut aralıkları belirtin ve çoğaltma yeni aralıkları atama otomatik olarak yönetir. Yalnızca kullanıcının eklediği abone adresindeki 'er değerine neden çoğaltma abone, kimlik sütunu not for REPLICATION seçeneği ayarlar.

    [!NOT]

    Abone yayımcı ile yeni aralıkları almaya eşitlemeniz gerekir. Çünkü aboneler kimlik aralıklarını otomatik olarak atanır, art arda yeni aralıkları isterse kimlik aralıklarını tüm tedarik egzoz herhangi bir abone için mümkündür.

  • El. Anlık görüntü ve işlem çoğaltma abone, eşler arası işlem çoğaltma, güncelleştirmeler olmadan kullanılan veya uygulamanızın programlı kimlik aralıklarını kontrol gerekir. Manuel yönetimi belirtirseniz, aralıkları yayımcı ve her abone için atanır ve ilk aralıkları kullanılırsa yeni aralıklarını atanan emin olmalısınız. Çoğaltma abone adresindeki kimlik sütunu not for REPLICATION seçeneği ayarlar.

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

Kimlik aralık Yönetimi seçeneğini belirtmek için bkz: Kimlik sütunları 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öntemleri bu bölümde açıklanmıştır.

Kimlik sütunları çoğaltılıyor dikkate almak için aralığı iki türü vardır: Publisher ve aboneleri için atanan aralıkları ve veri aralığı sütununa yazın. Aralıkları için genelde kullanılan kimlik sütun veri türleri aşağıdaki tabloda gösterilmiştir. Aralığı, tüm düğümler topolojisi arasında kullanılır. Örneğin, eğer 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 üzerinde bağlıdır kullanılan değerlerle 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ı kimlik yelpazesini sonra INSERT exhausts, Insert bir üyesi tarafından gerçekleştirilen bu otomatik olarak yeni bir aralığı atayabilirsiniz db_owner veritabanı rolü. Eğer eklemek o rolü, Log Reader Agent, Birleştirme Aracısı veya bir üyesi olan bir kullanıcı bir kullanıcı tarafından gerçekleştirilen ve db_owner rolü çalıştırmak gerekir sp_adjustpublisheridentityrange (Transact-sql). Işlem yayınlar için günlük Okuma Aracısı (aracısının sürekli çalıştırmak için varsayılandır) yeni bir aralığı 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

[!NOT]

Çoklu tablolarda kullanılabilir veya bu çağrılabilir uygulamalardan herhangi bir tabloya başvuran olmadan otomatik olarak artan bir sayı oluşturmak için bkz: Sıra numaraları.

Çoğaltma Birleştir

Kimlik aralıkları yayımcı tarafından yönetilir ve Birleştirme Aracısı tarafından abonelerine yayılma (republishing bir hiyerarşi içinde aralıkları kök Publisher ve fırsatımız tarafından yönetilir). Bir havuz yayımcı kimlik değerleri atanır. Yeni yayın sihirbazını veya yayını kimlik sütunu olan bir makale eklerken yürütmesp_addmergearticle (Transact-sql), değerlerini belirtin:

  • @ İdentity_range parametresi, Publisher ve aboneleri istemci aboneliklerle başlangıçta ayrılan kimlik aralığı boyutunu denetler.

    [!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, kimlik aralığı boyutunu denetler.

  • @ Pub_identity_range parametresi, hangi yeniden yayınlama (verileri yeniden yayınlama için gerekli) sunucu abonelikleri ile abonelerine tahsis için kimlik aralığı boyutunu denetler. Bile onlar gerçekte verileri yeniden yayınlamanız yok sunucu abonelikleri ile tüm aboneleri yeniden yayınlama için bir dizi alırsınız.

  • @ Eşik parametresi, ne zaman yeni bir kimlikleri aralığı abonelik için gerekli olduğunu belirlemek için kullanılan SQL Server Compactya da önceki bir sürümünü 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 2005veya sonraki bir sürümü, sunucu abonelik ile abone dahil 10000 birincil aralığı atanır. Sunucu abonelik ile abone de 500000 republishing Abone ile eşitlemek aboneleri tarafından kullanılan birincil aralığı atanır (ayrıca belirtmeniz gerekir @ identity_range, @ pub_identity_range, ve @ eşik republishing Abone adresindeki yayın makaleler için).

Çalışan her abone SQL Server 2005veya sonraki bir sürümünü de ikincil kimlik aralığı alır. İkincil birincil aralığın boyutunu eşit olduğu; birincil aralıkta kaldığında, ikincil aralığı kullanılır ve Birleştirme Aracısı abone için yeni bir aralığı atar. Yeni ikincil aralığı olur ve abone kimlik değerleri kullanır, işlem devam eder.

Çalıştıran aboneleri SQL Server Compactya da önceki sürümlerini SQL Serveryalnızca birincil aralığı; atanır yeni aralıkları atama tarafından denetlenen @ eşik parametresi. Ayrıca, yalnızca belirtilen aralığı republishing Abone olan @ identity_range parametresi; Bu Aralık değişiklikler ile republishing Abone eşitlemek aboneleri ve Yerel değişiklikler için kullanmalısınız. Örneğin, 10000 için belirtebilirsiniz @ pub_identity_range, 500000 için @ identity_range ve 80 yüzde @ eşik. Sonra 8000 Abone tarafında (10000 yüzde 80), Publisher uygulamasının eklediği yeni bir Aralık atanır. Yeni bir aralığı atandığında, kimlik Aralık değerleri tabloda bir boşluk olacak. Yüksek eşik küçük boşluklar oluşur, ama daha az hataya dayanıklı sistem belirtme: Birleştirme Aracısı nedense çalışmazsa, abone kimlikleri üzerinden daha kolay çalıştırabilir.

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

Kimlik aralıkları dağıtıcısı tarafından yönetilir ve abonelere Dağıtım Aracısı tarafından yayılma. At dağıtımcı havuzundan kimlik değerleri atanır. Havuz boyutu veri türü ve kimlik sütunu için kullanılan Artım boyutunu temel alır. Yeni yayın sihirbazını veya yayını kimlik sütunu olan bir makale eklerken eşdeğerdirsp_addarticle (Transact-sql), değerlerini belirtin:

  • @ İdentity_range parametresi, tüm aboneleri başlangıçta ayrılan kimlik aralığı boyutunu denetler.

  • @ Pub_identity_range parametresi, yayımcı için ayrılan kimlik aralığı boyutunu denetler.

  • @ Eşik parametresi, yeni bir kimlikleri aralığı abonelik için gerekli olduğunda belirlemek için kullanılır.

Örneğin, 10000 için belirtebilirsiniz @ pub_identity_range, 1000 @ identity_range (daha az güncellemeleri abone varsayarak) ve 80 yüzde @ eşik. Sonra 800 (80 yüzde 1000), Abone tarafında abone ekler yeni bir Aralık atanır. Yayımcı adresindeki 8000 ekler sonra Publisher yeni bir Aralık atanır. Yeni bir aralığı atandığında, kimlik Aralık değerleri tabloda bir boşluk olacak. Yüksek eşik küçük boşluklar oluşur, ama daha az hataya dayanıklı sistem belirtme: nedense dağıtım aracı çalıştıramıyorsanız, abone kimlikleri üzerinden kolayca çalıştırabilir.

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

El ile kimlik aralığı yönetimi belirtirseniz, Publisher ve her abone kullanımı farklı kimlik aralıklarını sağlamalıdır. Örneğin, olarak tanımlanan kimlik sütunu olan bir tablo yayımcı düşünün IDENTITY(1,1): kimlik sütunu 1 başlar ve 1 satır eklenir her zaman artırılır. 5000 Satır yayımcı tablo vardır ve bazı büyüme tabloda uygulama süresince beklediğiniz, Publisher aralığı 1-10, 000 kullanabilirsiniz. Verilen iki aboneleri, abone a 10, 001–20, 000, kullanabilir ve abone b 20,001-30, 000 kullanabilirsiniz.

Abone anlık veya başka yollarla başlatıldıktan sonra abone kimlik aralığının başlangıç noktası atamak için dbcc CHECKIDENT yürütün. Örneğin, a abone adresindeki yürütülür DBCC CHECKIDENT('<TableName>','reseed',10001). Abone b, sen idam CHECKIDENT('<TableName>','reseed',20001).

Yayımcının veya abone için yeni aralıklar atamak için dbcc CHECKIDENT yürütmek ve tablo reseed için yeni bir değer belirtin. Ne zaman yeni bir aralığı atanmalıdır belirlemek için bir yol olmalıdır. Örneğin, uygulamanızın bir düğüm hakkında onun kadar kullanın ve dbcc CHECKIDENT kullanarak yeni bir aralığı atamak olduğunda, algılayan bir mekanizma olabilir. Ayrıca satır olamaz emin olmak için Denetim kısıtlamasını ekleyebilirsiniz kullanılacak kimlik değeri aralığı yetersiz neden eğer eklendi.

İşleme kimlik aralıklarını sonra bir veritabanı geri yükleme

Bir abone bir yedek kopyadan geri yüklendiğinde otomatik kimlik aralığı yönetimi, kullanıyorsanız, otomatik olarak yeni bir kimlik değerleri aralığı ister. Publisher bir yedek kopyasından geri yüklenirse, yayımcı uygun bir Aralık atanır emin olmanız gerekir. Birleştirme çoğaltması için yeni bir aralık kullanma ATA sp_restoremergeidentityrange (Transact-sql). Işlem çoğaltma için kullanılan ve sonra yeni aralığı için başlangıç noktasını ayarlama en yüksek değerini belirler. Yayın veritabanı geri sonra aşağıdaki yordamı kullanın:

  1. Tüm aboneleri tüm etkinliğini durdurun.

  2. Yayımlanan her tablo için kimlik sütunu içeren:

    1. Her abone adresindeki abonelik veritabanında IDENT_CURRENT('<TableName>').

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

    3. Yayımcı adresindeki yayın veritabanı idam DBCC CHECKIDENT(<TableName>','reseed',<HighestValueFound+1>).

    4. Yayımcı adresindeki yayın veritabanı idam sp_adjustpublisheridentityrange <PublicationName>, <TableName>.

    [!NOT]

    Kimlik sütunu değeri ayarlanırsa, azaltma yerine artış, kayıt için en düşük değeri bulundu ve bu değer ile reseed.

Ayrıca bkz.

Başvuru

Yedekleme (Transact-sql)

DBCC CHECKIDENT (Transact-SQL)

IDENT_CURRENT (Transact-sql)

IDENTITY (Özellik) (Transact-SQL)

sp_adjustpublisheridentityrange (Transact-sql)