sp_reinitsubscription (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

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

Transact-SQL 語法慣例

語法

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

引數

[ @publication = ] 'publication' 這是發行集的名稱。 publicationsysname,預設值為all。

[ @article = ] 'article' 這是發行項的名稱。 articlesysname,預設值為 all。 如果是立即更新的發行集, 發行項 必須是 全部,否則預存程式會略過發行集並報告錯誤。

[ @subscriber = ] 'subscriber' 這是訂閱者的名稱。 subscribersysname,沒有預設值。

[ @destination_db = ] 'destination_db' 這是目的地資料庫的名稱。 destination_db為 sysname,預設值為all。

[ @for_schema_change = ] 'for_schema_change' 指出是否因為發行集資料庫的架構變更而重新初始化。 for_schema_change為,預設值為0。 如果 為 0,只要整個發行集,而且不只是部分發行項,就會重新啟用允許立即更新之發行集的作用中訂閱。 這表示因為架構變更而起始重新初始化。 如果為 1,在 快照集代理程式 執行之前,不會重新啟用使用中的訂用帳戶。

[ @publisher = ] 'publisher' 指定非 SQL Server 發行者。 publishersysname,預設值為 NULL。

注意

發行者 不應該用於 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對手動套用初始快照集的訂用帳戶沒有任何影響。

若要將匿名訂閱重新同步處理至發行集,請以訂閱者分傳入all或 NULL。

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

  • 如果發行項上的預先建立命令是 『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

另請參閱

重新初始化訂閱
重新初始化訂閱
複寫預存程式 (Transact-SQL)