共用方式為


在現有發行集中加入和卸除發行項

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

建立發行集後,可以新增或卸除發行項。 發行項可以隨時新增,但卸除發行項所需的動作取決於複寫的類型以及卸除發行項的時機。

加入發行項

新增發行項涉及的動作包括:在發行集中新增發行項、建立發行集的新快照集、同步處理訂閱以套用新發行項的結構描述和資料。

注意

如果您將發行項加入至合併式發行集且現有的某發行項相依於新的發行項,您必須使用 sp_addmergearticlesp_changemergearticle@processing_order參數,來指定兩個發行項的處理順序。 請考慮下列狀況:您發行資料表但未發行該資料表所參考的函數。 如果您未發行該函數,該資料表就無法在「訂閱者」端建立。 當您將函數加入至發行集時:將 sp_addmergearticle@processing_order 參數值指定為 1;將 sp_changemergearticle@processing_order 參數值指定為 2,指定 @article參數的資料表名稱。 此處理順序可確保您先在「訂閱者」端建立函數之後才建立相依於此函數的資料表。 您可對每個發行項使用不同的編號,只要函數的編號低於資料表的編號即可。

  1. 透過下列方法之一新增一或多個發行項:

  2. 新增發行項到發行集後,您必須為發行集 (和所有資料分割,如果該發行集為含參數化篩選的合併式發行集) 建立一個新快照集。 隨後,「散發代理程式」或「合併代理程式」會將新發行項的結構描述和資料複製到「訂閱者」 (不會重新初始化整個發行集)。

  3. 建立快照集後,同步處理訂閱,以複製新發行項的結構描述和資料。

卸除發行項

發行項可以隨時從發行集中卸除,但必須考慮下列行為:

  • 從發行集中卸除發行項不會從發行集資料庫中移除物件,或從訂閱資料庫中移除對應物件。 必要時請使用 DROP <Object> 來移除這些物件。 透過外部索引鍵條件約束來卸除與其他已發行之發行項相關的發行項時,建議您手動或使用視需要的指令碼執行在訂閱者端卸除資料表:指定包含適當的 DROP <Object> 陳述式的指令碼。 如需詳細資訊,請參閱在同步處理期間執行指令碼 (複寫 Transact-SQL 程式設計)

  • 如果合併式發行集的相容性層級為 90RTM 或更高,可以隨時卸除發行項,但需要一個新快照集。 此外:

    • 如果發行項是聯結篩選或邏輯記錄關聯性中的父發行項,則必須先卸除此關聯性 (需要重新初始化)。

    • 如果發行項含發行集中的最終參數化篩選,則訂閱必須重新初始化。

  • 對於相容性層級低於 90RTM 的合併式發行集,可以在訂閱的初始同步處理之前卸除發行項,無需特殊考量。 如果在同步處理一個或多個訂閱後卸除發行項,則必須卸除、重新建立並同步處理訂閱。

  • 對於快照式或交易式發行集,可以在建立訂閱之前卸除發行項,無需特殊考量。 如果在建立一或多個訂閱後卸除發行項,則必須卸除、重新建立並同步處理訂閱。 如需卸除訂閱的詳細資訊,請參閱訂閱發行集sp_dropsubscription (Transact-SQL)sp_dropsubscription 允許您從訂閱中卸除單一發行項,而非整個訂閱。

  1. 從發行集中卸除發行項涉及卸除發行項並建立該發行集的新快照集。 卸除發行項會使目前快照集無效,因此必須建立新快照集。

  2. 從發行集中卸除發行項後,您必須為發行集 (和所有資料分割,如果該發行集為含有參數化篩選的合併式發行集) 建立一個新快照集。

如上所提到的,在某些情況下,卸除發行項需要卸除、重新建立並同步處理訂閱。 如需詳細資訊,請參閱訂閱發行集同步處理資料

注意

SQL Server 2014 (12.x) Service Pack 2 或更新版本和 SQL Server 2016 (13.x) Service Pack 1 或更新版本,支援使用 DROP TABLE DDL 命令為參與異動複寫的發行項卸除資料表。 如果發行集支援 DROP TABLE DDL,則 DROP TABLE 作業會從發行集和資料庫卸除資料表。 記錄讀取器代理程式會為卸除資料表的散發資料庫張貼清理命令,並執行發行者中繼資料的清理。 如果記錄讀取器尚未處理參考卸除資料表的所有記錄檔記錄,就會忽略與卸除資料表建立關聯的新命令。 已處理的記錄會傳遞至散發資料庫中。 如果散發代理程式在記錄讀取器清理過時 (已卸除) 的發行項之前先處理它們,它們可能會套用在訂閱者資料庫上。 所有異動複寫發行集的預設設定為不支援 DROP TABLE DDL。 KB 3170123 具有這項改良功能的更多詳細資料。