Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Pelacakan tingkat kolom dan tingkat baris dalam replikasi gabungan

Dalam artikel ini, izinkan kami meninjau opsi pelacakan tingkat baris dan tingkat kolom dalam replikasi gabungan dan bagaimana ini digunakan dalam mendeteksi konflik selama replikasi gabungan.

Gabungkan Replikasi: Replikasi gabungan digunakan untuk mereplikasi data dengan dua cara yaitu dari penerbit ke pelanggan dan dari pelanggan ke penerbit.

Snapshot awal objek diambil dan diterapkan ke pelanggan. Perubahan data tambahan dan perubahan skema dilacak menggunakan pemicu dan diterapkan ke pelanggan saat pelanggan menyinkronkan dengan penerbit.

Konflik:

Dalam replikasi gabungan, baik pelanggan maupun penerbit bersifat independen, dan data dapat dimodifikasi di node mana pun.

Saat data diubah pada penerbit dan pelanggan dalam siklus replikasi, dan saat pelanggan menyinkronkan dengan penerbit, konflik terjadi. Agen gabungan menentukan pemenang di kedua sisi tergantung pada penyelesai konflik. Secara default, pemenang ditentukan oleh parameter yang berbeda seperti langganan klien atau server, langganan pull atau push, dll.

Deteksi Konflik:

Deteksi konflik bergantung pada jenis pelacakan yang kami konfigurasikan untuk artikel tersebut.

  • Pelacakan tingkat baris: Jika perubahan data dilakukan pada kolom mana pun pada baris yang sama di kedua ujungnya, maka itu dianggap sebagai konflik.
  • Pelacakan tingkat kolom: Jika perubahan data dilakukan pada kolom yang sama di kedua ujungnya, perubahan ini memenuhi syarat sebagai bentrok.

Resolver:

Penyelesai menerapkan data pemenang di kedua ujungnya saat terjadi konflik.

Secara default, jika ada konflik antara penerbit dan pelanggan, penerbit selalu menang.

Jika terjadi konflik antara dua pelanggan, pemenang ditentukan oleh pelanggan klien/server dan langganan pull/push.

Selain resolver default, ada beberapa resolver khusus juga. Kami akan membahas penyelesai khusus di artikel mendatang.

Konfigurasikan replikasi gabungan dengan pelacakan tingkat baris:

Basis data penerbit:pub_db

Basis data pelanggan:sub_db

Mari kita buat tabel “TBL_EMP” dan menambahkannya untuk menggabungkan replikasi.

CREATE TABLE TBL_EMP
(EmpID INT, Emp_FName varchar(100),Emp_Lname varchar(100))

INSERT INTO TBL_EMP VALUES (1,'Jhon','P')

INSERT INTO TBL_EMP VALUES (2,'Alison','P')

INSERT INTO TBL_EMP VALUES (3,'Angela','P')

Untuk mengonfigurasi replikasi gabungan, penerbit harus dikonfigurasi untuk menggunakan distribusi lokal atau distribusi jarak jauh.

Setelah distribusi dikonfigurasi, navigasikan ke folder replikasi di SSMS dan klik kanan publikasi lokal.

Klik Berikutnya dan pilih database publikasi, klik Berikutnya dan pilih replikasi gabungan, pilih 2008 atau yang lebih baru dan tambahkan tabel ke replikasi.

Sekarang klik properti artikel dan pilih properti artikel yang disorot.

Pilih tingkat pelacakan untuk menjadi pelacakan tingkat baris.

Secara default, ini akan menjadi pelacakan tingkat baris. Klik Oke, Selanjutnya, Berikutnya . Tambahkan filter jika Anda ingin mengirim data tertentu ke pelanggan, jika tidak abaikan, aktifkan Buat snapshot segera , konfigurasikan keamanan agen sesuai kebutuhan Anda, aktifkan Buat publikasi , tentukan nama publikasi dan klik Selesai .

Setelah snapshot awal dibuat, tambahkan pelanggan.

Navigasikan ke publikasi yang Anda buat di folder replikasi di penerbit, klik kanan dan pilih Langganan baru.

Klik Berikutnya , pilih publikasi, klik Berikutnya dan pilih langganan tarik atau dorong sesuai kebutuhan Anda. Dalam hal ini, saya menggunakan langganan push.

Pilih database langganan dan klik Berikutnya , konfigurasikan kredensial masuk untuk agen gabungan, dan klik Berikutnya .

Pilih jadwal agen sesuai kebutuhan Anda. Dalam hal ini, saya menggunakan Jalankan sesuai permintaan saja . Klik Berikutnya , pilih Inisialisasi segera dan pilih klien sebagai jenis langganan, klik Berikutnya , aktifkan Buat langganan , klik Berikutnya dan Selesai .

Setelah snapshot awal diterapkan, jalankan pernyataan di bawah ini pada penerbit untuk memperbarui catatan.

update TBL_EMP set Emp_Fname = 'Amanda' where empid = 1

Sekarang, pada db pelanggan, jalankan pernyataan di bawah ini untuk memperbarui nama belakang.

update TBL_EMP set Emp_Lname = 'A' where empid = 1

Sekarang, baris yang sama telah dimodifikasi baik di database penerbit dan database pelanggan dalam siklus replikasi yang sama.

Sesuai dengan opsi pelacakan yang kami tetapkan, yaitu pelacakan tingkat baris, perubahan dianggap sebagai konflik dan akan dicatat dalam tabel konflik saat agen gabungan berjalan.

Navigasikan ke publikasi yang Anda buat dan perluas publikasi untuk melihat langganan. Klik kanan langganan, pilih Lihat status sinkronisasi, dan klik Mulai.

Setelah agen gabungan berhasil berjalan, buka pelanggan dan periksa data menggunakan pernyataan di bawah ini.

use sub_db
select * from TBL_EMP  where empid = 1 

Kita dapat melihat bahwa perubahan dari penerbit telah menang dan perubahan dari pelanggan telah kalah.

Informasi konflik disimpan dalam tabel konflik dan dapat dilihat di penampil konflik.

Navigasikan ke penerbit, klik kanan dan pilih Lihat konflik.

Pilih tabel konflik dan klik OK untuk melihat detailnya.

Mengubah tingkat pelacakan

Sekarang mari kita ubah tingkat pelacakan menjadi pelacakan tingkat kolom. Navigasikan ke publikasi, klik kanan dan pilih Properti penerbit. Klik Artikel, pilih tabel, klik Properti artikel, atur properti artikel tabel yang disorot, pilih Pelacakan tingkat kolom, klik Oke, klik Oke, lalu klik Tandai untuk inisialisasi ulang.

Ini akan menandai semua pelanggan untuk inisialisasi ulang karena kami mengubah tingkat pelacakan yang ada ke yang baru.

Navigasikan ke publikasi, klik kanan publikasi dan klik Lihat status agen cuplikan , klik Mulai untuk menghasilkan snapshot baru. Ada cara lain untuk menghasilkan snapshot juga.

Sekarang, jalankan pernyataan di bawah ini terhadap penerbit untuk memperbarui catatan.

update TBL_EMP set Emp_Fname = 'Amanda' where empid = 2

Sekarang, jalankan pernyataan di bawah ini terhadap db pelanggan untuk memperbarui Nama belakang.

update TBL_EMP set Emp_Lname = 'A' where empid = 2

Jalankan agen gabungan secara manual. Saya masih melihat konflik pada catatan meskipun kami memperbarui dua kolom berbeda dan menyetel tingkat pelacakan ke tingkat kolom.

Detailnya bisa kita lihat di konflik viewer. Mengubah tingkat pelacakan yang ada tidak berhasil. Jadi, saya mengonfigurasi ulang publikasi, menyetel tingkat pelacakan ke pelacakan tingkat kolom sebelum membuat snapshot awal. Cuplikan telah dibuat dan pelanggan ditambahkan ke publikasi.

Setelah snapshot awal diterapkan ke pelanggan, jalankan pernyataan berikut di database penerbit.

update TBL_EMP set Emp_Fname = 'Amanda' where empid = 3

Jalankan pernyataan berikut di database pelanggan.

update TBL_EMP set Emp_Lname = 'A' where empid = 3

Jalankan agen gabungan secara manual. Sekarang, di database pelanggan, buat kueri tabel TBL_EMP.

Pembaruan dari penerbit dan pelanggan tidak memenuhi syarat sebagai konflik karena keduanya berada di kolom yang berbeda, dan tingkat pelacakan disetel ke pelacakan tingkat kolom. Tidak ada konflik yang dicatat dalam tabel konflik, pembaruan pada penerbit dan pelanggan pada kolom yang berbeda tidak hilang.

Mari kita perbarui kolom yang sama pada penerbit dan pelanggan.

Jalankan pernyataan berikut terhadap database penerbit.

use pub_db
update TBL_EMP set Emp_Lname = 'B' where empid = 1

Jalankan pernyataan berikut terhadap database pelanggan.

use sub_db
update TBL_EMP set Emp_Lname = 'C' where empid = 1

Jalankan agen gabungan dan kueri tabel TBL_EMP pada pelanggan. Pembaruan pada pelanggan hilang dan konflik dicatat.

Kinerja:

Mungkin ada overhead kinerja dengan pelacakan tingkat kolom dibandingkan dengan pelacakan tingkat baris ketika ada pembaruan besar. Tetapi dalam kasus saya, saya tidak melihat perbedaan dalam waktu sinkronisasi untuk pelacakan tingkat baris dan tingkat kolom jika terjadi pembaruan besar karena tabel mungkin sederhana dalam struktur (yaitu sangat sedikit kolom) dan baik pelanggan maupun pelanggan. penerbit berada di instance server SQL yang sama.

Catatan:

  • Secara default, pelacakan tingkat baris selalu dilakukan saat replikasi gabungan dikonfigurasi.
  • Opsi tingkat pelacakan bergantung pada tabel. Jadi, Anda dapat memiliki tingkat baris di satu tabel dan tingkat kolom di tabel lain.
  • Opsi ini hanya membantu saat konflik terdeteksi berdasarkan pembaruan, bukan menyelesaikannya.
  • Konfigurasi ulang publikasi jika mengubah tingkat pelacakan yang ada tidak berhasil.
  • Tetapkan tingkat pelacakan sesuai dengan kebutuhan bisnis Anda.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengelompokan Data menggunakan Fungsi OVER dan PARTITION BY

  2. Membuat Tabel Baru di IRI Workbench

  3. Menjebak Kesalahan Server Tertaut

  4. ReadyCloud ReadyShipper X

  5. Modifikasi Data di bawah Isolasi Snapshot Berkomitmen Baca