Menerapkan penyelesai konflik kustom untuk artikel Gabungkan

Berlaku untuk:SQL Server

Topik ini menjelaskan cara menerapkan pemecah masalah konflik kustom untuk artikel Gabungkan di SQL Server dengan menggunakan Transact-SQL atau pemecah masalah kustom berbasis COM.

Dalam topik ini

Menggunakan T-SQL

Anda dapat menulis pemecah masalah konflik kustom Anda sendiri sebagai prosedur tersimpan Transact-SQL di setiap Publisher. Selama sinkronisasi, prosedur tersimpan ini dipanggil ketika konflik ditemui dalam artikel tempat pemecah masalah didaftarkan. Informasi tentang baris konflik diteruskan oleh Agen Penggabungan ke parameter prosedur yang diperlukan. Penyelesai konflik kustom berbasis prosedur tersimpan selalu dibuat di Publisher.

Catatan

Pemecah masalah prosedur tersimpan Microsoft SQL Server hanya dipanggil untuk menangani konflik berbasis perubahan baris. Mereka tidak dapat digunakan untuk menangani jenis konflik lain seperti kegagalan penyisipan yang dipicu oleh pelanggaran KUNCI PRIMER atau pelanggaran batasan indeks unik.

Untuk membuat penyelesai konflik kustom berbasis prosedur tersimpan

  1. Di Publisher di database publikasi atau msdb , buat prosedur tersimpan sistem baru yang mengimplementasikan parameter yang diperlukan berikut:

    Parameter Jenis data Deskripsi
    @tableowner nama sysname Nama pemilik tabel yang konfliknya sedang diatasi. Ini adalah pemilik untuk tabel dalam database publikasi.
    @tablename nama sysname Nama tabel yang konfliknya sedang diatasi.
    @rowguid pengidentifikasi unik Pengidentifikasi unik untuk baris yang berkonflik.
    @subscriber nama sysname Nama server tempat perubahan yang bertentangan sedang disebarluaskan.
    @subscriber_db nama sysname Nama database tempat perubahan yang bertentangan sedang disebarluaskan.
    output @log_conflict int Mengatur apakah proses penggabungan harus mencatat konflik untuk resolusi nanti:

    0 = Jangan catat konflik.

    1 = Pelanggan adalah pecundang konflik.

    2 = Publisher adalah pecundang konflik.
    output @conflict_message nvarchar(512) Pesan yang akan diberikan tentang resolusi jika konflik dicatat.
    @destowner nama sysname Pemilik tabel yang diterbitkan di Pelanggan.

    Prosedur tersimpan ini menggunakan nilai yang diteruskan oleh Agen Penggabungan ke parameter ini untuk mengimplementasikan logika resolusi konflik kustom Anda. Ini harus mengembalikan satu kumpulan hasil baris yang identik dalam struktur ke tabel dasar dan yang berisi nilai data untuk versi baris yang menang.

  2. Berikan izin EXECUTE pada prosedur tersimpan untuk setiap login yang digunakan oleh Pelanggan untuk terhubung ke Penerbit.

Menggunakan pemecah masalah konflik kustom dengan artikel tabel baru

  1. Jalankan sp_addmergearticle untuk menentukan artikel.

  2. Tentukan nilai Pemecah Prosedur Tersimpan MicrosoftSQLServer untuk parameter @article_resolver.

  3. Tentukan nama prosedur tersimpan yang mengimplementasikan logika pemecah masalah konflik untuk parameter @resolver_info .

    Untuk informasi selengkapnya, lihat Menentukan artikel.

Untuk menggunakan pemecah masalah konflik kustom dengan artikel tabel yang sudah ada

  1. Jalankan sp_changemergearticle, menentukan @publication, @article, nilai article_resolver untuk @property, dan nilai MicrosoftSQLServer Stored ProcedureResolver untuk @value.

  2. Jalankan sp_changemergearticle, menentukan @publication, @article, nilai resolver_info untuk @property, dan nama prosedur tersimpan yang mengimplementasikan logika pemecah konflik untuk @value.

Menggunakan pemecah masalah kustom berbasis COM

Namespace Microsoft.SqlServer.Replication.BusinessLogicSupport mengimplementasikan antarmuka yang memungkinkan Anda menulis logika bisnis yang kompleks untuk menangani peristiwa dan mengatasi konflik yang terjadi selama proses sinkronisasi replikasi Penggabungan. Untuk informasi selengkapnya, lihat Menerapkan Pengelola Logika Bisnis untuk artikel Penggabungan. Anda juga dapat menulis logika bisnis kustom berbasis kode asli Anda sendiri untuk mengatasi konflik. Logika ini dibangun sebagai komponen COM dan dikompilasi ke dalam pustaka tautan dinamis (DLL), menggunakan produk seperti Microsoft Visual C++. Pemecah masalah konflik kustom berbasis COM semacam ini harus mengimplementasikan antarmuka ICustomResolver , yang dirancang khusus untuk resolusi konflik.

Untuk membuat dan mendaftarkan penyelesai konflik kustom berbasis COM

  1. Di lingkungan penulisan yang kompatibel dengan COM, tambahkan referensi ke pustaka Pemecah Masalah Konflik Kustom.

  2. Untuk proyek Visual C++, gunakan direktif #import untuk mengimpor pustaka ini ke dalam proyek Anda.

  3. Buat kelas yang mengimplementasikan antarmuka ICustomResolver .

  4. Menerapkan metode dan properti tertentu.

  5. Buat proyek untuk membuat file pustaka pemecah masalah konflik kustom.

  6. Sebarkan pustaka di direktori yang berisi Agen Penggabungan yang dapat dieksekusi (biasanya \Microsoft SQL Server\100\COM).

    Catatan

    Penyelesai konflik kustom harus disebarkan di Pelanggan untuk langganan penarikan, di Distributor untuk langganan push, atau di server Web yang digunakan dengan sinkronisasi Web.

  7. Daftarkan pustaka pemecah masalah konflik kustom dengan menjalankan regsvr32.exe dari direktori penyebaran sebagai berikut:

    regsvr32.exe mycustomresolver.dll  
    
  8. Di Publisher, jalankan sp_enumcustomresolvers (Transact-SQL) untuk memverifikasi bahwa pustaka belum terdaftar sebagai penyelesai konflik kustom.

  9. Untuk mendaftarkan pustaka sebagai penyelesai konflik kustom, jalankan sp_registercustomresolver (Transact-SQL) di Distributor. Tentukan nama yang mudah diingat dari objek COM untuk @article_resolver, ID pustaka (CLSID) untuk @resolver_clsid, dan nilai false untuk @is_dotnet_assembly.

    Catatan

    Saat tidak lagi diperlukan, Anda dapat membatalkan pendaftaran penyelesai konflik kustom dengan menggunakan sp_unregistercustomresolver (Transact-SQL).

  10. (Opsional) Pada kluster, ulangi langkah 6-9 untuk mendaftarkan resolver kustom pada semua node kluster. Langkah-langkah ini diperlukan untuk memastikan bahwa pemecah masalah kustom dapat memuat reconciler dengan benar setelah failover.

Untuk menggunakan pemecah masalah konflik kustom dengan artikel tabel baru

  1. Di Publisher, jalankan sp_enumcustomresolvers (Transact-SQL), dan catat nama yang mudah diingat dari resolver yang diinginkan.

  2. Di Publisher pada database publikasi, jalankan sp_addmergearticle (Transact-SQL) untuk menentukan artikel. Tentukan nama yang mudah diingat dari pemecah masalah artikel dari langkah 1 untuk @article_resolver. Untuk informasi selengkapnya, lihat Menentukan artikel.

Untuk menggunakan pemecah masalah konflik kustom dengan artikel tabel yang sudah ada

  1. Di Publisher, jalankan sp_enumcustomresolvers (Transact-SQL), dan catat nama yang mudah diingat dari resolver yang diinginkan.

  2. Jalankan sp_changemergearticle (Transact-SQL), menentukan @publication, @article, nilai article_resolver untuk @property, dan nama yang mudah diingat dari pemecah masalah artikel dari langkah 1 untuk @value.

Baca juga

Deteksi dan resolusi konflik replikasi Gabungan Tingkat Lanjut
Pemecah masalah kustom berbasis COM
Praktik terbaik keamanan replikasi