Langganan yang Dapat Diperbarui - Resolusi Konflik Pembaruan Antrean
Berlaku untuk: SQL Server
Karena langganan pembaruan antrean memungkinkan modifikasi pada data yang sama di beberapa lokasi, mungkin ada konflik ketika data disinkronkan di Publisher. Replikasi mendeteksi konflik apa pun ketika perubahan disinkronkan dengan Publisher dan menyelesaikan konflik tersebut menggunakan kebijakan resolusi yang Anda pilih saat membuat publikasi. Konflik berikut dapat terjadi:
Memperbarui dan menyisipkan konflik. Konflik ini terjadi ketika data yang sama diubah di dua lokasi. Satu perubahan menang, dan yang lainnya kalah.
Hapus konflik. Konflik ini terjadi ketika baris yang sama dihapus di satu lokasi dan diubah di lokasi lainnya.
Deteksi dan resolusi konflik dapat menjadi proses yang memakan waktu dan intensif sumber daya; oleh karena itu, yang terbaik adalah meminimalkan konflik dalam aplikasi dengan membuat partisi data sehingga Pelanggan yang berbeda memodifikasi subset data yang berbeda.
Mendeteksi Konflik
Saat membuat publikasi dan mengaktifkan pembaruan antrean, replikasi menambahkan kolom uniqueidentifier (msrepl_tran_version) dengan default newid() ke tabel yang mendasar. Saat data yang diterbitkan diubah di Penerbit atau Pelanggan, baris menerima pengidentifikasi unik global (GUID) baru untuk menunjukkan bahwa versi baris baru ada. Agen Pembaca Antrean menggunakan kolom ini selama sinkronisasi untuk menentukan apakah ada konflik.
Transaksi dalam antrean mempertahankan nilai versi baris lama dan baru. Ketika transaksi diterapkan di Penerbit, GUID dari transaksi dan GUID dalam publikasi dibandingkan. Jika GUID lama yang disimpan dalam transaksi cocok dengan GUID dalam publikasi, publikasi diperbarui dan baris diberi GUID baru yang dihasilkan oleh Pelanggan. Dengan memperbarui publikasi dengan GUID dari transaksi, Anda memiliki versi baris yang cocok dalam publikasi dan dalam transaksi.
Jika GUID lama yang disimpan dalam transaksi tidak cocok dengan GUID dalam publikasi, konflik terdeteksi. GUID baru dalam publikasi menunjukkan bahwa ada dua versi baris yang berbeda: satu dalam transaksi yang dikirimkan oleh Pelanggan dan yang lebih baru yang ada di Penerbit. Dalam hal ini, Pelanggan lain atau Penerbit memperbarui baris yang sama dalam publikasi sebelum transaksi Pelanggan ini disinkronkan.
Tidak seperti replikasi penggabungan, penggunaan kolom GUID tidak digunakan untuk mengidentifikasi baris itu sendiri, tetapi digunakan untuk memeriksa apakah baris telah berubah.
Mengatasi Konflik
Saat Anda membuat publikasi menggunakan pembaruan antrean, Anda memilih pemecah masalah konflik yang akan digunakan jika ada konflik yang terdeteksi. Pemecah masalah konflik mengatur bagaimana Agen Pembaca Antrean menangani versi yang berbeda dari baris yang sama yang ditemui selama sinkronisasi. Anda dapat mengubah kebijakan resolusi konflik setelah publikasi dibuat selama tidak ada langganan untuk publikasi. Pilihan pemecah masalah konflik adalah sebagai berikut:
Publisher menang (defaultnya)
Publisher menang dan langganan diinisialisasi ulang
Pelanggan menang
Konflik direkam dan dapat dilihat menggunakan Penampil Konflik.
Untuk mengatur kebijakan penyelesaian konflik pembaruan antrean
SQL Server Management Studio: Set Queued Memperbarui Opsi Resolusi Konflik (SQL Server Management Studio)
Pemrograman Transact-SQL Replikasi: Mengaktifkan Pembaruan Langganan untuk Publikasi Transaksional
Untuk melihat konflik data
- SQL Server Management Studio: Melihat Konflik Data untuk Publikasi Transaksi (SQL Server Management Studio)
Publisher Wins
Ketika resolusi konflik diatur ke Penerbit menang, konsistensi transaksional dipertahankan berdasarkan data di Penerbit. Transaksi yang bertentangan digulung balik di Pelanggan yang memulainya.
Agen Pembaca Antrean mendeteksi konflik dan perintah kompensasi dihasilkan dan disebarkan ke Pelanggan dengan mempostingnya di database distribusi. Agen Distribusi kemudian menerapkan perintah kompensasi kepada Pelanggan yang berasal dari transaksi yang bertentangan. Tindakan kompensasi memperbarui baris pada Pelanggan agar sesuai dengan baris di Publisher.
Sampai perintah kompensasi diterapkan, dimungkinkan untuk membaca hasil transaksi yang akhirnya akan digulung balik di Pelanggan. Ini setara dengan bacaan kotor (baca tingkat isolasi yang tidak dikomit). Tidak ada kompensasi untuk transaksi dependen berikutnya yang dapat terjadi. Namun, batas transaksi dihormati dan semua tindakan dalam transaksi dilakukan, atau dalam kasus konflik, digulung balik.
Publisher Wins dan Langganan Diinisialisasi ulang
Menginisialisasi ulang Pelanggan untuk mengatasi konflik mempertahankan konsistensi transaksi yang ketat di Pelanggan, tetapi dapat memakan waktu jika publikasi berisi data dalam jumlah besar.
Ketika Agen Pembaca Antrean mendeteksi konflik, semua transaksi yang tersisa dalam antrean (termasuk transaksi yang bertentangan) ditolak, dan Pelanggan ditandai untuk reinitialisasi. Rekam jepret berikutnya yang dihasilkan untuk publikasi diterapkan oleh Agen Distribusi ke Pelanggan.
Pelanggan Menang
Deteksi konflik di bawah kebijakan Pelanggan menang berarti transaksi Pelanggan terakhir untuk memperbarui kemenangan Penerbit. Dalam hal ini, ketika konflik terdeteksi, transaksi yang dikirim oleh Pelanggan masih digunakan dan Penerbit diperbarui. Kebijakan ini cocok untuk aplikasi di mana perubahan tersebut tidak membahayakan integritas data.