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.
Berlaku untuk:SQL Server
Catatan
Fitur ini tetap didukung dalam versi SQL Server dari 2012 hingga 2016. Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.
Replikasi transaksional mendukung pembaruan pada para Subscriber melalui langganan yang dapat diperbarui dan replikasi peer-to-peer. Berikut ini adalah dua jenis langganan yang dapat diperbarui:
Segera perbarui. Penerbit dan Pelanggan harus terhubung untuk memperbarui data di Pelanggan.
Pembaruan berantri Publisher dan Subscriber tidak harus terhubung untuk memperbarui data di sisi Subscriber. Anda dapat memperbarui data saat Subscriber atau Publisher offline.
Saat Anda memperbarui data di Subscriber, pembaruan tersebut pertama-tama akan dikirim ke Publisher dan kemudian ke Subscriber lainnya. Jika Anda menggunakan pembaruan langsung, perubahan langsung dilakukan dengan menggunakan protokol komit dua fase. Jika Anda menggunakan pembaruan dalam antrean, perubahan akan masuk ke antrean. Transaksi yang diantrekan akan dikirim ke Publisher secara asinkron saat konektivitas jaringan tersedia. Karena pembaruan dikirim ke Publisher secara asinkron, data yang sama mungkin diperbarui oleh Publisher atau oleh Subscriber lain dan konflik dapat terjadi saat menerapkan pembaruan. Sistem mendeteksi dan menyelesaikan konflik sesuai dengan kebijakan penyelesaian konflik yang Anda tetapkan saat membuat publikasi.
Jika Anda membuat publikasi transaksional dengan langganan yang dapat diperbarui di Wizard Publikasi Baru, pembaruan segera dan pembaruan antrean diaktifkan. Jika Anda membuat publikasi dengan prosedur tersimpan, Anda dapat mengaktifkan satu atau kedua opsi. Saat membuat langganan ke publikasi, Anda menentukan mode pembaruan mana yang akan digunakan. Anda kemudian dapat beralih di antara mode pembaruan jika perlu. Untuk informasi selengkapnya, lihat bagian berikut "Beralih antar Mode Pembaruan".
Untuk mengaktifkan langganan yang dapat diperbarui untuk publikasi transaksional, lihat Aktifkan Pembaruan Langganan untuk Publikasi Transaksional.
Untuk membuat langganan yang dapat diperbarui untuk publikasi transaksional, lihat Buat Langganan yang dapat diperbarui untuk publikasi transaksional (Management Studio).
Beralih antar mode pembaruan
Saat Anda menggunakan langganan yang dapat diperbarui, Anda dapat menentukan satu mode pembaruan untuk langganan dan beralih ke mode lain jika aplikasi membutuhkannya. Misalnya, Anda dapat menentukan bahwa langganan menggunakan pembaruan segera, tetapi beralih ke pembaruan antrian jika kegagalan sistem menyebabkan hilangnya konektivitas jaringan.
Catatan
Replikasi tidak berpindah otomatis antar mode pembaruan. Atur mode pembaruan melalui SQL Server Management Studio atau panggil sp_setreplfailovermode (Transact-SQL) di aplikasi Anda untuk beralih antar mode.
Jika Anda beralih dari pemutakhiran langsung ke pemutakhiran dalam antrean, Anda tidak dapat beralih kembali ke pemutakhiran langsung hingga Subscriber dan Publisher terhubung dan Queue Reader Agent menerapkan semua pesan yang tertunda dalam antrean ke Publisher.
Untuk beralih di antara mode pembaruan
Untuk beralih antara mode pembaruan, aktifkan publikasi dan langganan untuk kedua mode pembaruan, lalu beralih di antara keduanya jika diperlukan. Untuk informasi selengkapnya, lihat
Beralih Antara Mode Pembaruan untuk Langganan Transaksional yang Dapat Diperbarui.
Pertimbangan dalam menggunakan langganan yang dapat diperbarui
Setelah Anda mengaktifkan publikasi untuk memperbarui langganan atau langganan pembaruan yang terantri, Anda tidak dapat menonaktifkan opsi untuk publikasi tersebut (meskipun langganan tidak perlu menggunakannya). Untuk menonaktifkan opsi ini, hapus publikasi dan buat yang baru.
Menerbitkan ulang data tidak didukung.
Replikasi menambahkan kolom msrepl_tran_version ke tabel yang diterbitkan untuk keperluan pelacakan. Karena kolom tambahan ini, cantumkan daftar kolom dalam setiap pernyataan INSERT.
Untuk melakukan perubahan skema pada tabel dalam publikasi yang mendukung pembaruan langganan, hentikan semua aktivitas pada tabel di Publisher dan Subscribers, dan propagasi perubahan data yang tertunda ke semua node sebelum melakukan perubahan skema apa pun. Proses ini memastikan bahwa transaksi yang belum selesai tidak bertentangan dengan perubahan skema yang masih tertunda. Setelah perubahan skema menyebar ke semua node, aktivitas dapat dilanjutkan pada tabel yang dipublikasikan. Untuk informasi selengkapnya, lihat Menghentikan Topologi Replikasi (Pemrograman Transact-SQL Replikasi).
Untuk beralih antara mode pembaruan, Queue Reader Agent harus berjalan setidaknya sekali setelah langganan diinisialisasi (secara default, Queue Reader Agent berjalan secara terus-menerus).
Jika database Subscriber dipartisi secara horizontal dan ada baris dalam partisi yang ada di Subscriber tetapi tidak di Publisher, Subscriber tidak dapat memperbarui baris yang sudah ada. Mencoba memperbarui baris ini mengembalikan kesalahan. Hapus baris dari tabel lalu tambahkan di Publisher.
Replikasi transaksional dengan subscriber yang dapat diperbarui secara antrean dapat mengalami penurunan kinerja ketika indeks unik terfilter digunakan. Jika terjadi konflik pada artikel yang memiliki indeks terfilter yang unik, penyelesaian konflik akan menyebabkan penghapusan dan penyisipan tambahan di subscriber untuk baris-baris yang tidak dicakup oleh indeks terfilter yang unik.
Pembaruan di Sisi Pelanggan
Pembaruan di Subscriber akan diteruskan ke Publisher meskipun langganan sudah kedaluwarsa atau tidak aktif. Pastikan Anda menghapus atau menginisialisasi ulang langganan tersebut.
Jika Anda menggunakan TIMESTAMP atau IDENTITY kolom dan mereplikasinya sebagai tipe data dasar, jangan memperbarui nilai di kolom-kolom tersebut di Subscriber.
Pelanggan tidak dapat memperbarui atau menyisipkan nilai teks, ntext, atau gambar karena pemicu pelacakan perubahan replikasi tidak dapat membaca dari tabel yang disisipkan atau dihapus. Demikian pula, Pelanggan tidak dapat memperbarui atau menyisipkan nilai teks atau gambar dengan menggunakan WRITETEXT atau UPDATETEXT karena Publisher menimpa data tersebut. Sebagai gantinya, Anda dapat mempartisi kolom teks dan gambar ke dalam tabel terpisah dan memodifikasi kedua tabel dalam satu transaksi.
Untuk memperbarui objek besar di Subscriber, gunakan tipe data varchar(max), nvarchar(max), dan varbinary(max) sebagai pengganti tipe data teks, ntext, dan gambar .
Pembaruan pada kunci unik (termasuk kunci utama) yang menghasilkan duplikat, seperti pembaruan formulir
UPDATE <column> SET <column> =<column>+1, tidak diperbolehkan dan ditolak karena pelanggaran keunikan. Tetapkan agar pembaruan yang dibuat pada Subscriber disebarkan melalui replikasi sebagai pernyataan UPDATE terpisah untuk setiap baris yang terpengaruh.Jika database Subscriber dipartisi secara horizontal dan partisi berisi baris yang ada di Subscriber tetapi tidak di Publisher, Subscriber tidak dapat memperbarui baris yang sudah ada. Mencoba memperbarui baris ini mengembalikan kesalahan. Hapus dan masukkan kembali baris-baris ini.
Pemicu yang ditentukan pengguna
Jika aplikasi memerlukan pemicu pada Subscriber, tentukan pemicu dengan opsi
NOT FOR REPLICATIONpada Publisher dan Subscriber. Opsi ini memastikan bahwa trigger hanya dijalankan untuk perubahan data asli, tetapi tidak saat replikasi meneruskan perubahan tersebut.Pastikan trigger yang ditentukan pengguna tidak aktif saat trigger replikasi memperbarui tabel. Panggil prosedur sp_check_for_sync_trigger di isi trigger yang ditentukan pengguna. Untuk informasi selengkapnya, lihat sp_check_for_sync_trigger (Transact-SQL).
Segera Memperbarui
Untuk langganan yang langsung diperbarui, perubahan di Subscriber akan dipropagasikan ke Publisher dan diterapkan menggunakan Koordinator Transaksi Terdistribusi Microsoft (MS DTC). Pastikan MS DTC diinstal dan dikonfigurasi di Penerbit dan Pelanggan. Untuk informasi selengkapnya, lihat dokumentasi Windows.
Pemicu yang digunakan langganan pembaruan segera memerlukan koneksi ke Publisher untuk mereplikasi perubahan.
Jika publikasi mengizinkan langganan pembaruan langsung dan sebuah artikel dalam publikasi tersebut menggunakan filter kolom, Anda tidak dapat memfilter keluar kolom non-null tanpa nilai default.
Pembaruan dalam antrean
Anda tidak dapat menerbitkan tabel yang disertakan dalam publikasi gabungan sebagai bagian dari publikasi transaksional yang memungkinkan langganan pembaruan dalam antrean.
Jangan memperbarui kolom kunci utama saat menggunakan pemutakhiran terantri karena kunci utama berfungsi sebagai penanda lokasi rekaman untuk semua kueri. Saat kebijakan penyelesaian konflik diatur ke Subscriber Wins, berhati-hatilah saat memperbarui kunci primer. Jika baik Publisher maupun Subscriber memperbarui kunci utama, hasilnya adalah dua baris dengan kunci utama yang berbeda.
Untuk kolom dengan tipe data SQL_VARIANT: ketika data dimasukkan atau diperbarui di Subscriber, Queue Reader Agent memetakannya dengan cara berikut saat menyalin data dari Subscriber ke antrean:
BIGINT, DECIMAL, NUMERIC, MONEY, dan SMALLMONEY dipetakan ke NUMERIC.
BINARY dan VARBINARY dipetakan ke data VARBINARY.
Deteksi dan penyelesaian konflik
Untuk kebijakan konflik Subscriber Wins: penyelesaian konflik tidak mendukung pembaruan pada kolom kunci utama.
Replikasi tidak menyelesaikan konflik akibat kegagalan kendala kunci asing:
Jika Anda tidak mengharapkan konflik dan data terpartisi dengan baik (Pelanggan tidak memperbarui baris yang sama), gunakan kendala kunci asing pada Penerbit dan Pelanggan.
Jika Anda mengharapkan konflik: jangan gunakan batasan foreign key di Publisher atau Subscriber jika Anda menggunakan "Subscriber menang" untuk penyelesaian konflik. Jangan gunakan batasan foreign key di Subscriber jika Anda menggunakan "Publisher wins" untuk resolusi konflik.