Mengaktifkan Pembaruan Langganan untuk Publikasi Transaksional

Berlaku untuk:SQL Server

Topik ini menjelaskan cara mengaktifkan pembaruan langganan untuk publikasi transaksional di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL.

Catatan

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.

Keamanan

Jika memungkinkan, minta pengguna untuk memasukkan kredensial keamanan saat runtime. Jika Anda harus menyimpan kredensial dalam file skrip, Anda harus mengamankan file untuk mencegah akses yang tidak sah.

Menggunakan SQL Server Management Studio

Aktifkan pembaruan langganan untuk publikasi transaksional pada halaman Jenis Publikasi di Wizard Publikasi Baru.

Untuk menggunakan pembaruan langganan, Anda juga harus mengonfigurasi opsi di Wizard Langganan Baru.

Untuk mengaktifkan pembaruan langganan

  1. Pada halaman Jenis Publikasi di Wizard Publikasi Baru, pilih publikasi transaksional dengan langganan yang dapat diperbarui.

  2. Pada halaman Keamanan Agen, tentukan pengaturan keamanan untuk Agen Pembaca Antrean, selain untuk Agen Snapshot dan Agen Pembaca Log. Untuk informasi selengkapnya tentang izin yang diperlukan untuk akun yang digunakan untuk menjalankan Agen Pembaca Antrean, lihat Model Keamanan Agen Replikasi.

    Catatan

    Agen Pembaca Antrean dikonfigurasi meskipun Anda hanya menggunakan langganan pembaruan langsung.

Menggunakan T-SQL

Saat membuat publikasi transaksional secara terprogram menggunakan prosedur tersimpan replikasi, Anda dapat mengaktifkan langganan pembaruan langsung atau langganan pembaruan antrean.

Untuk membuat publikasi yang mendukung pembaruan langganan segera

  1. Jika perlu, buat tugas agen pembaca log untuk basis data publikasi.

    • Jika pekerjaan Agen Pembaca Log sudah ada untuk database publikasi, lanjutkan ke langkah 2.

    • Jika Anda tidak yakin apakah pekerjaan Agen Pembaca Log ada untuk database yang diterbitkan, jalankan sp_helplogreader_agent (Transact-SQL) di Penerbit pada database publikasi. Jika kumpulan hasil kosong, tugas Agen Pembaca Log harus dibuat.

    • Di penerbit, jalankan sp_addlogreader_agent (Transact-SQL). Tentukan kredensial Microsoft Windows tempat agen berjalan untuk @job_name dan @password. Jika agen akan menggunakan Autentikasi SQL Server saat menyambungkan ke Penerbit, Anda juga harus menentukan nilai 0 untuk @publisher_security_mode dan informasi masuk Microsoft SQL Server untuk @publisher_login dan @publisher_password.

  2. Jalankan sp_addpublication (Transact-SQL), menentukan nilai true untuk parameter @allow_sync_tran.

  3. Di Publisher, jalankan sp_addpublication_snapshot (Transact-SQL). Tentukan nama publikasi yang digunakan di langkah 2 untuk @publication dan kredensial Windows tempat Agen Rekam Jepret berjalan untuk @job_name dan @password. Jika agen akan menggunakan Autentikasi SQL Server saat menyambungkan ke Publisher, Anda juga harus menentukan nilai 0 untuk @publisher_security_mode dan informasi masuk SQL Server untuk @publisher_login dan @publisher_password. Ini membuat pekerjaan Agen Rekam Jepret untuk publikasi.

  4. Tambahkan artikel ke publikasi. Untuk informasi selengkapnya, lihat Menentukan Artikel.

  5. Pada Subscriber, buat langganan yang dapat diperbarui untuk publikasi ini.

Untuk membuat publikasi yang mendukung langganan pembaruan berantrian

  1. Jika perlu, buat tugas agen pembaca log untuk basis data publikasi.

    • Jika pekerjaan Agen Pembaca Log sudah ada untuk database publikasi, lanjutkan ke langkah 2.

    • Jika Anda tidak yakin apakah pekerjaan Agen Pembaca Log ada untuk database yang diterbitkan, jalankan sp_helplogreader_agent (Transact-SQL) di Penerbit pada database publikasi. Jika kumpulan hasil kosong, job Log Reader Agent harus dibuat.

    • Di penerbit, jalankan sp_addlogreader_agent (Transact-SQL). Tentukan kredensial Windows tempat agen berjalan untuk @job_name dan @password. Jika agen akan menggunakan Autentikasi SQL Server saat menyambungkan ke Publisher, Anda juga harus menentukan nilai 0 untuk @publisher_security_mode dan informasi masuk SQL Server untuk @publisher_login dan @publisher_password.

  2. Jika perlu, buat pekerjaan Agen Pembaca Antrean untuk Distributor.

    • Jika pekerjaan Agen Pembaca Antrean sudah ada untuk database distribusi, lanjutkan ke langkah 3.

    • Jika Anda tidak yakin apakah tugas Agen Pembaca Antrean ada untuk database distribusi, jalankan sp_helpqreader_agent (Transact-SQL) pada Distributor untuk database distribusi. Jika kumpulan hasil kosong, tugas Queue Reader Agent harus dibuat.

    • Di Distributor, jalankan sp_addqreader_agent (Transact-SQL). Tentukan kredensial Windows tempat agen berjalan untuk @job_name dan @password. Kredensial ini digunakan saat Queue Reader Agent terhubung ke Publisher dan Subscriber. Untuk informasi selengkapnya, lihat Model Keamanan Agen Replikasi.

  3. Jalankan sp_addpublication (Transact-SQL), dengan menentukan nilai true untuk parameter @allow_queued_tran dan nilai pub wins, sub reinit, atau sub wins untuk parameter @conflict_policy.

  4. Di Publisher, jalankan sp_addpublication_snapshot (Transact-SQL). Tentukan nama publikasi yang digunakan di langkah 3 untuk @publication dan kredensial Windows tempat Agen Rekam Jepret berjalan untuk @snapshot_job_name dan @password. Jika agen akan menggunakan Autentikasi SQL Server saat menyambungkan ke Publisher, Anda juga harus menentukan nilai 0 untuk @publisher_security_mode dan informasi masuk SQL Server untuk @publisher_login dan @publisher_password. Ini membuat pekerjaan Agen Rekam Jepret untuk publikasi.

  5. Tambahkan artikel ke publikasi. Untuk informasi selengkapnya, lihat Menentukan Artikel.

  6. Pada Subscriber, buat langganan yang dapat diperbarui untuk publikasi ini.

Untuk mengubah kebijakan konflik untuk publikasi yang mengizinkan langganan pembaruan berantrian

  1. Di Publisher pada database publikasi, jalankan sp_changepublication (Transact-SQL). Tentukan nilai conflict_policy untuk @property dan mode kebijakan konflik yang diinginkan, yaitu pub wins, sub reinit, atau sub wins untuk @value.

Contoh (Transact-SQL)

Contoh ini membuat publikasi yang mendukung langganan pull yang dapat diperbarui, baik segera maupun dalam antrean.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks2022]
-- Enable transactional replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2022]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO