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
Azure SQL Managed Instance
Secara bawaan, replikasi transaksional membuat semua perubahan data pada Subscriber melalui prosedur simpan yang dihasilkan oleh prosedur internal, untuk setiap artikel dari tabel yang dipublikasikan. Tiga prosedur (masing-masing satu untuk sisipan, pembaruan, dan penghapusan) disalin ke Pelanggan dan dijalankan saat penyisipan, pembaruan, atau penghapusan direplikasi ke Pelanggan.
Ketika perubahan skema dilakukan pada tabel pada Penerbit SQL Server, replikasi meregenerasi prosedur ini secara otomatis dengan memanggil kumpulan prosedur skrip internal yang sama sehingga prosedur baru cocok dengan skema baru (replikasi perubahan skema tidak didukung untuk Penerbit Oracle).
Anda juga dapat menentukan prosedur kustom untuk menggantikan satu atau beberapa prosedur default. Prosedur kustom harus diubah jika perubahan skema memengaruhi prosedur. Misalnya, jika prosedur mereferensikan kolom yang dihilangkan dalam perubahan skema, referensi ke kolom harus dihapus dari prosedur.
Ada dua cara untuk replikasi untuk menyebarluaskan prosedur kustom baru kepada Pelanggan:
- Gunakan prosedur pembuatan skrip kustom untuk mengganti default yang digunakan oleh replikasi
- Menggunakan skrip yang berisi definisi prosedur kustom baru
Gunakan prosedur pembuatan skrip kustom untuk mengganti default yang digunakan oleh replikasi
Ketika Anda menjalankan sp_addarticle, pastikan bit @schema_option0x02 adalah untuk true.
Nota
Definisi prosedur tersimpan kustom harus diskrip menggunakan Transact-SQL dinamis, di dalam prosedur tersimpan pembungkus. Prosedur tersimpan pembungkus ini juga harus menyertakan parameter @artid dengan tipe int, untuk memastikan bahwa itu dibuat pada berlangganan.
Jalankan sp_register_custom_scripting dan tentukan nilai insert, , updateatau delete untuk parameter @type , dan nama prosedur pembuatan skrip kustom untuk parameter @value .
Lain kali perubahan skema dilakukan, replikasi memanggil prosedur tersimpan ini untuk membuat skrip definisi untuk prosedur tersimpan kustom yang ditentukan pengguna baru, lalu menyebarluaskan prosedur ke setiap Pelanggan.
Contoh
Dalam contoh ini, asumsikan bahwa Penerbit dan Pelanggan sudah dikonfigurasi, dan Anda ingin membuat prosedur tersimpan kustom delete .
Pada Pengguna Langganan, buat tabel untuk menampilkan skrip penghapusan yang disesuaikan.
USE [SubscriberDB]; GO CREATE TABLE DeleteLogging (id INT PRIMARY KEY); GOTambahkan artikel dari Publisher. Perhatikan nilai parameter
@schema_option,@ins_cmd,@upd_cmd, dan@del_cmd.USE [PublisherDB]; EXECUTE sp_addarticle @publication = N'PubName1', @article = N'Purchases', @source_owner = N'dbo', @source_object = N'Purchases', @type = N'logbased', @description = NULL, @creation_script = NULL, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', @destination_table = N'Purchases', @destination_owner = N'dbo', @vertical_partition = N'false', @ins_cmd = N'CALL sp_MSins_dboPurchases', -- default @del_cmd = N'CALL custom_delete', -- custom @upd_cmd = N'SCALL sp_MSupd_dboPurchases'; -- default GOBuat prosedur tersimpan yang membentuk skrip dari prosedur tersimpan
custom_deleteyang ingin Anda gunakan pada Langganan. Ini adalah prosedur tersimpan pembungkus (wrapper), seperti yang telah dijelaskan sebelumnya.Mengembalikan nilai bukan nol dari prosedur tersimpan ini mengakibatkan
custom_deletetidak dibuat pada Subscriber.SELECTharus mengembalikan definisi lengkapCREATEprosedur tersimpan yang akan digunakan oleh Penerima Langganan.Perhatikan penggunaan parameter yang diperlukan
@artid.USE [PublisherDB]; GO CREATE OR ALTER PROCEDURE script_custom_delete (@artid INT) AS BEGIN SELECT 'CREATE OR ALTER PROCEDURE custom_delete @pkc1 INT AS BEGIN INSERT INTO DeleteLogging (id) VALUES (@pkc1) END'; RETURN 0; END GODaftarkan skrip kustom di Publisher.
USE [PublisherDB]; GO EXECUTE sp_register_custom_scripting @type = 'delete', @value = 'script_custom_delete', @publication = 'PubName1', @article = 'Purchases'; GOTambahkan langganan. Dalam contoh ini,
@sync_typeparameter diatur kereplication support only, sehingga tidak ada rekam jepret yang digunakan.USE [PublisherDB]; GO EXECUTE sp_addsubscription @publication = N'PubName1', @subscriber = @@SERVERNAME, @destination_db = N'SubscriberDB', @subscription_type = N'Push', @sync_type = N'replication support only', @article = N'all', @update_mode = N'read only', @subscriber_type = 0; GO
Menggunakan skrip yang berisi definisi prosedur kustom baru
Saat Anda menjalankan sp_addarticle, atur bit @schema_option0x02 agar false replikasi tidak secara otomatis menghasilkan prosedur kustom di Subscriber.
Sebelum setiap perubahan skema, buat file skrip baru dan daftarkan skrip dengan replikasi dengan menjalankan sp_register_custom_scripting. Tentukan nilai custom_script untuk parameter @type , dan jalur ke skrip pada Publisher untuk parameter @value .
Lain kali perubahan skema yang relevan dilakukan, skrip ini dijalankan pada setiap Pelanggan dalam transaksi yang sama dengan perintah DDL. Setelah perubahan skema dilakukan, skrip tidak terdaftar. Anda harus mendaftarkan ulang skrip untuk menjalankannya setelah perubahan skema berikutnya.