Bagikan melalui


sp_addsubscription (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Database

Menambahkan langganan ke publikasi dan menetapkan status Pelanggan. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_addsubscription
    [ @publication = ] N'publication'
    [ , [ @article = ] N'article' ]
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @sync_type = ] N'sync_type' ]
    [ , [ @status = ] N'status' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @loopback_detection = ] N'loopback_detection' ]
    [ , [ @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 ]
    [ , [ @optional_command_line = ] N'optional_command_line' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @offloadagent = ] offloadagent ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @backupdevicetype = ] N'backupdevicetype' ]
    [ , [ @backupdevicename = ] N'backupdevicename' ]
    [ , [ @mediapassword = ] N'mediapassword' ]
    [ , [ @password = ] N'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]
    [ , [ @memory_optimized = ] memory_optimized ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, tanpa default.

[ @article = ] N'article'

Artikel tempat publikasi berlangganan. @article adalah sysname, dengan default all. Jika all, langganan ditambahkan ke semua artikel dalam publikasi tersebut. Hanya nilai all atau NULL yang didukung untuk Oracle Publishers.

[ @subscriber = ] N'pelanggan'

Nama Pelanggan. @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.

[ @destination_db = ] N'destination_db'

Nama database tujuan untuk menempatkan data yang direplikasi. @destination_db adalah sysname, dengan default NULL. Ketika NULL, @destination_db diatur ke nama database publikasi. Untuk Penerbit Oracle, @destination_db harus ditentukan. Untuk Pelanggan non-SQL Server, tentukan nilai (tujuan default) untuk @destination_db.

[ @sync_type = ] N'sync_type'

Jenis sinkronisasi langganan. @sync_type adalah nvarchar(255), dan bisa menjadi salah satu nilai berikut:

Nilai Description
none1 Pelanggan sudah memiliki skema dan data awal untuk tabel yang diterbitkan.
automatic (default) Skema dan data awal untuk tabel yang diterbitkan ditransfer ke Pelanggan terlebih dahulu.
replication support only2 Menyediakan pembuatan otomatis di Pelanggan artikel prosedur dan pemicu tersimpan kustom yang mendukung pembaruan langganan, jika sesuai. Mengasumsikan bahwa Pelanggan sudah memiliki skema dan data awal untuk tabel yang diterbitkan. Saat mengonfigurasi topologi replikasi transaksional peer-to-peer, pastikan bahwa data di semua node dalam topologi identik. Untuk informasi selengkapnya, lihat Peer-to-Peer - Replikasi Transaksional.
initialize with backup2 Skema dan data awal untuk tabel yang diterbitkan diperoleh dari cadangan database publikasi. Mengasumsikan bahwa Pelanggan memiliki akses ke cadangan database publikasi. Lokasi pencadangan dan jenis media untuk cadangan ditentukan oleh @backupdevicename dan @backupdevicetype. Saat menggunakan opsi ini, topologi replikasi transaksional peer-to-peer tidak perlu dihentikan selama konfigurasi.
initialize from lsn Digunakan saat Anda menambahkan simpul ke topologi replikasi transaksional peer-to-peer. Digunakan dengan @subscriptionlsn untuk memastikan bahwa semua transaksi yang relevan direplikasi ke simpul baru. Mengasumsikan bahwa Pelanggan sudah memiliki skema dan data awal untuk tabel yang diterbitkan. Untuk informasi selengkapnya, lihat Peer-to-Peer - Replikasi Transaksional.

1 Opsi ini tidak digunakan lagi. Gunakan dukungan replikasi saja sebagai gantinya.

2 Tidak didukung untuk langganan ke publikasi non-SQL Server.

Catatan

Tabel dan data sistem selalu ditransfer.

[ @status = ] N'status'

Status langganan. @status adalah sysname, dengan default NULL. Ketika parameter ini tidak diatur secara eksplisit, replikasi secara otomatis mengaturnya ke salah satu nilai ini.

Nilai Deskripsi
active Langganan diinisialisasi dan siap menerima perubahan. Opsi ini diatur ketika nilai @sync_type tidak ada, diinisialisasi dengan cadangan, atau dukungan replikasi saja.
subscribed Langganan perlu diinisialisasi. Opsi ini diatur ketika nilai @sync_type otomatis.

[ @subscription_type = ] N'subscription_type'

Jenis langganan. @subscription_type adalah nvarchar(4), dengan default push. Bisa push atau pull. Agen Distribusi langganan push berada di Distributor, dan Agen Distribusi langganan penarikan berada di Pelanggan. @subscription_type bisa pull membuat langganan pull bernama yang diketahui oleh Publisher. Untuk informasi selengkapnya, lihat Berlangganan Publikasi.

Catatan

Langganan anonim tidak perlu menggunakan prosedur tersimpan ini.

[ @update_mode = ] N'update_mode'

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

Nilai Deskripsi
read only (default) Langganan bersifat baca-saja. Perubahan di Pelanggan tidak dikirim ke Penerbit.
sync tran Memungkinkan dukungan untuk segera memperbarui langganan. Tidak didukung untuk Oracle Publishers.
queued tran Mengaktifkan langganan untuk pembaruan antrean. Modifikasi data dapat dilakukan di Pelanggan, disimpan dalam antrean, lalu disebarluaskan ke Penerbit. Tidak didukung untuk Oracle Publishers.
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 tersambung, mode pembaruan dapat diubah sehingga modifikasi data yang dilakukan pada Pelanggan disimpan dalam antrean hingga Pelanggan dan Penerbit terhubung kembali. Tidak didukung untuk Oracle Publishers.
queued failover 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. Tidak didukung untuk Oracle Publishers.

sync tran Nilai dan queued tran tidak diizinkan jika publikasi berlangganan untuk mengizinkan DTS.

[ @loopback_detection = ] N'loopback_detection'

Menentukan apakah Agen Distribusi mengirim transaksi yang berasal dari Pelanggan kembali ke Pelanggan. @loopback_detection adalah nvarchar(5), dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
true Agen Distribusi tidak mengirim transaksi yang berasal dari Pelanggan kembali ke Pelanggan. Digunakan dengan replikasi transaksional dua arah. Untuk informasi selengkapnya, lihat Replikasi Transaksional Dua Arah.
false Agen Distribusi mengirimkan transaksi yang berasal dari Pelanggan kembali ke Pelanggan.
NULL (default) Secara otomatis diatur ke true untuk Pelanggan SQL Server dan false untuk Pelanggan non-SQL Server.

[ @frequency_type = ] frequency_type

Frekuensi untuk menjadwalkan tugas distribusi. @frequency_type int, dan bisa menjadi salah satu nilai ini.

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

[ @frequency_interval = ] frequency_interval

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

[ @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 ini.

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

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

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

[ @frequency_subday = ] frequency_subday

Seberapa sering, dalam hitungan menit, untuk menjadwalkan ulang selama periode yang ditentukan. @frequency_subday int, dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
1 Satu kali
2 Detik
4 Menit
8 Jam
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

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

[ @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 NULL.

[ @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 NULL.

[ @active_start_date = ] active_start_date

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

[ @active_end_date = ] active_end_date

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

[ @optional_command_line = ] N'optional_command_line'

Perintah opsional untuk dijalankan. @optional_command_line adalah nvarchar(4000), dengan default NULL.

[ @reserved = ] N'reserved'

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

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Apakah langganan dapat disinkronkan melalui Pengelola Sinkronisasi Windows. @enabled_for_syncmgr adalah nvarchar(5), dengan default NULL, yang sama falsedengan . Jika false, langganan tidak terdaftar di Windows Synchronization Manager. Jika true, langganan terdaftar di Pengelola Sinkronisasi Windows dan dapat disinkronkan tanpa memulai SQL Server Management Studio. Tidak didukung untuk Oracle Publishers.

[ @offloadagent = ] offloadagent

Menentukan bahwa agen dapat diaktifkan dari jarak jauh. @offloadagent adalah bit, dengan default 0.

Catatan

Parameter ini tidak digunakan lagi dan hanya dipertahankan untuk kompatibilitas skrip mundur.

[ @offloadserver = ] N'offloadserver'

Menentukan nama jaringan server yang akan digunakan untuk aktivasi jarak jauh. @offloadserver adalah sysname, dengan default NULL.

[ @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 paket DTSPub_Package, parameternya adalah @dts_package_name = N'DTSPub_Package'. Parameter ini tersedia untuk langganan push. Untuk menambahkan informasi paket DTS ke langganan penarikan, gunakan sp_addpullsubscription_agent.

[ @dts_package_password = ] N'dts_package_password'

Menentukan kata sandi pada paket, jika ada. @dts_package_password adalah sysname, dengan default NULL.

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 NULL, yang sama dengan distributor. Lokasi paket bisa atau distributorsubscriber.

[ @distribution_job_name = ] N'distribution_job_name'

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

[ @publisher = ] N'publisher'

Menentukan Penerbit Non-SQL Server. @publisher adalah sysname, dengan default NULL.

Catatan

@publisher tidak boleh ditentukan untuk Penerbit SQL Server.

[ @backupdevicetype = ] N'backupdevicetype'

Menentukan jenis perangkat cadangan yang digunakan saat menginisialisasi Pelanggan dari cadangan. @backupdevicetype adalah nvarchar(20), dan bisa menjadi salah satu nilai berikut:

Nilai Deskripsi
logical (default) Perangkat cadangan adalah perangkat logis
disk Perangkat cadangan adalah drive disk
tape Perangkat cadangan adalah tape drive

@backupdevicetype hanya digunakan saat @sync_method diatur ke initialize_with_backup.

[ @backupdevicename = ] N'backupdevicename'

Menentukan nama perangkat yang digunakan saat menginisialisasi Pelanggan dari cadangan. @backupdevicename adalah nvarchar(1000), dengan default NULL.

[ @mediapassword = ] N'mediapassword'

Menentukan kata sandi untuk set media jika kata sandi disetel ketika media diformat. @mediapassword adalah sysname, dengan default NULL.

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.

[ @password = ] N'password'

Menentukan kata sandi untuk cadangan jika kata sandi diatur ketika cadangan dibuat. @password adalah sysname, dengan default NULL.

[ @fileidhint = ] fileidhint

Mengidentifikasi nilai ordinal dari kumpulan cadangan yang akan dipulihkan. @fileidhint int, dengan default NULL.

[ @unload = ] bongkar

Menentukan apakah perangkat cadangan pita harus dibongkar setelah inisialisasi dari belakang selesai. @unload adalah bit, dengan default 1, yang menentukan bahwa pita harus dibongkar. @unload hanya digunakan ketika @backupdevicetype adalah tape.

[ @subscriptionlsn = ] subscriptionlsn

Menentukan nomor urutan log (LSN) di mana langganan harus mulai mengirimkan perubahan pada simpul dalam topologi replikasi transaksional peer-to-peer. @subscriptionlsn adalah biner(10), dengan default NULL. Digunakan dengan nilai initialize from lsn @sync_type untuk memastikan bahwa semua transaksi yang relevan direplikasi ke simpul baru. Untuk informasi selengkapnya, lihat Peer-to-Peer - Replikasi Transaksional.

[ @subscriptionstreams = ] aliran langganan

Jumlah koneksi yang diizinkan per Agen Distribusi untuk menerapkan batch perubahan secara paralel ke Pelanggan, sambil mempertahankan banyak karakteristik transaksional yang ada saat menggunakan satu utas. @subscriptionstreams kecil, dengan default NULL. Rentang nilai dari 1 ke 64 didukung. Parameter ini tidak didukung untuk langganan pelanggan non-SQL Server, Penerbit Oracle, atau peer-to-peer. Setiap kali @subscriptionstreams digunakan, baris tambahan ditambahkan dalam msreplication_subscriptions tabel (satu baris per aliran) dengan diatur agent_id ke NULL.

Catatan

Aliran langganan tidak berfungsi untuk artikel yang dikonfigurasi untuk mengirimkan Transact-SQL. Untuk menggunakan aliran langganan, konfigurasikan artikel untuk mengirimkan panggilan prosedur tersimpan sebagai gantinya.

[ @subscriber_type = ] subscriber_type

Jenis Pelanggan. @subscriber_type kecil, dan bisa menjadi salah satu nilai ini.

Nilai Deskripsi
0 (default) Pelanggan SQL Server
1 Server sumber data ODBC
2 Database Microsoft Jet
3 Penyedia OLE DB

[ @memory_optimized = ] memory_optimized

Menunjukkan bahwa langganan mendukung tabel memori yang dioptimalkan. @memory_optimized adalah bit, dengan default 0 (false). 1 (true) berarti langganan mendukung tabel memori yang dioptimalkan.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_addsubscription digunakan dalam replikasi rekam jepret dan replikasi transaksional.

Ketika sp_addsubscription dijalankan oleh anggota peran server tetap sysadmin untuk membuat langganan push, pekerjaan Agen Distribusi dibuat dan dijalankan secara implisit di bawah akun layanan SQL Server Agent. Kami menyarankan agar Anda menjalankan sp_addpushsubscription_agent dan menentukan kredensial akun Windows khusus agen yang berbeda untuk @job_login dan @job_password. Untuk informasi selengkapnya, lihat Model Keamanan Agen Replikasi.

sp_addsubscription mencegah akses Pelanggan ODBC dan OLE DB ke publikasi yang:

  • Dibuat dengan @sync_method asli dalam panggilan ke sp_addpublication.

  • Berisi artikel yang ditambahkan ke publikasi dengan prosedur tersimpan sp_addarticle yang memiliki nilai parameter @pre_creation_cmd 3 (potong).

  • Coba atur @update_mode ke sync tran.

  • Memiliki artikel yang dikonfigurasi untuk menggunakan pernyataan berparameter.

Selain itu, jika publikasi memiliki opsi @allow_queued_tran diatur ke true (yang memungkinkan antrean perubahan di Pelanggan hingga dapat diterapkan di Penerbit), kolom tanda waktu dalam artikel diskrip sebagai tanda waktu, dan perubahan pada kolom tersebut dikirim ke Pelanggan. Pelanggan menghasilkan dan memperbarui nilai kolom tanda waktu. Untuk Pelanggan ODBC atau OLE DB, sp_addsubscription gagal jika upaya dilakukan untuk berlangganan publikasi yang memiliki @allow_queued_tran diatur ke true dan artikel dengan kolom tanda waktu di dalamnya.

Jika langganan tidak menggunakan paket DTS, langganan tidak dapat berlangganan publikasi yang diatur ke @allow_transformable_subscriptions. Jika tabel dari publikasi perlu direplikasi ke langganan DTS dan langganan non-DTS, dua publikasi terpisah harus dibuat: satu untuk setiap jenis langganan.

Saat memilih opsi replication support onlysync_type , , initialize with backupatau initialize from lsn, agen pembaca log harus berjalan setelah menjalankan sp_addsubscription, sehingga skrip penyiapan ditulis ke database distribusi. Agen pembaca log harus berjalan di bawah akun yang merupakan anggota peran server tetap sysadmin . Ketika opsi @sync_type diatur ke Automatic, tidak ada tindakan agen pembaca log khusus yang diperlukan.

Izin

Hanya anggota peran server tetap sysadmin atau peran database tetap db_owner yang dapat menjalankan sp_addsubscription. Untuk langganan penarikan, pengguna dengan login dalam daftar akses publikasi dapat menjalankan sp_addsubscription.

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