sp_addpullsubscription (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Menambahkan langganan penarikan ke rekam jepret atau publikasi transaksi. Prosedur tersimpan ini dijalankan di Pelanggan pada database tempat langganan penarikan akan dibuat.

Konvensi sintaks transact-SQL

Sintaks

sp_addpullsubscription
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @publication = ] N'publication'
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @description = ] N'description' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @immediate_sync = ] immediate_sync ]
[ ; ]

Argumen

[ @publisher = ] N'publisher'

Nama Publisher. @publisher adalah sysname, tanpa default.

Catatan

Nama server dapat ditentukan sebagai <Hostname>,<PortNumber>. Tentukan nomor port untuk koneksi Anda saat SQL Server disebarkan di Linux atau Windows dengan port kustom, dan layanan browser dinonaktifkan. Penggunaan nomor port kustom untuk distributor jarak jauh berlaku untuk SQL Server 2019 (15.x) dan versi yang lebih baru.

[ @publisher_db = ] N'publisher_db'

Nama database Publisher. @publisher_db adalah sysname, dengan default NULL. @publisher_db diabaikan oleh Oracle Publishers.

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, tanpa default.

[ @independent_agent = ] N'independent_agent'

Menentukan apakah ada Agen Distribusi yang berdiri sendiri untuk publikasi ini. @independent_agent adalah nvarchar(5), dengan default true.

  • Jika true, ada Agen Distribusi yang berdiri sendiri untuk publikasi ini.
  • Jika false, ada satu Agen Distribusi untuk setiap database Penerbit/pasangan database Pelanggan.

@independent_agent adalah properti publikasi dan harus memiliki nilai yang sama dengan Penerbit.

[ @subscription_type = ] N'subscription_type'

Jenis langganan. @subscription_type adalah nvarchar(9), dengan default anonymous. Anda harus menentukan nilai pull untuk @subscription_type, kecuali Anda ingin membuat langganan tanpa mendaftarkan langganan di Publisher. Dalam hal ini, Anda harus menentukan nilai anonymous. Ini diperlukan untuk kasus di mana Anda tidak dapat membuat koneksi SQL Server ke Publisher selama konfigurasi langganan.

[ @description = ] N'description'

Penjabaran dari publikasi. @description adalah nvarchar(100), dengan default NULL.

[ @update_mode = ] N'update_mode'

Jenis pembaruan. @update_mode adalah nvarchar(30), dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
read only (default) Langganan bersifat baca-saja. Setiap perubahan di Pelanggan tidak dikirim kembali ke Penerbit. Harus digunakan saat pembaruan tidak dilakukan di Pelanggan.
synctran Memungkinkan dukungan untuk segera memperbarui langganan.
queued tran Mengaktifkan langganan untuk pembaruan antrean. Modifikasi data dapat dilakukan di Pelanggan, disimpan dalam antrean, lalu disebarluaskan ke Penerbit.
failover Memungkinkan langganan untuk segera diperbarui dengan pembaruan antrean sebagai failover. Modifikasi data dapat dilakukan di Pelanggan dan disebarluaskan ke Penerbit segera. Jika Penerbit dan Pelanggan tidak terhubung, modifikasi data yang dilakukan di Pelanggan dapat disimpan dalam antrean hingga Pelanggan dan Penerbit terhubung kembali.
queued failover Catatan: Tidak didukung untuk Oracle Publishers.

Mengaktifkan langganan sebagai langganan pembaruan antrean dengan kemampuan untuk mengubah ke mode pembaruan segera. Modifikasi data dapat dilakukan di Pelanggan dan disimpan dalam antrean hingga koneksi dibuat antara Pelanggan dan Penerbit. Ketika koneksi berkelanjutan dibuat, mode pembaruan dapat diubah untuk segera diperbarui.

[ @immediate_sync = ] immediate_sync

Menentukan apakah file sinkronisasi dibuat atau dibuat ulang setiap kali Agen Rekam Jepret berjalan. @immediate_sync adalah bit, dengan default 1, dan harus diatur ke nilai yang sama dengan @immediate_sync dalam sp_addpublication (Transact-SQL). @immediate_sync adalah properti publikasi dan harus memiliki nilai yang sama dengan Publisher.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_addpullsubscription digunakan dalam replikasi rekam jepret dan replikasi transaksional.

Penting

Untuk mengantre memperbarui langganan, gunakan Autentikasi SQL Server untuk koneksi ke Pelanggan, dan tentukan akun yang berbeda untuk koneksi ke setiap Pelanggan. Saat membuat langganan pull yang mendukung pembaruan antrean, replikasi selalu mengatur koneksi untuk menggunakan Autentikasi Windows (untuk langganan penarikan, replikasi tidak dapat mengakses metadata di Pelanggan yang diperlukan untuk menggunakan Autentikasi SQL Server). Dalam hal ini, Anda harus menjalankan sp_changesubscription untuk mengubah koneksi untuk menggunakan Autentikasi SQL Server setelah langganan dikonfigurasi.

Jika tabel MSreplication_subscriptions (Transact-SQL) tidak ada di Pelanggan, sp_addpullsubscription buatlah. Ini juga menambahkan baris ke tabel MSreplication_subscriptions (Transact-SQL). Untuk langganan penarikan, sp_addsubscription (Transact-SQL) harus dipanggil di Penerbit terlebih dahulu.

Contoh

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Izin

Hanya anggota peran server tetap sysadmin atau peran database tetap db_owner yang dapat menjalankan sp_addpullsubscription.