Bagikan melalui


sp_addpushsubscription_agent (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Menambahkan pekerjaan agen terjadwal baru yang digunakan untuk menyinkronkan langganan push ke publikasi transaksional. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Penting

Saat mengonfigurasi Penerbit dengan Distributor jarak jauh, nilai yang disediakan untuk semua parameter, termasuk job_login dan job_password, dikirim ke Distributor sebagai teks biasa. Anda harus mengenkripsi koneksi antara Publisher dan Distributor jarak jauhnya sebelum menjalankan prosedur tersimpan ini. Untuk informasi selengkapnya, lihat Mengonfigurasi Mesin Database SQL Server untuk mengenkripsi koneksi.

Konvensi sintaks transact-SQL

Sintaks

sp_addpushsubscription_agent
    [ @publication = ] N'publication'
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @subscriber_db = ] N'subscriber_db' ]
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] N'subscriber_login' ]
    [ , [ @subscriber_password = ] N'subscriber_password' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @subscriber_provider = ] N'subscriber_provider' ]
    [ , [ @subscriber_datasrc = ] N'subscriber_datasrc' ]
    [ , [ @subscriber_location = ] N'subscriber_location' ]
    [ , [ @subscriber_provider_string = ] N'subscriber_provider_string' ]
    [ , [ @subscriber_catalog = ] N'subscriber_catalog' ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, tanpa default.

[ @subscriber = ] N'pelanggan'

Nama instans Pelanggan, atau nama pendengar AG jika database pelanggan adalah bagian dari grup ketersediaan. @subscriber adalah sysname, dengan default NULL.

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.

[ @subscriber_db = ] N'subscriber_db'

Nama database langganan. @subscriber_db adalah sysname, dengan default NULL.

Untuk Pelanggan non-SQL Server, tentukan nilai (tujuan default) untuk subscriber_db.

[ @subscriber_security_mode = ] subscriber_security_mode

Catatan

ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).

Mode keamanan yang digunakan saat menyambungkan ke Pelanggan saat menyinkronkan. @subscriber_security_mode kecil, dengan default 1. Nilai berikut menentukan mode keamanan:

  • 0 menentukan autentikasi SQL Server.
  • 1 menentukan autentikasi Windows.
  • 2 menentukan autentikasi kata sandi Microsoft Entra yang dimulai dengan SQL Server 2022 (16.x) CU 6.
  • 3 menentukan autentikasi terintegrasi Microsoft Entra yang dimulai dengan SQL Server 2022 (16.x) CU 6.
  • 4 menentukan autentikasi token Microsoft Entra yang dimulai dengan SQL Server 2022 (16.x) CU 6.

Penting

Untuk mengantre memperbarui langganan, gunakan Autentikasi SQL Server untuk koneksi ke Pelanggan, dan tentukan akun yang berbeda untuk koneksi ke setiap Pelanggan. Untuk semua langganan lainnya, gunakan Autentikasi Windows.

[ @subscriber_login = ] N'subscriber_login'

Login Pelanggan untuk digunakan saat menyambungkan ke Pelanggan saat menyinkronkan. @subscriber_login adalah sysname, dengan default NULL.

[ @subscriber_password = ] N'subscriber_password'

Kata sandi Pelanggan. subscriber_password diperlukan jika subscriber_security_mode diatur ke 0. @subscriber_password adalah sysname, dengan default NULL. Jika kata sandi pelanggan digunakan, kata sandi tersebut akan dienkripsi secara otomatis.

Penting

Jangan gunakan kata sandi kosong. Gunakan kata sandi yang kuat. 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.

[ @job_login = ] N'job_login'

Login untuk akun tempat agen berjalan. Di Azure SQL Managed Instance, gunakan akun SQL Server. @job_login adalah nvarchar(257), dengan default NULL. Akun Windows ini selalu digunakan untuk koneksi agen ke Distributor dan untuk koneksi ke Pelanggan saat menggunakan autentikasi Terintegrasi Windows.

[ @job_password = ] N'job_password'

Kata sandi untuk akun tempat agen berjalan. @job_password adalah sysname, tanpa default.

Penting

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.

[ @job_name = ] N'job_name'

Nama pekerjaan agen yang ada. @job_name adalah sysname, dengan default NULL. Parameter ini hanya ditentukan ketika langganan disinkronkan menggunakan pekerjaan yang ada, alih-alih pekerjaan yang baru dibuat (default). Jika Anda bukan anggota peran server tetap sysadmin , Anda harus menentukan @job_login dan @job_password saat menentukan @job_name.

[ @frequency_type = ] frequency_type

Frekuensi untuk menjadwalkan Agen Distribusi. @frequency_type int, dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
1 Satu kali
2 Sesuai permintaan
4 Harian
8 Mingguan
16 Bulanan
32 Relatif bulanan
64 (default) Autostart
128 Berulang

Catatan

Menentukan nilai 64 menyebabkan Agen Distribusi berjalan dalam mode berkelanjutan. Ini sesuai dengan pengaturan -Continuous parameter untuk agen. Untuk informasi selengkapnya, lihat Agen Distribusi Replikasi.

[ @frequency_interval = ] frequency_interval

Nilai yang akan diterapkan ke frekuensi yang ditetapkan oleh @frequency_type. @frequency_interval int, dengan default 1.

[ @frequency_relative_interval = ] frequency_relative_interval

Tanggal Agen Distribusi. Parameter ini digunakan ketika frequency_type diatur ke 32 (relatif bulanan). @frequency_relative_interval int, dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
1 (default) First
2 Detik
4 Ketiga
8 Keempat
16 Last

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Faktor pengulangan yang digunakan oleh @frequency_type. @frequency_recurrence_factor int, dengan default 0.

[ @frequency_subday = ] frequency_subday

Menentukan seberapa sering untuk menjadwalkan ulang selama periode yang ditentukan. @frequency_subday int, dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
1 Satu kali
2 Detik
4 (default) Menit
8 Jam

[ @frequency_subday_interval = ] frequency_subday_interval

Interval untuk @frequency_subday. @frequency_subday_interval int, dengan default 5.

[ @active_start_time_of_day = ] active_start_time_of_day

Waktu hari ketika Agen Distribusi pertama kali dijadwalkan, diformat sebagai HHmmss. @active_start_time_of_day int, dengan default 0.

[ @active_end_time_of_day = ] active_end_time_of_day

Waktu hari ketika Agen Distribusi berhenti dijadwalkan, diformat sebagai HHmmss. @active_end_time_of_day int, dengan default 235959.

[ @active_start_date = ] active_start_date

Tanggal ketika Agen Distribusi pertama kali dijadwalkan, diformat sebagai yyyyMMdd. @active_start_date int, dengan default 0.

[ @active_end_date = ] active_end_date

Tanggal ketika Agen Distribusi berhenti dijadwalkan, diformat sebagai yyyyMMdd. @active_end_date int, dengan default 99991231.

[ @dts_package_name = ] N'dts_package_name'

Menentukan nama paket Data Transformation Services (DTS). @dts_package_name adalah sysname, dengan default NULL. Misalnya, untuk menentukan nama DTSPub_Packagepaket , parameternya adalah @dts_package_name = N'DTSPub_Package'.

[ @dts_package_password = ] N'dts_package_password'

Menentukan kata sandi yang diperlukan untuk menjalankan paket. @dts_package_password adalah sysname, dengan default NULL, yang berarti paket tidak memiliki kata sandi.

Catatan

Anda harus menentukan kata sandi jika @dts_package_name ditentukan.

[ @dts_package_location = ] N'dts_package_location'

Menentukan lokasi paket. @dts_package_location adalah nvarchar(12), dengan default distributor. Lokasi paket bisa atau distributorsubscriber.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Menentukan apakah langganan dapat disinkronkan melalui Microsoft Synchronization Manager. @enabled_for_syncmgr adalah nvarchar(5), dengan default false.

  • Jika false, langganan tidak terdaftar di Synchronization Manager.
  • Jika true, langganan terdaftar di Synchronization Manager dan dapat disinkronkan tanpa memulai SQL Server Management Studio.

[ @distribution_job_name = ] N'distribution_job_name'

Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.

[ @publisher = ] N'publisher'

Nama Publisher. @publisher adalah sysname, dengan default NULL.

[ @subscriber_provider = ] N'subscriber_provider'

Pengidentifikasi terprogram unik (PROGID) tempat penyedia OLE DB untuk sumber data non-SQL Server terdaftar. @subscriber_provider adalah sysname, dengan default NULL. @subscriber_provider harus unik untuk penyedia OLE DB yang diinstal pada Distributor. @subscriber_provider hanya didukung untuk Pelanggan non-SQL Server.

[ @subscriber_datasrc = ] N'subscriber_datasrc'

Nama sumber data sebagaimana dipahami oleh penyedia OLE DB.@subscriber_datasrc adalah nvarchar(4000), dengan default NULL. @subscriber_datasrc diteruskan sebagai DBPROP_INIT_DATASOURCE properti untuk menginisialisasi penyedia OLE DB. @subscriber_datasrc hanya didukung untuk Pelanggan non-SQL Server.

[ @subscriber_location = ] N'subscriber_location'

Lokasi database seperti yang dipahami oleh penyedia OLE DB. @subscriber_location adalah nvarchar(4000), dengan default NULL. @subscriber_location diteruskan sebagai DBPROP_INIT_LOCATION properti untuk menginisialisasi penyedia OLE DB. @subscriber_location hanya didukung untuk Pelanggan non-SQL Server.

[ @subscriber_provider_string = ] N'subscriber_provider_string'

string koneksi khusus penyedia OLE DB yang mengidentifikasi sumber data. @subscriber_provider_string adalah nvarchar(4000), dengan default NULL. @subscriber_provider_string diteruskan ke IDataInitialize atau ditetapkan sebagai DBPROP_INIT_PROVIDERSTRING properti untuk menginisialisasi penyedia OLE DB. @subscriber_provider_string hanya didukung untuk Pelanggan non-SQL Server.

[ @subscriber_catalog = ] N'subscriber_catalog'

Katalog yang akan digunakan saat membuat koneksi ke penyedia OLE DB. @subscriber_catalog adalah sysname, dengan default NULL. @subscriber_catalog diteruskan sebagai DBPROP_INIT_CATALOG properti untuk menginisialisasi penyedia OLE DB. @subscriber_catalog hanya didukung untuk Pelanggan non-SQL Server.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_addpushsubscription_agent digunakan dalam replikasi rekam jepret dan replikasi transaksional.

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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Izin

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