Bagikan melalui


sp_reinitsubscription (T-SQL)

Berlaku untuk: SQL Server Azure SQL Managed Instance

Menandai langganan untuk reinisialisasi. Prosedur tersimpan ini dijalankan di Publisher untuk langganan push.

Konvensi sintaks transact-SQL

Sintaks

sp_reinitsubscription
    [ [ @publication = ] N'publication' ]
    [ , [ @article = ] N'article' ]
    , [ @subscriber = ] N'subscriber'
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @for_schema_change = ] for_schema_change ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @ignore_distributor_failure = ] ignore_distributor_failure ]
    [ , [ @invalidate_snapshot = ] invalidate_snapshot ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, dengan default all.

[ @article = ] N'article'

Nama artikel. @article adalah sysname, dengan default all. Untuk publikasi yang segera diperbarui, @article harus all. Jika tidak, prosedur tersimpan melewati publikasi dan melaporkan kesalahan.

[ @subscriber = ] N'pelanggan'

Nama Pelanggan. @subscriber adalah sysname, tanpa default.

[ @destination_db = ] N'destination_db'

Nama database tujuan. @destination_db adalah sysname, dengan default all.

[ @for_schema_change = ] for_schema_change

Menunjukkan apakah reinitialisasi terjadi sebagai akibat dari perubahan skema di database publikasi. @for_schema_change adalah bit, dengan default .0

  • Jika 0, langganan aktif untuk publikasi yang memungkinkan pembaruan segera diaktifkan kembali selama seluruh publikasi, dan bukan hanya beberapa artikelnya, diinisialisasi ulang. Ini berarti bahwa reinitialisasi sedang dimulai sebagai akibat dari perubahan skema.

  • Jika 1, langganan aktif tidak diaktifkan kembali hingga Agen Rekam Jepret berjalan.

[ @publisher = ] N'publisher'

Menentukan penerbit non-SQL Server. @publisher adalah sysname, dengan default NULL.

@publisher tidak boleh digunakan untuk Penerbit SQL Server.

[ @ignore_distributor_failure = ] ignore_distributor_failure

Memungkinkan reinisialisasi bahkan jika Distributor tidak ada atau offline. @ignore_distributor_failure adalah bit, dengan default 0. Jika 0, reinitialisasi gagal jika Distributor tidak ada atau offline.

[ @invalidate_snapshot = ] invalidate_snapshot

Membatalkan rekam jepret publikasi yang ada. @invalidate_snapshot adalah bit, dengan default 0. Jika 1, rekam jepret baru dibuat untuk publikasi.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_reinitsubscription digunakan dalam replikasi transaksional.

sp_reinitsubscription tidak didukung untuk replikasi transaksional peer-to-peer.

Untuk langganan di mana rekam jepret awal diterapkan secara otomatis dan di mana publikasi tidak mengizinkan langganan yang dapat diperbarui, Agen Rekam Jepret harus dijalankan setelah prosedur tersimpan ini dijalankan sehingga skema dan file program salin massal disiapkan dan Agen Distribusi kemudian dapat menyinkronkan ulang langganan.

Untuk langganan tempat rekam jepret awal diterapkan secara otomatis, dan publikasi memungkinkan langganan yang dapat diperbarui, Agen Distribusi menyinkronkan ulang langganan menggunakan skema terbaru dan file program salin massal yang sebelumnya dibuat oleh Agen Rekam Jepret. Agen Distribusi menyinkronkan ulang langganan segera setelah pengguna menjalankan sp_reinitsubscription, jika Agen Distribusi tidak sibuk. Jika tidak, sinkronisasi mungkin terjadi setelah interval pesan (ditentukan oleh parameter MessageIntervalperintah Agen Distribusi ).

sp_reinitsubscription tidak berpengaruh pada langganan tempat rekam jepret awal diterapkan secara manual.

Untuk menyinkronkan ulang langganan anonim ke publikasi, teruskan all atau NULL sebagai @subscriber.

Replikasi transaksional mendukung reinisialisasi langganan di tingkat artikel. Rekam jepret artikel diterapkan kembali di Pelanggan selama sinkronisasi berikutnya setelah artikel ditandai untuk reinisialisasi. Namun, jika ada artikel dependen yang juga berlangganan oleh Pelanggan yang sama, menerapkan kembali rekam jepret pada artikel mungkin gagal kecuali artikel dependen dalam publikasi juga secara otomatis diinisialisasi ulang dalam keadaan tertentu:

  • Jika perintah prakreasi pada artikel adalah drop, artikel untuk tampilan terikat skema dan prosedur tersimpan terikat skema pada objek dasar artikel tersebut juga ditandai untuk reinisialisasi.

  • Jika opsi skema pada artikel menyertakan pembuatan skrip integritas referensial yang dinyatakan pada kunci primer, artikel yang memiliki tabel dasar, dengan hubungan kunci asing ke tabel dasar artikel yang diinisialisasi ulang, juga ditandai untuk reinitialisasi.

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 @subscriptionDB AS sysname;
DECLARE @publication AS sysname;
SET @subscriptionDB = N'AdventureWorks2022Replica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2022Replica]

-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription 
    @subscriber = $(SubServer),
    @destination_db = @subscriptionDB,
    @publication = @publication;
GO

-- Start the Distribution Agent.

Izin

Hanya anggota peran server tetap sysadmin , anggota peran database tetap db_owner , atau pembuat langganan yang dapat menjalankan sp_reinitsubscription.