Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Setelah publikasi atau langganan diinisialisasi, replikasi gabungan melacak dan mendata semua perubahan pada data dalam tabel yang diterbitkan. Perubahan dilacak melalui pemicu (yang dibuat oleh replikasi untuk setiap tabel yang diterbitkan) dan tabel sistem di dalam database publikasi dan langganan. Tabel sistem replikasi ini diisi dengan metadata yang menunjukkan perubahan mana yang harus disebarluaskan. Ketika Agen Penggabungan berjalan selama sinkronisasi, perubahan dijumlahkan oleh agen dan kemudian diterapkan ke Penerbit dan Pelanggan seperlunya.
Pelacakan perubahan
Replikasi penggabungan menggunakan pemicu dan tabel sistem berikut untuk melacak perubahan untuk semua tabel yang diterbitkan:
-
MSmerge_ins_<GUID>: sisipkan pemicu (nilai GUID untuk pemicu ini dan pemicu lainnya berasal darisysmergearticles) -
MSmerge_upd_<GUID>: perbarui pemicu -
MSmerge_del_<GUID>: hapus pemicu MSmerge_contentsMSmerge_tombstoneMSmerge_genhistory
Replikasi penggabungan menggunakan tabel sistem tambahan berikut untuk melacak perubahan untuk tabel yang difilter:
MSmerge_partition_groupsMSmerge_current_partition_mappingsMSmerge_past_partition_mappings
Nota
Tabel sistem yang tercantum digunakan oleh semua publikasi gabungan dan langganan dalam database; misalnya, jika Anda memiliki lebih dari satu publikasi dalam database publikasi, MSmerge_contents berisi baris dari artikel di semua publikasi.
Pelacakan perubahan untuk tabel yang tidak difilter
Tabel sistem
Tabel sistem yang digunakan untuk tabel yang tidak difilter dan difilter berisi metadata berikut:
MSmerge_contentsberisi satu baris untuk setiap baris yang disisipkan atau diperbarui dalam tabel yang diterbitkan dalam database.MSmerge_tombstoneberisi satu baris untuk setiap baris yang dihapus dari tabel yang diterbitkan dalam database.MSmerge_genhistoryberisi satu baris untuk setiap generasi. Generasi adalah kumpulan perubahan yang dikirimkan ke Penerbit atau Pelanggan. Generasi ditutup setiap kali Agen Penggabungan berjalan; Perubahan berikutnya dalam database ditambahkan ke satu atau beberapa generasi terbuka.
Proses pelacakan perubahan
Proses pelacakan perubahan berikut digunakan untuk semua tabel yang tidak difilter:
Saat penyisipan atau pembaruan terjadi pada tabel yang diterbitkan, pemicu
MSmerge_ins_<GUID>atauMSmerge_upd_<GUID>diaktifkan, dan sebuah baris disisipkan ke dalam tabel sistemMSmerge_contents. KolomrowguidMSmerge_contentsberisi GUID untuk baris yang disisipkan atau diperbarui, menunjukkan bahwa saat sinkronisasi berikutnya, baris yang disisipkan atau diperbarui terkait dalam tabel pengguna harus dikirim ke Publisher atau Subscriber. Jika pembaruan berikutnya terjadi pada baris dalam tabel pengguna, baris dalamMSmerge_contentstersebut diperbarui untuk mencerminkan status ini.Saat penghapusan terjadi pada tabel yang diterbitkan, pemicu
MSmerge_del_<GUID>diaktifkan, dan baris disisipkan keMSmerge_tombstonedalam tabel sistem. KolomrowguiddariMSmerge_tombstoneberisi GUID untuk baris yang dihapus, menunjukkan bahwa saat sinkronisasi berikutnya terjadi, penghapusan harus dikirim ke Publisher atau Subscriber untuk baris yang dihapus yang sesuai dalam tabel pengguna. Jika baris yang dihapus direferensikan diMSmerge_contents(karena disisipkan atau diperbarui sejak sinkronisasi terakhir), baris dihapus dariMSmerge_contents.
Pelacakan perubahan untuk tabel yang difilter
Tabel sistem
Selain tabel sistem yang dijelaskan di bagian sebelumnya, tiga tabel dalam database publikasi berisi metadata untuk melacak perubahan pada tabel yang difilter:
MSmerge_partition_groupsberisi satu baris untuk setiap partisi yang ditentukan dalam publikasi. Partisi dapat berupa:Ditentukan secara eksplisit menggunakan
sp_addmergepartitionatau halaman Partisi Data dari kotak dialog Properti Publikasi.Dibuat secara otomatis ketika Pelanggan menyinkronkan jika Pelanggan memerlukan partisi yang belum memiliki entri di
MSmerge_partition_groups.
MSmerge_current_partition_mappingsberisi satu baris untuk setiap kombinasi unik baris diMSmerge_contentsdanMSmerge_partition_groups. Misalnya, jika baris dalam tabel pengguna milik dua partisi, dan baris diperbarui, satu baris disisipkan ke untuk mencerminkanMSmerge_contentspembaruan, dan dua baris dimasukkan ke dalamMSmerge_current_partition_mappings, untuk menunjukkan bahwa baris yang diperbarui milik dua partisi.MSmerge_past_partition_mappingsberisi satu baris untuk setiap baris yang tidak lagi termasuk dalam partisi tertentu. Baris bergerak keluar dari partisi jika:Baris dihapus. Jika baris dihapus dari tabel pengguna, baris disisipkan ke dalam
MSmerge_tombstonedan satu atau beberapa baris disisipkan ke dalamMSmerge_past_partition_mappings.Nilai dalam kolom yang digunakan untuk pemfilteran telah berubah. Misalnya, jika filter yang menggunakan parameter didasarkan pada negara bagian tempat perusahaan bermarkas dan perusahaan tersebut pindah, baris untuk perusahaan (dan baris terkait dalam tabel lain) mungkin berpindah dari satu partisi data tenaga penjual ke dalam partisi untuk tenaga penjual lain. Jika sebuah baris diperbarui sehingga tidak lagi berada dalam partisi, sebuah baris disisipkan atau diperbarui dalam
MSmerge_contentsdan satu atau beberapa baris disisipkan ke dalamMSmerge_past_partition_mappings.
Nota
Jika partisi yang tidak tumpang tindih dengan satu langganan per partisi (nilai 3 untuk @partition_options parameter sp_addmergearticle) digunakan, tabel MSmerge_current_partition_mappings sistem dan MSmerge_past_partition_mappings tidak digunakan untuk melacak pemetaan partisi baris, karena setiap baris hanya termasuk dalam satu partisi dan hanya dapat diubah pada satu Pelanggan.
Proses pelacakan perubahan
Proses yang dijelaskan sebelumnya (di bagian Pelacakan perubahan untuk tabel yang tidak difilter) untuk tabel yang tidak difilter juga digunakan untuk tabel yang difilter, dengan penambahan berikut:
Ketika penyisipan terjadi pada tabel yang diterbitkan, selain data yang diperbarui atau disisipkan ke dalam
MSmerge_contents, pemetaan partisi ditambahkan keMSmerge_current_partition_mappingsuntuk setiap partisi tempat baris berada.Ketika pembaruan terjadi pada tabel yang diterbitkan, selain data yang diperbarui atau disisipkan ke dalam
MSmerge_contents, jika pemetaan partisi tidak ada diMSmerge_current_partition_mappingsuntuk setiap partisi tempat baris berada, satu ditambahkan. Jika pembaruan mengakibatkan sebuah baris dipindahkan dari satu partisi ke partisi lain, maka satu baris diperbarui di dalamMSmerge_current_partition_mappingsdan satu baris ditambahkan ke dalamMSmerge_past_partition_mappings.Saat penghapusan terjadi pada tabel yang diterbitkan, selain baris yang disisipkan ke dalam
MSmerge_tombstone, sebuah baris dihapus dariMSmerge_current_partition_mappingsdan sebuah ditambahkan keMSmerge_past_partition_mappings.
Mengubah enumerasi
Tabel dan prosedur sistem
Saat Agen Penggabungan berjalan, perubahan dijumlahkan menggunakan beberapa tabel sistem dan prosedur tersimpan:
MSmerge_genhistoryberisi satu baris untuk setiap generasi. Generasi adalah kumpulan perubahan yang dikirimkan ke Penerbit atau Pelanggan. Generasi ditutup setiap kali Agen Penggabungan berjalan; Perubahan berikutnya dalam database ditambahkan ke satu atau beberapa generasi terbuka.sysmergesubscriptionsberisi informasi tentang langganan, termasuk catatan perubahan generasi terakhir yang telah dikirim dan diterima oleh simpul. Dalam database publikasi, tabel ini berisi baris untuk Penerbit dan satu baris untuk setiap Pelanggan. Dalam database langganan, tabel ini biasanya berisi baris untuk Pelanggan dan baris untuk Penerbit.MSmerge_generation_partition_mappingshanya digunakan untuk tabel yang difilter, merekam apakah generasi tertentu berisi perubahan apa pun yang relevan dengan partisi tertentu. Tabel dalam database publikasi ini berisi satu baris untuk setiap kombinasi unik baris diMSmerge_genhistorydanMSmerge_partition_groups.sp_MSmakegenerationmenutup semua generasi yang aktif di awal proses enumerasi.sp_MSenumchangesmencantumkan perubahan untuk tabel (beberapa prosedur terkait yang namanya dimulai dengansp_MSenumchangesjuga digunakan dalam proses ini).sp_MSgetmetadatamenentukan apakah perubahan dari satu simpul harus diterapkan pada simpul lain sebagai sisipkan, perbarui, atau hapus.
Mengubah proses enumerasi
Proses berikut terjadi selama enumerasi perubahan:
Prosedur sistem bernama
sp_MSmakegenerationUntuk tabel yang tidak difilter dan yang sudah difilter, prosedur ini menutup semua generasi terbuka yang direferensikan dalam
MSmerge_genhistory(generasi tertutup memiliki nilai1atau2di kolomgenstatus).Untuk tabel yang difilter, prosedur ini mengisi tabel sistem
MSmerge_generation_partition_mappings. Jika generasi berisi satu atau beberapa perubahan yang relevan untuk partisi, baris disisipkan ke dalam tabel sistem. Jika generasi tidak berisi perubahan apa pun yang relevan untuk partisi tertentu, baris tidak dimasukkan ke dalamMSmerge_generation_partition_mappings, dan perubahan tidak dijumlahkan untuk Pelanggan apa pun yang menerima partisi tersebut.
Prosedur
sp_MSenumchangesyang tersimpan dan prosedur terkait telah dipanggil. Prosedur ini menghitung perubahan yang terjadi sejak terakhir kali sinkronisasi terjadi:Prosedur pertama-tama menentukan generasi tempat enumerasi dimulai, berdasarkan kolom
sentgen(generasi terakhir dikirim) danrecgen(generasi terakhir diterima) dalam tabelsysmergesubscriptions.Misalnya, saat menentukan perubahan generasi mana yang harus dijumlahkan untuk Pelanggan tertentu,
sentgenuntuk Pelanggan (disimpan dalam database publikasi), danrecgenuntuk Pelanggan (disimpan dalam database langganan) dibandingkan. Jika nilainya sama (yang menunjukkan bahwa generasi terakhir yang dikirim dari Penerbit berhasil diterima oleh Pelanggan), perubahan dijumlahkan dimulai dengan generasi berikutnya diMSmerge_genhistory. Jika nilainya tidak sama, nilai yang lebih rendah dari dua nilai digunakan untuk memastikan semua perubahan yang diperlukan dikirim.Prosedur kemudian menghitung perubahan:
Untuk tabel yang tidak difilter, semua perubahan yang terkandung dalam generasi setelah generasi pada
sentgenataurecgenakan dihitung:MSmerge_genhistorydigabungkan denganMSmerge_contentsdanMSmerge_tombstoneuntuk menentukan perubahan apa saja yang harus dikirim.Untuk tabel yang difilter,
MSmerge_generation_partition_mappingsdigabungkan ke:MSmerge_current_partition_mappingsdanMSmerge_contents; danMSmerge_past_partition_mappingsdanMSmerge_tombstoneuntuk menentukan perubahan mana yang relevan untuk partisi yang diterima Pelanggan.
Prosedur
sp_MSgetmetadatatersimpan dipanggil untuk menentukan apakah perubahan harus diterapkan sebagai sisipkan, perbarui, atau hapus. Pada titik ini, deteksi konflik dan resolusi dilakukan; untuk informasi selengkapnya, lihat Cara replikasi penggabungan mendeteksi dan mengatasi konflik.
Konten terkait
- Penggabungan replikasi
- MSmerge_contents (Transact-SQL)
- MSmerge_current_partition_mappings
- MSmerge_generation_partition_mappings (Transact-SQL)
- MSmerge_genhistory (Transact-SQL)
- MSmerge_partition_groups (Transact-SQL)
- MSmerge_past_partition_mappings (Transact-SQL)
- MSmerge_tombstone (Transact-SQL)
- sp_addmergearticle (T-SQL)
- sp_addmergepartition (Transact-SQL)
- sysmergearticles (Transact-SQL)
- sysmergesubscriptions (Transact-SQL)
- Gabungkan Filter
- Filter Berparameter - Filter Baris Berparameter