共用方式為


sp_reinitsubscription (Transact-SQL)

適用於:SQL Server Azure SQL 受控執行個體

標示要重新初始化的訂用帳戶。 此預存程式會在發送訂閱的發行者端執行。

Transact-SQL 語法慣例

語法

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 ]
[ ; ]

引數

[ @publication = ] N'publication'

發行集的名稱。 @publication為 sysname,預設值為 all

[ @article = ] N'article'

發行項的名稱。 @article為 sysname,預設值為 all。 對於立即更新的發行集, @article 必須是 all。 否則,預存程式會略過發行集並報告錯誤。

[ @subscriber = ] N'subscriber'

訂閱者的名稱。 @subscriber為 sysname,沒有預設值。

[ @destination_db = ] N'destination_db'

目的地資料庫的名稱。 @destination_db為 sysname,預設值為 all

[ @for_schema_change = ] for_schema_change

指出是否因為發行集資料庫的架構變更而重新初始化。 @for_schema_change為 bit,預設值為 0

  • 如果 0為 ,則允許立即更新之發行集的作用中訂閱會重新啟用,只要整個發行集,而不只是部分發行項,都會重新初始化。 這表示因為架構變更而起始重新初始化。

  • 如果1為 ,則在執行 快照集代理程式 之前,不會重新啟用使用中的訂用帳戶。

[ @publisher = ] N'publisher'

指定非 SQL Server 發行者。 @publisher為 sysname,預設值為 NULL

@publisher不應該用於 SQL Server 發行者。

[ @ignore_distributor_failure = ] ignore_distributor_failure

即使散發者不存在或離線,仍允許重新初始化。 @ignore_distributor_failure為 bit,預設值為 0。 如果 0為 ,如果散發者不存在或離線,則重新初始化會失敗。

[ @invalidate_snapshot = ] invalidate_snapshot

使現有的發行集快照集失效。 @invalidate_snapshot為 bit,預設值為 0。 如果 1為 ,則會為發行集產生新的快照集。

傳回碼值

0 (成功) 或 1 (失敗)。

備註

sp_reinitsubscription 用於事務複製。

sp_reinitsubscription 對等事務複製不支援。

對於自動套用初始快照集且發行集不允許可更新訂閱的訂閱,在執行此預存程式之後,必須執行 快照集代理程式,以便備妥架構和大量複製程式檔,然後 散發代理程式 就可以重新同步處理訂閱。

對於自動套用初始快照集的訂閱,發行集允許可更新的訂閱,散發代理程式 會使用先前由 快照集代理程式 建立的最新架構和大量複製程序檔來重新同步處理訂閱。 散發代理程式 會在使用者執行 sp_reinitsubscription之後立即重新同步處理訂用帳戶,如果 散發代理程式 不忙碌。 否則,同步處理可能會在訊息間隔之後發生(由 散發代理程式 命令提示字元參數MessageInterval指定)。

sp_reinitsubscription 對手動套用初始快照集的訂用帳戶沒有任何影響。

若要將匿名訂閱重新同步處理至發行集,請傳入 allNULL 作為 @subscriber

事務複製支持發行項層級的訂閱重新初始化。 發行項的快照集會在發行項標示為重新初始化之後,於下一次同步處理期間重新套用到訂閱者端。 不過,如果有相同訂閱者也訂閱的相依發行項,除非發行集中的相依發行項在某些情況下也會自動重新初始化,否則重新套用發行項上的快照集可能會失敗:

  • 如果發行項上的預先建立命令是 drop,該發行項基底對象的架構系結檢視和架構系結預存程式的發行項也會標示為重新初始化。

  • 如果發行項上的架構選項包含主鍵上宣告引用完整性的腳本,則具有基表的發行項,以及重新初始化發行項基表的外鍵關聯性,也會標示為重新初始化。

範例

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

權限

只有系統管理員固定伺服器角色的成員、db_owner固定資料庫角色的成員,或訂閱的建立者可以執行 sp_reinitsubscription