Aracılığıyla paylaş


Birleştirme çoğaltması değişiklikleri nasıl izler ve numaralandırır?

Bir yayın veya abonelik başlatıldıktan sonra, birleştirilmiş çoğaltma yayımlanan tablolardaki verilerdeki tüm değişiklikleri izler ve numaralandırır. Değişiklikler, çoğaltmanın her yayımlanan tablo için oluşturduğu tetikleyiciler ve yayın ile abonelik veritabanlarındaki sistem tabloları aracılığıyla izlenir. Bu çoğaltma sistemi tabloları, hangi değişikliklerin yayılması gerektiğini gösteren meta verilerle doldurulur. Eşitleme sırasında Birleştirme Aracısı çalıştırıldığında, değişiklikler aracı tarafından numaralandırılır ve gerektiğinde Yayımcı ve Aboneye uygulanır.

Değişiklik izleme

Birleştirme çoğaltması, yayımlanan tüm tablolardaki değişiklikleri izlemek için aşağıdaki tetikleyicileri ve sistem tablolarını kullanır:

  • MSmerge_ins_<GUID>: tetikleyici ekle (bu tetikleyicinin GUID değeri ve diğer tetikleyicilerin GUID değerleri sysmergearticles'den türetilmiştir)
  • MSmerge_upd_<GUID>: güncelleştirme tetikleyicisi
  • MSmerge_del_<GUID>: delete tetikleyicisi
  • MSmerge_contents
  • MSmerge_tombstone
  • MSmerge_genhistory

Birleştirme çoğaltması, filtrelenmiş tablolardaki değişiklikleri izlemek için aşağıdaki ek sistem tablolarını kullanır:

  • MSmerge_partition_groups
  • MSmerge_current_partition_mappings
  • MSmerge_past_partition_mappings

Uyarı

Listelenen sistem tabloları, veritabanındaki tüm birleştirme yayınları ve abonelikleri tarafından kullanılır; örneğin, bir yayın veritabanında birden fazla yayınınız varsa, MSmerge_contents tüm yayınlardaki makalelerden satırlar içerir.

Filtrelenmemiş tablolar için değişiklik izleme

Sistem tabloları

Filtrelenmemiş ve filtrelenmiş tablolar için kullanılan sistem tabloları aşağıdaki meta verileri içerir:

  • MSmerge_contents veritabanındaki yayımlanmış bir tabloya eklenen veya güncelleştirilen her satır için bir satır içerir.

  • MSmerge_tombstone veritabanındaki yayımlanmış bir tablodan silinen her satır için bir satır içerir.

  • MSmerge_genhistory her nesil için bir satır içerir. Nesil, yayımcıya veya aboneye teslim edilen bir değişiklik koleksiyonudur. Birleştirme Aracısı her çalıştığında nesiller kapatılır ; bir veritabanındaki sonraki değişiklikler bir veya daha fazla açık nesile eklenir.

Değişiklik izleme süreci

Filtrelenmemiş tüm tablolar için aşağıdaki değişiklik izleme işlemi kullanılır:

  • Yayımlanmış bir tabloda ekleme veya güncelleştirme gerçekleştiğinde, MSmerge_ins_<GUID> veya MSmerge_upd_<GUID> tetikleyicisi tetikler ve sistem tablosuna MSmerge_contents bir satır eklenir. rowguid sütunuMSmerge_contents, eklenen veya güncelleştirilen satırın GUID'sini içerir. Bu, eşitlemenin bir sonraki kez gerçekleştiğinde, kullanıcı tablosuna karşılık gelen eklenen veya güncelleştirilen satırın Yayımcıya veya Abonelere gönderilmesi gerektiğini belirtir. Kullanıcı tablosundaki bir satırda sonraki güncelleştirmeler gerçekleşirse, içindeki MSmerge_contents satır bu durumu yansıtacak şekilde güncelleştirilir.

  • Yayımlanan tabloda silme işlemi gerçekleştiğinde MSmerge_del_<GUID> tetikleyici tetikler ve sistem tablosuna MSmerge_tombstone bir satır eklenir. rowguid sütunu MSmerge_tombstone silinen satırın GUID'sini içerir. Bu, eşitlemenin bir sonraki kez gerçekleştiğinde, kullanıcı tablosundaki ilgili silinen satır için Yayımcıya veya Abonelere bir silme gönderilmesi gerektiğini belirtir. Silinen satıra MSmerge_contents içinde başvuruluyorsa (çünkü son eşitlemeden sonra eklendi veya güncellendi), satır MSmerge_contents'den silinir.

Filtrelenmiş tablolar için değişiklik izleme

Sistem tabloları

Önceki bölümde açıklanan sistem tablolarına ek olarak, yayın veritabanındaki üç tablo filtrelenmiş tablolardaki değişiklikleri izlemeye yönelik meta veriler içerir:

  • MSmerge_partition_groups yayında tanımlanan her bölüm için bir satır içerir. Bölümler şöyle olabilir:

    • Yayın Özellikleri iletişim kutusunun veya Veri Bölümleri sayfası kullanılarak sp_addmergepartition açıkça tanımlanır.

    • Abone henüz içinde MSmerge_partition_groupsgirişi olmayan bir bölüm gerektiriyorsa Abone eşitlendiğinde otomatik olarak oluşturulur.

  • MSmerge_current_partition_mappingsve MSmerge_partition_groupsiçindeki MSmerge_contents her benzersiz satır bileşimi için bir satır içerir. Örneğin, kullanıcı tablosundaki bir satır iki bölüme aitse ve satır güncelleştirildiyse, güncelleştirmeyi yansıtacak şekilde bir satır eklenir MSmerge_contents ve güncelleştirilen satırın iki bölüme ait olduğunu belirtmek için içine iki satır eklenir MSmerge_current_partition_mappings.

  • MSmerge_past_partition_mappings artık belirli bir bölüme ait olmayan her satır için bir satır içerir. Bir satır, eğer şu şartlardan birine uyuyorsa, bir bölümden dışarı taşınır:

    • Satır silinir. Kullanıcı tablosundan bir satır silinirse, içine bir satır eklenir MSmerge_tombstone ve içine bir veya daha fazla satır eklenir MSmerge_past_partition_mappings.

    • Filtreleme için kullanılan sütundaki değer değişti. Örneğin, bir parametreli filtre, bir şirketin merkezinin bulunduğu eyaleti temel alıyorsa ve şirket taşınırsa, şirketin kaydı (ve diğer tablolardaki ilgili kayıtlar), bir satış görevlisinin veri bölümünden başka bir satış görevlisinin veri bölümüne taşınabilir. Bir satır artık bir parçalamaya ait olmayacak şekilde güncellenirse, MSmerge_contents içine bir satır eklenir veya güncellenir ve MSmerge_past_partition_mappings içine bir veya daha fazla satır eklenir.

Uyarı

Bölüm başına bir aboneliğe sahip (parametresi için değeri3) eşitlenmeyen sp_addmergearticlebölümler kullanılırsa, sistem tabloları MSmerge_current_partition_mappings kullanılır ve MSmerge_past_partition_mappings satırların bölüm eşlemelerini izlemek için @partition_options kullanılmaz, çünkü her satır yalnızca bir bölüme aittir ve yalnızca bir Abonede değiştirilebilir.

Değişiklik takip süreci

Filtrelenmemiş tablolar için daha önce açıklanan işlem ( filtrelenmemiş tablolar için değişiklik izleme bölümünde) filtrelenmiş tablolar için de kullanılır ve aşağıdaki eklemeler yapılır:

  • Yayımlanan bir tabloya ekleme yapıldığında, güncelleştirilen veya içine eklenen MSmerge_contentsverilere ek olarak, satırın ait olduğu her bölüm için bir bölüm eşlemesi eklenir MSmerge_current_partition_mappings .

  • Yayımlanan bir tabloda güncelleştirme gerçekleştiğinde, güncellenen veya MSmerge_contents içine eklenen verilere ek olarak, satırın ait olduğu her bölüm için MSmerge_current_partition_mappings'te bir bölüm eşlemesi yoksa bir tane eklenir. Güncelleştirme bir satırın bir bölümden diğerine taşınmasıyla sonuçlanırsa, MSmerge_current_partition_mappings içinde bir satır güncellenir ve MSmerge_past_partition_mappings içine bir satır eklenir.

  • Yayımlanan bir tabloda bir silme işlemi gerçekleştiğinde, bir satır MSmerge_tombstone'a eklenir ve bir satır MSmerge_current_partition_mappings'den silinir ve bir satır MSmerge_past_partition_mappings'ye eklenir.

Numaralandırmayı değiştir

Sistem tabloları ve yordamları

Birleştirme Aracısı çalıştığında, değişiklikler birkaç sistem tablosu ve saklı yordam kullanılarak numaralandırılır:

  • MSmerge_genhistory her nesil için bir satır içerir. Nesil, yayımcıya veya aboneye teslim edilen bir değişiklik koleksiyonudur. Birleştirme Aracısı her çalıştığında nesiller kapatılır ; bir veritabanındaki sonraki değişiklikler bir veya daha fazla açık nesile eklenir.

  • sysmergesubscriptions , aboneliklerle ilgili bilgileri içerir; bu bilgiler, bir düğümün gönderdiği ve aldığı son değişiklik sürümlerinin kaydını da kapsar. Yayın veritabanında, bu tablo Yayımcı için bir satır ve her abone için bir satır içerir. Abonelik veritabanında, bu tablo genellikle Abone için bir satır ve Yayımcı için bir satır içerir.

  • MSmerge_generation_partition_mappings yalnızca filtrelenmiş tablolar için kullanılır ve belirli bir neslin belirli bir bölümle ilgili değişiklikleri içerip içermediğini kaydeder. Yayın veritabanındaki bu tablo, MSmerge_genhistory ve MSmerge_partition_groups içindeki her benzersiz satır bileşimi için bir satır içerir.

  • sp_MSmakegeneration numaralandırma işleminin başında tüm açık generasyonları kapatır.

  • sp_MSenumchanges tablolar için değişiklikleri numaralandırır (ile başlayan sp_MSenumchanges adlara sahip çeşitli ilgili yordamlar da bu işlemde kullanılır).

  • sp_MSgetmetadata bir düğümdeki bir değişikliğin başka bir düğüme ekleme, güncelleştirme veya silme olarak uygulanması gerekip gerekmediğini belirler.

Numaralandırma işlemini değiştirme

Değişiklik numaralandırması sırasında aşağıdaki işlem gerçekleşir:

  1. Sistem yordamı sp_MSmakegeneration şu şekilde adlandırılır:

    • Filtrelenmiş ve filtrelenmemiş tablolar için, bu yordam MSmerge_genhistory içinde başvurulan tüm açık nesilleri kapatır (kapalı nesillerin 1 veya 2 değerine sahip olduğu sütun genstatus'dir).

    • Filtrelenmiş tablolar için bu yordam sistem tablosunu MSmerge_generation_partition_mappingsdoldurur. Bir nesil bir bölümle ilgili bir veya daha fazla değişiklik içeriyorsa, sistem tablosuna bir satır eklenir. Bir nesil belirli bir bölümle ilgili herhangi bir değişiklik içermiyorsa, içine bir satır eklenmez MSmerge_generation_partition_mappingsve bu bölümü alan aboneler için değişiklikler numaralandırılamaz.

  2. Saklı yordam sp_MSenumchanges ve ilişkili yordamlar çağrılır. Bu yordamlar, eşitlemenin son oluştuğu zamandan bu yana gerçekleşen değişiklikleri numaralandırır:

    1. Prosedürler, önce, tabloda sysmergesubscriptions sütunlarına göre, sentgen (son nesil gönderildi) ve recgen (alınan son nesil), numaralandırmanın başlatıldığı nesli belirler.

      Örneğin, belirli bir Abone için hangi nesil değişikliklerinin numaralandırılacağı belirlenirken, sentgen Abone için (yayın veritabanında depolanır) ve recgen Abone için (abonelik veritabanında depolanır) karşılaştırılır. Değerler aynıysa (Yayımcıdan gönderilen son neslin Abone tarafından başarıyla alındığını gösterir), değişiklikler içindeki MSmerge_genhistoryyeni nesilden başlayarak numaralandırılır. Değerler aynı değilse, gerekli tüm değişikliklerin gönderilmesini sağlamak için iki değerin alt kısmı kullanılır.

    2. Ardından prosedürler değişiklikleri numaralandırır.

      Filtrelenmemiş tablolar için, sentgen ya da recgen işleminden sonraki nesillerde yer alan tüm değişiklikler numaralandırılır: MSmerge_genhistory, MSmerge_contents ile birleştirilir ve MSmerge_tombstone, hangi değişikliklerin gönderilmesi gerektiğini belirler.

      Filtrelenmiş tablolar için, MSmerge_generation_partition_mappings, MSmerge_current_partition_mappings ve MSmerge_contents ile, ayrıca MSmerge_past_partition_mappings ve MSmerge_tombstone ile birleştirilerek abonenin aldığı bölüm için hangi değişikliklerin uygun olduğunu belirler.

  3. Bir değişikliğin ekleme, güncelleştirme veya silme olarak uygulanması gerekip gerekmediğini belirlemek için saklı yordam sp_MSgetmetadata çağrılır. Bu noktada çakışma algılama ve çözümleme gerçekleştirilir; Daha fazla bilgi için bkz. Birleştirme çoğaltması çakışmaları nasıl algılar ve çözümler.