sp_reinitsubscription (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'
這是發行集的名稱。publication 是 sysname,預設值是 all。[@article=] 'article'
這是發行項的名稱。article 是 sysname,預設值是 all。如果是立即更新發行集,article 必須是 all;否則,預存程序會略過發行集,且會報告一則錯誤。[@subscriber=] 'subscriber'
這是訂閱者的名稱。subscriber 是 sysname,沒有預設值。[@destination_db=] 'destination_db'
這是目的地資料庫的名稱。destination_db 是 sysname,預設值是 all。[@for_schema_change=] 'for_schema_change'
指出是否因發行集資料庫的結構描述變更而重新初始化。for_schema_change 是 bit,預設值是 0。如果是 0,只要重新初始化整個發行集,而不只是某些發行項,就會重新啟動允許立即更新之發行集的使用中訂閱。這表示會因結構描述變更而重新初始化。如果是 1,在執行快照集代理程式之前,不會重新啟動使用中的訂閱。[ @publisher= ] '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 對手動套用初始快照集的訂閱沒有作用。
若要重新同步處理發行集的匿名訂閱,請將 all 或 NULL 當作 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'AdventureWorksReplica';
SET @publication = N'AdvWorksProductTran';
USE [AdventureWorksReplica]
-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription
@subscriber = $(SubServer),
@destination_db = @subscriptionDB,
@publication = @publication;
GO
-- Start the Distribution Agent.
權限
只有系統管理員 (sysadmin) 固定伺服器角色、db_owner 固定資料庫角色的成員,或訂閱的建立者,才能夠執行 sp_reinitsubscription。