Aracılığıyla paylaş


Birleştirme çoğaltması nasıl algılıyor ve çakışmaları çözümler.

Birleştirme çoğaltma otonom veri değişiklikleri yapmak birden çok düğüme olanak sağlar, bu nedenle, adresindeki bir değişiklik yaptıysanız, durumları kayıtlı bir düğüm başka bir düğümdeki aynı verilerde yapılan bir değişikliği ile çakışabilir.Birleştirme Aracısı, diğer durumlarda, bir kısıtlama ihlali gibi bir hatayla karşılaşır ve belirli bir düğümde, başka bir düğüme yapılan bir değişikliği yaymak edemiyor.Bu konu, türleri anlatılmaktadır nasıl çakışması algıladı ve çözümlenen, çakışıyor ve bu etkiler algılaması ve Çözümlemesi'ni etmenlerin.

Algılama ve çakışmaları çözme

Birleştirme Aracısı kullanarak çakışması algıladı. lineage sütunMSmerge_contents sistem tablo; bir makale için bir sütun düzeyinde izleme etkinseCOLV1 sütun da kullanılır.Bu sütunlar meta veriler hakkında bir satır veya sütun eklendiğinde veya güncelleştirildiğinde ve hakkında hangi düğümlerin bir birleştirme çoğaltma topolojisinde satır veya sütun yapılan değişiklikleri içerir.sistem saklı yordamı kullanabilirsiniz. sp_showrowreplicainfo (Transact-SQL) Bu meta veriler görüntülemek için .

Birleştirme Aracısı değişiklikler eşitleme sırasında uygulanacak sıralar gibi bağlı olan her satır, yayımcı ve abonelik sırasında için meta veriler karşılaştırır.Birleştirme Aracısı Bu meta veriler, satır veya sütun sırasında olası bir çakışmayı gösterir topolojide birden fazla düğüm değişip değişmediğini belirlemek için kullanır.Çakışma algılandı Birleştirme Aracısı çakışma olan makale belirtilen çakışma giderici başlatır sonra çözümleyici çakışma kazanan belirlemek için kullanır.Kazanan satır, yayımcı ve abone uygulanır ve kaybeden satır verilerden bir çakışma tablosuna yazılır.

Etkileşimli bir çakışma çözümleme makale belirlememiş olmanız durumunda Birleştirme Aracısı tarafından çakışmaları otomatik olarak ve hemen çözümlenir.Daha fazla bilgi için bkz: Etkileşimli bir çakışma çözümleme. Birleştirme çoğaltma Conflict Viewer'ı kullanarak bir çakışmanın kazanan satırı el ile değiştirirseniz, sonraki eşitlemede Birleştirme Aracısı kazanan satır sürüm kaybeden sunucuya uygulanır.

Günlüğe kaydetme çakışması çözülmüş...

Birleştirme Aracısı göre bir çakışma giderici'de mantığı için çakışmanın giderilip sonra tipine göre çakışma, çakışma verileri günlüğe kaydeder:

  • UPDATE ve INSERT çakışmaları, bu satırın kaybeden sürüm Çakışma için yazar tablo için makalesine, biçiminde adlandırılır conflict_<PublicationName>_<ArticleName>. Genel çakışma bilgileri, çakışmanın türü gibi yazılır tablo MSmerge_conflicts_info.

  • DELETE çakışmalar için bu satıra kaybeden sürüm yazar MSmerge_conflicts_info tablo.Bir silme için bir güncelleştirme karşı kaybettiğinde, veri yok kaybeden satırının (bir silme olduğundan), böylece, hiçbir şey yazılır conflict_<PublicationName>_<ArticleName>.

Çakışma tablolarının her makale yayın veritabanı, abonelik veritabanı veya her iki (varsayılan) oluşturulan değerine bağlı olarak belirtilen @ conflict_logging parametresisp_addmergepublication.Her çakışmanın tablo, eklenmesiyle temel makaledeki aynı yapıya sahip origin_datasource_id sütun.Birleştirme Aracısı verileri çakışma siler tablo çakışma saklama dönemi yayın kullanılarak belirtilen tarihten ise @ conflict_retention parametresisp_addmergepublication (14 gün varsayılandır).

Çoğaltma Replication Conflict Viewer sağlar ve depolanan yordamlar)sp_helpmergearticleconflicts, sp_helpmergeconflictrows, and sp_helpmergedeleteconflictrows) Çakışma verileri görüntülemek için .Daha fazla bilgi için bkz: Nasıl Yapılır: Görüntüleyin ve birleştirme yayınları (SQL Server Management Studio'yu) veri Çakışmalarını Çöz ve Nasıl Yapılır: Birleştirme yayınları (çoğaltma Transact-SQL programlama) için çakışma bilgilerini görüntüleme.

Bu etkiliyor çakışma çözümleme faktörleri

Nasıl bir çakışma Birleştirme Aracısı giderir, algıladı etkileyen iki etmen vardır:

  • Abonelik türü: istemci veya sunucu (çekme temelli abonelik ya da bir gönderme temelli abonelik abonelik olmasına çelişki çözümü etkilemez).

  • Kullanılan çakışma izleme türü: satır düzey, sütun düzey veya mantıksal record-düzey.

Abonelik türleri

When you create a subscription, in addition to specifying whether it is a push or pull subscription, you specify whether it is a client or server subscription; after a subscription is created, the type cannot be changed (in previous versions of Microsoft SQL Server, client and server subscriptions were referred to, respectively, as local and global subscriptions).

Sunucu aboneliği (99.99 için 0.00 tarafından) atanan öncelik değeri olan BIR abonelik adı verilir; yayımcı Öncelik değerini kullanarak bir abonelik istemci aboneliği olarak adlandırılır.Ayrıca, sunucu abonelikler ile aboneleri, diğer aboneleri veri yayımlayabilirsiniz.Aşağıdaki tabloda, ana farkları özetler ve her abone türünü kullanır.

Tür

Öncelik değeri

Kullanılan

Sunucu

Kullanıcı tarafından atanan

Farklı önceliklere sahip farklı aboneleri istediğinizde.

Istemci

0,00, ancak veri değişiklikleri öncelik değeri yayımcı sonra eşitlemeyi varsayalım.

Aynı önceliğe sahip için tüm abonelere ve ilk abone çakışmayı kazanmak için yayımcı ile birleştirmek istediğinizde.

Bir satır, bir istemcinin, değiştirdiyseniz abonelik, değişikliği kadar hiçbir öncelik atanan abonelik eşitlenir.Eşitleme sırasında abone değişikliklerden yayımcı öncelik atanır ve önceliği, sonraki eşitlemeler korur.Yayımcı, bir anlamda, değişikliğin sahipliğini varsayar.Bu davranış, ilk abone diğer aboneleri için belirli bir satırın sonraki çakışıyor kazanmak için yayımcı eşitlemeye izin verir veya sütun.

Sunucu aboneliği bir satırda değiştirdiğinizde, abonelik önceliği değiştirmek için meta veriler depolanır.Bu değişiklik diğer abonelere en birleştirmesi sırasında bu öncelik değeri ile değiştirilen satır hareket eder.Bu, daha yüksek bir öncelik abonelik tarafından yapılan bir değişikliği daha düşük bir önceliğe sahip bir abonelik tarafından yapılan bir sonraki değişiklik kaybolur değil emin olmasını sağlar.

Bir abonelik, Yayımcı'den daha yüksek bir açık bir öncelik değeri bulunamaz.En üst düzey yayımcı birleştirme çoğaltma topolojisinde, bir ııswebdirectory 100,00 YTL açık bir öncelik değeri her zaman vardır.Tüm abonelikler bu yayın için bu değer'değerinden daha düşük bir öncelik değeri olması gerekir.Republishing topolojisinde:

  • Abone verileri yeniden yayımlamak, aboneliğin yayımcı abone yukarıdaki'den küçük bir öncelik değeri olan sunucu aboneliği olması gerekir.

  • Yeniden abone veri yayımlama değil, (yaprak-olduğundan düzey republishing ağacının), istemci bir abonelik için abonelik olması gerekir.

Sunucu abonelikler ve öncelikler hakkında daha fazla bilgi için bkz: Birleştirme çakışma çözümleme örneği üzerinde abonelik tabanlı türü ve atanan öncelikleri.

Gecikmiş bir çakışma Uyarısı

Gecikmiş bir çakışma bildirim, farklı bir çakışma önceliklere sahip sunucu aboneliklerle oluşabilir.Olmayan çakışan değişiklikler, yayımcı ve bir daha yüksek öncelikli abone yayımcı ile eşitlerken, çakışan değişiklikler daha düşük öncelikli abone arasında değiştirilir aşağıdaki senaryoyu düşünün:

  1. Yayımcı, LowPrioritySub adlı bir düşük öncelikli abone, değişiklikleri çakışma olmadan çeşitli eşitlemeler üzerinden exchange ve.

  2. HighPrioritySub, adlı BIR daha yüksek öncelikli abone, yayımcı ile bazı saat eşitlenecek ve değişiklik LowPrioritySub abone yapıldı aynı satır yaptı.

  3. HighPrioritySub abone yayımcı ile eşitler ve onu LowPrioritySub abone daha yüksek bir önceliğe sahip olduğu değişiklikleri LowPrioritySub abone arasındaki çakışmaları kazanır.Yayımcı artık HighPrioritySub abone tarafından yapılan değişiklikleri de içerir.

  4. LowPrioritySub abone yayımcı ile birleştirir ve HighPrioritySub abone ile'çakışma nedeniyle çok sayıda değişiklik yükler.

Düşük öncelikli abone çakışma losers şimdi, aynı satır için bir değişiklik yaptı, bu durum soruna neden olan duruma gelebilir.Bu tüm bu abonelik tarafından yapılan değişikliklerin kaybına neden olabilir.Aksi halde iş mantığı belirlemesi nedeniyle sürece tüm abonelerin, aynı önceliğe sahip olduğunuzdan emin olmak için bu sorunun olası BIR çözüm olan.

Izleme düzey

Bir veri değişikliği, bir çakışma olup olmadığına niteleyen bir makale için ayarladığınız çakışma izleme türünü bağlıdır: satır düzey, sütun düzey veya mantıksal record-düzey. Daha fazla bilgi için mantıksal kayıt - düzeyinde izleme, bkz: Algılama ve mantıksal kayıtları, çakışmaları çözme.

Çakışmaları en satırı, tanınan düzey, aynı sütuna yapılan değişiklikler olup olmadığını karşılık gelen satırlar için yapılan değişiklik, çakışma nitelendirilmiştir.Örneğin, Yayımcı satır Adres sütununda bir değişiklik ve bir ikinci telefon numarası sütun ilgili abone satırı için değişiklik varsayalım (aynı tablo).Satır-CVE-2006-ile düzey yapılan değişiklikler aynı satıra çünkü izleme, bir çakışma algılandı.Sütun-CVE-2006-ile düzey aynı satırın farklı sütunlarında değişiklikleri yapıldı, çünkü izleme, çakışma, algılanır.

Satır düzey ve sütun düzeyinde izleme için çakışmanın çözümlenmesi aynıdır: veri tüm satırın çakışma kazanan verileri tarafından yazılır (için mantıksal kayıt - düzeyinde izleme, çözünürlüğüne bağlıdır makale özelliklogical_record_level_conflict_resolution).

Uygulama mantığı, genellikle kullanmak için hangi izleme seçeneğini belirleyin.Genellikle bir müşteri verileri güncelleştiriyorsanız, adres ve telefon numarası gibi aynı anda satır-CVE-2006-girilen düzey izleme seçmiş.Sütun-CVE-2006-düzey izleme seçilen bu durumda, müşteri adresi tek bir konumda ve başka bir konumda müşteri telefon numarası için bir değişiklik çakışma algılanmadı: Veri Eşitleme birleştirilmiş ve hata eksik. Diğer durumlarda farklı sitelerde sütunları tek tek güncelleştirme, en mantıklı seçimi olabilir.Örneğin, iki site farklı türde geliri düzey ve toplam dolar kredi kartı Satınalmalar miktarı gibi bir müşteri, istatistiksel bilgiler erişimi olabilir.Sütun-CVE-2006-seçme düzey izlemeyi, her iki site istatistik veriler için farklı sütunlar gereksiz çakışmaları oluşturmadan girebileceğinizi sağlar.

Not

Uygulamanızın sütun düzeyinde izleme gerektirmez, çünkü satır düzeyinde izleme (varsayılan) kullanmanız önerilir, genellikle sonuçlar daha iyi eşitleme performans.Satır izleme kullanılırsa, temel tablo, en çok 1.024 sütunlar içerebilir, ancak en çok 246 sütunları yayımlanır şekilde sütunları makale filtre gerekir.Temel tablo, sütun izleme kullanılıyorsa, en çok 246 sütunları ekleyebilirsiniz.

Çakışma türleri

Çakışmaları çoğu ilgili güncelleştirmelerine (güncelleştirme sırasında güncelleştirme veya silme işlemi başka bir düğümdeki bir düğüm çakışıyor), ancak diğer çakışma türleri vardır.Her tür bir çakışma bu bölümde açıklanan karşıya yükleme aşaması veya birleştirme işleminin yükleme aşaması sırasında oluşabilir.Işlem karşıya değişiklikler ilk mutabakat belirli bir birleştirme oturumda gerçekleştirilir ve boyunca Birleştirme Aracısı değişiklikleri abone yayımcı kadar gelen çoğaltır aşama'dur.Bu işlem sırasında algılanan çakışmaları çakışmaları karşıya olarak anılır.Karşıdan yükleme işlemi değişiklikler için abone yayımcıdan taşıma içerir ve karşıya yükleme işlendikten sonra oluşur.Çakışmaları işleminin bu aşamasında çakışmaları karşıdan yükleme olarak anılır.

Çakışma türleri hakkında daha fazla bilgi için bkz: MSmerge_conflicts_info (Transact-SQL), özellikle conflict_type and reason_code sütunlar.

Güncelleştirme güncelleştirme çakışması

Birleştirme Aracısı, bir düğümde çakışıyor, başka bir düğümdeki aynı satıra başka bir güncelleştirme sırasında bir güncelleştirme, bir satır (veya sütun veya mantıksal kaydı) için güncelleştirme güncelleştirme çakışması algıladı.Varsayılan çözümleyici davranışını kazanan satır sürüm kaybeden düğüme gönderip kaybeden satır sürüm makale çakışma ile oturum bu durumda olan tablo.

Güncelleştirme ve silme çakışması

Birleştirme Aracısı ile bir silme sırasında başka bir düğüme veri güncelleştirme çakışıyor güncelleştirme ve silme çakışması algılar.Bu durumda Birleştirme Aracısı satır güncelleştirir; Birleştirme Aracısı hedef konumunda satır arar, bu silindiğinden ancak, bu satır bulunamıyor.Kazanan satır güncelleştirilen düğümü, kaybeden düğümdeki silme atılır ve Birleştirme Aracısı yeni güncelleştirilmiş satır için çakışma kaybeden gönderir.Birleştirme Aracısı satıra kaybeden sürüm hakkında bilgi günlükleri MSmerge_conflicts_info tablo.

Başarısız Değiştir çakışma

Birleştirme Aracısı, belirli bir değişiklik uygulayamazsınız zaman bu çakışmaları yükseltir.Bu, genellikle bir kısıtlama tanımlarındaki arasındaki fark yayımcı ve abone, kullanımı kısıtlama NOT FOR çoğaltma (NFR) özellik nedeniyle oluşur.Örnekler:

  • Bir yabancı anahtar çakışması sırasında abone Abone tarafında kısıtlama NFR işaretlenmemiş bağlandığınızda oluşabilir.

  • Yayımcı ve aboneleri arasında kısıtlamaları ve kısıtlamalar farklılıklar NFR işaretlenmez.

  • Bağımlı nesnelerin en abone olarak kullanım dışı kalması.Örneğin, üzerinde ancak bir görünüm değil tablo yayımlarsanız, bağımlı olduğu, görüntülemek, üzerinden abone görünümünde, ekleme girişiminde bir hata oluşacaktır.

  • Birincil anahtar ve yabancı anahtar kısıtlamalarını eşleşen bir yayın için filtre uygulama mantığı katılın.Çakışmaları ortaya çıkabilir, SQL Server ilişkisel altyapı kısıtlama kutlamak çalışır, ancak birleştirmek Aracısı makaleleri arasında birleştirmek filtresi tanımını honoring. Birleştirme Aracısı hedef düğüm değişiminde Tablo düzey kısıtlamaları nedeniyle, bir çakışma; uygulayamıyor.

  • Kimlik sütunları için makale tanımlanır ve otomatik kimlik yönetimi kullanılmaz çakışmaları benzersiz dizin veya benzersiz (unique) sınırlaması ihlali veya birincil anahtar ihlali nedeniyle oluşabilir.Bu, iki aboneleri için yeni eklenen bir satırın kimlik değeri kullanmak için bir sorun olabilir.Kimlik aralık yönetimi hakkında daha fazla bilgi için bkz: Kimlik sütunları çoğaltılıyor.

  • Hedef tabloda bir satır ekleme arasında birleştirme Aracısı önleme tetikleyicisi mantığı çakışmaları nedeniyle.Abone tarafında tanımlı bir güncelleştirme tetikleyicisi; tetikleyiciyi NFR işaretlenmiş ve bir ROLLBACK mantığını içerir.Tetikleyici, bir hata oluşursa, bir hareketin hangi birleştirme başarısız bir algılama aracı sonuçlar çakışma değiştirme ROLLBACK verir.