Aracılığıyla paylaş


Birleştirme çoğaltması nasıl algıladığı ve çakışmaları giderir

Birleştirme çoğaltma birden fazla düğümün tek bir düğüme yapılan bir değişikliğin çakışabilir durumlarda mevcut özerk veri değişiklikleri yapmanıza izin verir başka bir düğümdeki aynı veri için yapılan bir değişiklik ile.Diğer durumlarda Birleştirme Aracısı bir kısıtlama ihlali gibi hatayla karşılaşması ve belirli bir düğümden başka bir düğüme yapılan bir değişiklik doldurulamıyor.Bu konuda türlerini açıklar çakışıyor, çakışmaları nasıl algıladığını ve çözülmüş ve bu etkiler algılama ve çözümlemeyi Etkenler.

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

Birleştirme Aracısı kullanarak çakışmalarını algılayan lineage sütunu MSmerge_contents sistem tablo; sütun -düzey izleme etkin bir makale için COLV1 sütun da kullanılır.Ne zaman bir satır veya sütun eklendiğinde veya güncelleştirildiğinde ve hakkında hangi düğümlerin bir birleştirme meta veriler bu sütunları içeren çoğaltma topolojisi bir satır veya sütunda yapılan değişiklikler.Kullanabileceğiniz sistem saklı yordamı sp_showrowreplicainfo (Transact-sql) görüntüleme bu meta veriler.

Birleştirme Aracısı eşitleme sırasında uygulanacak değişiklikleri numaralandırır gibi Yayımcı ve abone adresindeki her satır için meta veriler karşılaştırır.Birleştirme Aracısı bu meta veriler, satır veya sütun olası bir çakışmayı gösterir topolojide birden fazla düğüm at değişip değişmediğini belirlemek için kullanır.Bir çakışma algılandığında sonra Birleştirme Aracısı çakışma olan makale için belirtilen çakışma giderici başlatır ve çözümleyici çakışmayı kazananı belirlemek için kullanır.Değiştirilmeyen satır Yayımcı ve abone uygulanır ve çakışma kaybeden satırındaki veriler yazılır tablo.

Makale etkileşimli çakışma çözünürlüğü seçmiş olduğunuz sürece çakışmaları otomatik olarak ve hemen Birleştirme Aracısı tarafından çözümlenir.Daha fazla bilgi için bkz: Etkileşimli çakışma çözünürlüğü.Değiştirilmeyen satır birleştirme kullanarak bir çakışma için el ile değiştirmek, çoğaltma Conflict Viewer Birleştirme Aracısı uygulanan satır sürüm kazanan kaybeden sunucuya sonraki eşitleme sırasında.

Günlük çakışmaları çözülmüş

Birleştirme Aracısı çakışma mantığı, çözümlediği sonra çakışma giderici, çakışma veri çakışma tipine göre günlüğe kaydeder:

  • update ve INSERT çakışmalar için onu kaybeden sürüm satırın çakışma Yazar tablo makalede, hangi adlı formda conflict_<PublicationName>_<ArticleName>.Çakışma, türü gibi genel çakışma bilgisi yazılır tablo MSmerge_conflicts_info.

  • Satır için kaybeden sürüm silme çakışmaları için onu Yazar MSmerge_conflicts_info tablo.Delete karşı bir güncelleştirme kaybettiğinde veri yok kaybeden satır (delete olduğu için), böylece hiçbir şey yazılan conflict_<PublicationName>_<ArticleName>.

yayın veritabanı abonelik veritabanı veya her ikisi (varsayılan) her makale için çakışma tabloları oluşturulur, değerine bağlı olarak belirtilen @ conflict_logging parametresi sp_addmergepublication.Her çakışma tablo temel, ve buna ek olarak ile makale olarak aynı yapıya sahip origin_datasource_id sütun.Birleştirme Aracısı çakışma verileri siler tablo kullanarak belirtilen yayın için çakışma saklama dönemi sonunda ise @ conflict_retention parametresi sp_addmergepublication (14 gün varsayılandır).

Çoğaltma, Çoğaltma Çakışması Görüntüleyicisi ve saklı yordamlar sağlar (sp_helpmergearticleconflicts, sp_helpmergeconflictrows, ve sp_helpmergedeleteconflictrows) çakışma veri 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ı çözmek 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 etkiler çakışma çözünürlüğü Etkenler

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

  • Abonelik türü: istemci veya sunucu (bir istek temelli abonelik abonelik olup olmadığını veya gönderme temelli abonelik çakışma çözünürlüğü etkilemez).

  • Çakışma izleme türü kullanılır: Satır düzey, sütun düzey veya mantıksal kayıt 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).

Abonelik (99,99 için 0.00 tarafından) atanan öncelik değeri olan sunucu aboneliği verilir; Yayımcı'ın öncelik değerini kullanarak bir abonelik istemci aboneliği verilir.Ayrıca, sunucu abonelikleri ile abonelerin diğer aboneler için verileri yeniden yayımlayabilirsiniz.Aşağıdaki tablo 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.

İstemci

0.00, ancak veri Değişiklikleri eşitlemeden sonra Yayımcı'ın öncelik değeri varsayılmaktadır.

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

Bir satır istemci aboneliği değiştirdiyseniz, abonelik kadar değişiklik hiçbir öncelik atanır.Eşitleme sırasında abone değişiklikleri yayımcı öncelik atanır ve bu için sonraki eşitlemeler önceliğe korumak.Yayımcı, bir anlamda, değişikliğin sahipliğini varsayar.Bu davranış, Yayımcı'ın diğer aboneleri verilen satır veya sütun için sonraki çakışıyor win ile eşitlemek için ilk abone verir.

Bir satır, sunucu aboneliği değiştirdiğinizde, abonelik önceliği değişikliği için meta veriler depolanır.Bu değişiklikleri diğer abonelere at ile birleştirmesi sırasında bu öncelik değeri değişen satırla hareket eder.Bu, daha yüksek bir öncelik abonelik tarafından yapılan bir değişiklik, düşük öncelikli bir abonelik tarafından yapılan bir sonraki değişiklik kaybetmez olmasını sağlar.

Bir abonelik daha yüksek olan bir açık öncelik değerine sahip olamaz, Yayımcı.Üst düzey bir birleştirme Yayımcı'da çoğaltma topolojisi 100,00 bir açık öncelik değeri her zaman vardır.Tüm abonelikleri o yayın bu değer değerinden daha düşük bir öncelik değeri olması gerekir.Republishing bir topoloji:

  • Abone verileri yeniden yayınlama, abonelik yayımcı abone yukarıda'dan öncelik değerine sahip sunucu aboneliği olması gerekir.

  • Yeniden (yaprak düzeyinde republishing ağacının olduğundan) abone veri yayınlama değil ise, abonelik bir istemci olmalıdır abonelik.

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

Gecikmeli çakışma uyarısı

Gecikmeli çakışma bildirim çakışma farklı önceliklere sahip sunucu abonelikleri ile ortaya çıkabilir.Çakışmayan bir değişiklik, yayımcı ve daha yüksek öncelikli abone yayımcı ile eşitler çalışma kitabındaki çakışan değişikliklerin neden 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 birkaç eşitlemeler üzerinden exchange ve.

  2. HighPrioritySub, adlı bir daha yüksek öncelikli abone yayımcı ile bazı saat eşitlendi ve LowPrioritySub abone yaptı aynı satırlara değişiklikler yapmıştır.

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

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

Bu durum düşük öncelikli abone çakışma kanalı kullanamayan programlar artık, aynı satır değişiklikleri yaptıktan sorunlu hale gelebilir.Bu tüm bu abone tarafından yapılan değişikliklerin kaybolmasına neden olabilir.Bu sorun için olası bir çözüm sürece iş mantığı tersi durumda kullanılması belirler tüm abonelere aynı önceliğe sahip olmasını sağlamaktır.

İzleme düzeyi

Bir veri değişikliği çakışma, çakışma, izleme türüne bağlıdır olmasa da gösterdikleri küme için bir makale: Satır düzey, sütun düzey veya mantıksal kayıt düzey.-mantıksal kayıt hakkında daha fazla bilgi içindüzey izleme, bkz: Algılama ve mantıksal kayıtlar içinde çakışmaları çözme.

Ne zaman çakışmaları tanınıyor satır sonunda düzey, karşılık gelen satırlar için yapılan değişiklikler için aynı sütunda yapılan değişiklikler olup olmadığını bir çakışma başarımıyla.Örneğin, satır Publisher adres sütunu için yapılan bir değişiklik, bir ikinci telefon sayı sütununa karşılık gelen abone satırı için değişiklik varsayalım (aynı tablo).Satır - iledüzey için aynı satırda değişiklik yapılmadı çünkü izleme, bir çakışma algılandı.İle sütun -düzey aynı satırdaki farklı sütunlar için yapılan değişiklikler nedeniyle izleme, çakışma yoksa, algılanır.

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

Uygulama semantik genellikle kullanmak için hangi izleme seçeneğini belirleyin.Örneğin, aynı anda genelde girilen müşteri verileri güncelleştiriyorsanız, saat, gibi bir adresi ve telefon numarası, satır düzeyinde izleme seçmiş.Sütun -düzey izleme değişiklikleri tek bir yerde Müşteri adresine ve müşterinin telefon numarasını başka bir konumda algılanmadı çakışma bu durumda, seçmiş: Veri eşitleme birleştirilmiş ve hata eksik.Diğer durumlarda, tek tek sütunları farklı sitelerden güncelleştirme en mantıklı seçim olabilir.Örneğin, iki site bir müşteri, kredi kartı satın gelir düzey ve toplam dolar miktarı gibi istatistiksel bilgiler farklı türde erişiminiz.Sütun seçimidüzey izleme, her iki site istatistik veriler farklı sütunlar için gereksiz çakışmasına neden olmaksızın girebileceğinizi sağlar.

Not

Sütun düzeyinde izleme uygulamanız gerekmez, çünkü satır düzeyinde izleme (varsayılan) kullanmanız önerilir, genellikle sonuçlar daha iyi eşitleme performans.Satır izleme kullanılır, en fazla 1024 sütun temel tablo içerebilir, ancak sütun filtre, dan makale en fazla 246 sütun yayımlanmış olduğunu.İzleme sütun kullanılıyorsa, en fazla 246 sütun temel tablo içerebilir.

Çakışma türleri

Çakışmaları çoğunluğu ilgili güncelleştirmeler (adresindeki bir update veya delete başka bir düğümdeki bir düğüm çakışıyor bir güncelleştirme), ancak diğer çakışma türleri vardır.Çakışma bu bölümde ele alınan her tür karşıya yükleme aşaması veya birleştirme işleminin yükleme aşaması sırasında oluşabilir.Karşıya yükleme işlemi gerçekleştirilen belirli bir birleştirme işlemine değişikliklerinin ilk mutabakat olan oturum, ve hangi sırasında Birleştirme Aracısı çoğaltır değişiklikleri abone için yayımcı gelen aşamasıdır.Bu işlem sırasında algılanan çakışma çakışma karşıya gibi denir.Karşıdan yükleme işlem Yayımcı'dan değişiklikleri abone ile hareket ettirilir ve karşıya yükleme işlendikten sonra oluşur.Çakışmaları işleminin bu aşamasında çakışmaları yükleme olarak adlandırılır.

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

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

Birleştirme Aracısı bir güncelleştirme olduğunda bir satır (veya sütun veya mantıksal kayıt) için güncelleştirme güncelleştirme çakışması adresindeki bir düğüm başka bir düğümdeki aynı satır başka bir güncelleştirme çakışıyor algılar.Satır sürüm kazanan kaybeden düğüme göndermek ve makale çakışma kaybeden satır sürüm oturum için varsayılan çözümleyici davranışını bu durumda olduğu tablo.

Güncelleştirme silme çakışmaları

Birleştirme Aracısı bir Sil at başka bir düğümdeki verileri güncelleştirme çakıştığında güncelleştirme silme çakışmaları algılar.Bu durum, Birleştirme Aracısı; satır güncelleştirir Ancak, ne zaman Birleştirme Aracısı arar o satır sonunda hedef, onu silindiğinden satır bulamıyor.Kazanan satır güncelleştirilen düğümü ise, kaybeden düğüm adresindeki delete atılır ve yeni güncelleştirilmiş satır Birleştirme Aracısı çakışma kaybeden gönderir.Birleştirme Aracısı oturumu için satır kaybeden sürüm hakkında bilgi MSmerge_conflicts_info tablo.

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

Belirli bir değişiklik uygulayamazsınız, Birleştirme Aracısı bu çakışmaları yükseltir.Bu, genellikle bir farka kısıtlaması tanımlarındaki Yayımcı ve abone ve kullanımını kısıtlaması olmayan için çoğaltma (nfr) özellik nedeniyle oluşur.Örnekler şunlardır:

  • Bir yabancı anahtar çakışması adresindeki abone, Abone tarafında kısıtlaması nfr işaretlenmiş bağlandığınızda oluşabilir.

  • Yayımcı ve aboneleri arasında sınırlamalar ve kısıtlamalar farklılıkları nfr işaretlenir.

  • Abone adresindeki bağımlı nesneleri olarak kullanım dışı kalması.Örneğin, üzerinde bir görünüm, ancak Tablo yayımlarsanız, bağımlı olduğu view, abone bu Sergi aracılığıyla eklemeye çalışırsanız bir hata ortaya çıkar.

  • Birincil anahtar ve yabancı anahtar kısıtlamalarını eşleşen bir yayın için filtre uygulama mantığını katılın.Çakışmaları oluşabilir, SQL Server ilişkisel altyapı bir sınırlama ancak birleştirmek Aracısı kutlamak için deneme makaleleri arasında birleştirmek filtre tanımı onurlandırmak.Birleştirme Aracısı hedef düğümdeki değişikliği tablo düzey kısıtlamaları nedeniyle uygulanamaz, sonuçlar bir çelişki içinde.

  • Makale için kimlik sütunları tanımlanır ve otomatik kimlik yönetimi kullanılmaz benzersiz dizin veya benzersiz kısıtlama ihlalleri veya birincil anahtar ihlalleri nedeniyle çakışmaları ortaya çıkabilir.İki aboneleri için yeni eklenen bir satırın aynı kimlik değerini kullanmanız gerekirse, bu bir sorun olabilir.Kimlik aralık yönetimi hakkında daha fazla bilgi için bkz: Kimlik sütunları çoğaltılıyor.

  • Birleştirme Aracısı hedef olarak bir satır ekleme gelen engelleyen Tetik mantığı çakışmaları nedeniyle tablo.Abone tarafında tanımlanan bir update tetikleyicisi düşünün; Tetikleyici nfr işaretlenmiş ve bir geri alma kendi mantığını içerir.Bir hata oluşursa, tetikleyici bir çakışma algılama başarısız bir Birleştirme Aracısı hangi sonuçlar değiştirme hareketi geri verir.