分享方式:


sp_changepublication (Transact-SQL)

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

變更發行集的屬性。 這個預存程式會在發行集資料庫的發行者端執行。

Transact-SQL 語法慣例

語法

sp_changepublication
    [ [ @publication = ] N'publication' ]
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

引數

[ @publication = ] N'publication'

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

[ @property = ] N'property'

要變更的發行集屬性。 @property為 nvarchar(255),預設值為 NULL

[ @value = ] N'value'

新的 屬性值。 @value為 nvarchar(255),預設值為 NULL

下表描述可以變更的發行集屬性,以及這些屬性的值限制。

屬性 數值 Description
allow_anonymous true 匿名訂閱可以針對指定的發行集建立,而且 immediate_sync 也必須是 true。 無法變更點對點發行集。
false 無法為指定的發行集建立匿名訂閱。 無法變更點對點發行集。
allow_initialize_from_backup true 訂閱者可以從備份初始化這個發行集的訂閱,而不是初始快照集。 非 SQL Server 發行集無法變更此屬性。
false 訂閱者必須使用初始快照集。 非 SQL Server 發行集無法變更此屬性。
allow_partition_switch true ALTER TABLE...SWITCH 語句可以針對已發佈的資料庫執行。 如需詳細資訊,請參閱複寫資料分割資料表及索引
false ALTER TABLE...SWITCH 語句無法針對已發佈的資料庫執行。
allow_pull true 指定發行集允許提取訂閱。 非 SQL Server 發行集無法變更此屬性。
false 指定的發行集不允許提取訂閱。 非 SQL Server 發行集無法變更此屬性。
allow_push true 指定發行集允許發送訂閱。
false 指定的發行集不允許發送訂閱。
allow_subscription_copy true 能夠複製訂閱此發行集的資料庫。 非 SQL Server 發行集無法變更此屬性。
false 停用複製訂閱此發行集的資料庫的能力。 非 SQL Server 發行集無法變更此屬性。
alt_snapshot_folder 快照集之替代資料夾的位置。
centralized_conflicts true 衝突記錄會儲存在發行者端。 只有在沒有作用中的訂用帳戶時,才能變更。 非 SQL Server 發行集無法變更此屬性。
false 衝突記錄會同時儲存在發行者端和造成衝突的訂閱者端。 只有在沒有作用中的訂用帳戶時,才能變更。 非 SQL Server 發行集無法變更此屬性。
compress_snapshot true 替代快照集資料夾中的快照集會壓縮成.cab檔格式。 默認快照集資料夾中的快照集無法壓縮。
false 快照集不會壓縮,這是復寫的默認行為。
conflict_policy pub wins 更新發行者贏得衝突之訂閱者的衝突解決原則。 只有在沒有作用中的訂用帳戶時,才能變更此屬性。 Oracle 發行者不支援。
sub reinit 若要更新訂閱者,如果發生衝突,則必須重新初始化訂閱。 只有在沒有作用中的訂用帳戶時,才能變更此屬性。 Oracle 發行者不支援。
sub wins 更新訂閱者在衝突中獲勝之訂閱者的衝突解決原則。 只有在沒有作用中的訂用帳戶時,才能變更此屬性。 Oracle 發行者不支援。
conflict_retention int 值,指定以天為單位的衝突保留期間。 默認保留期為14天。 0 表示不需要衝突清除。 Oracle 發行者不支援。
description 描述發行集的選擇性專案。
enabled_for_het_sub true 可讓發行集支援非 SQL Server 訂閱者。 enabled_for_het_sub 當發行集有訂閱時,無法變更。 您可能需要執行 sp_changepublication ,以符合下列需求,再將 設定 enabled_for_het_sub 為 true:
- allow_queued_tran 必須是 false
- allow_sync_tran 必須是 false
變更 enabled_for_het_subtrue 可能會變更現有的發行集設定。 如需詳細資訊,請參閱 Non-SQL Server Subscribers。 非 SQL Server 發行集無法變更此屬性。
false 發行集不支援非 SQL Server 訂閱者。 非 SQL Server 發行集無法變更此屬性。
enabled_for_internet true 因特網已啟用發行集,而檔傳輸通訊協定 (FTP) 可用來將快照集檔案傳送給訂閱者。 發行集的同步處理檔案會放入下列目錄中: C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftpftp_address 無法是 NULL。 非 SQL Server 發行集無法變更此屬性。
false 未針對因特網啟用發行集。 非 SQL Server 發行集無法變更此屬性。
enabled_for_p2p true 發行集支援點對點複寫。 非 SQL Server 發行集無法變更此屬性。
若要設定 enabled_for_p2ptrue,適用下列限制:
- allow_anonymous 必須是 false
- allow_dts 必須是 false
- allow_initialize_from_backup 必須是 true
- allow_queued_tran 必須是 false
- allow_sync_tran 必須是 false
- enabled_for_het_sub 必須是 false
- independent_agent 必須是 true
- repl_freq 必須是 continuous
- replicate_ddl 必須是 1
false 發行集不支援點對點複寫。 非 SQL Server 發行集無法變更此屬性。
ftp_address 發行集快照集檔案的 FTP 可存取位置。 非 SQL Server 發行集無法變更此屬性。
ftp_login 用來連線到 FTP 服務的使用者名稱,並允許此值 anonymous 。 非 SQL Server 發行集無法變更此屬性。
ftp_password 用來連線到 FTP 服務之使用者名稱的密碼。 非 SQL Server 發行集無法變更此屬性。
ftp_port 散發者的 FTP 服務的埠號碼。 非 SQL Server 發行集無法變更此屬性。
ftp_subdirectory 指定當發行集支援使用 FTP 傳播快照集時,建立快照集檔案的位置。 非 SQL Server 發行集無法變更此屬性。
immediate_sync true 每次執行 快照集代理程式 時,都會建立或重新建立發行集的同步處理檔案。 如果訂閱之前 快照集代理程式 完成一次,訂閱者就能夠立即接收訂閱之後的同步處理檔案。 新的訂用帳戶會取得最近執行 快照集代理程式 所產生的最新同步處理檔案。 independent_agent 也必須是 true。 如需詳細資訊,請參閱 立即同步處理的效果。
false 只有在有新的訂用帳戶時,才會建立同步處理檔案。 訂閱者無法在訂閱之後收到同步處理檔案,直到啟動並完成 快照集代理程式 為止。
independent_agent true 出版物有自己的專用 散發代理程式。
false 發行集使用共用 散發代理程式,而且每個發行集/訂閱資料庫組都有共用代理程式。
p2p_continue_onconflict true 偵測到衝突時,散發代理程式 會繼續處理變更。

注意: 我們建議您使用 的預設值 FALSE。 當此選項設定為 TRUE時,散發代理程式 會從最高原始程式標識碼的節點套用衝突數據列,嘗試聚合拓撲中的數據。 此方法不保證聚合。 您應該確定拓撲在偵測到衝突之後是一致的。 如需詳細資訊,請參閱點對點複寫中的 「處理衝突」- 點對點複寫中的衝突偵測。
false 散發代理程式 會在偵測到衝突時停止處理變更。
post_snapshot_script 指定在初始同步處理期間套用所有其他復寫物件腳本和數據之後,散發代理程式 執行的 Transact-SQL 腳本檔案位置。
pre_snapshot_script 指定在初始同步處理期間套用所有其他復寫物件腳本和數據之前,散發代理程式 執行的 Transact-SQL 腳本檔案位置。
publish_to_ActiveDirectory true 此參數已被取代,而且僅支援腳本的回溯相容性。 您無法再將發行集資訊新增至 Microsoft Active Directory。
false 從 Active Directory 移除發行集資訊。
queue_type sql 使用 SQL Server 來儲存交易。 只有在沒有作用中的訂用帳戶時,才能變更此屬性。

注意: 已停止使用Microsoft消息佇列的支援。 針對 @value指定的值msmq會導致錯誤。
redirected_publisher 可用性群組接聽程序的名稱。 當對等在可用性群組中時,用於點對點複寫。 非 SQL Server 發行集無法變更此屬性。 在 SQL Server 2019 (15.x) CU 13 中引進。 如需詳細資訊,請參閱 將一個對等設定為可用性群組 的一部分,或在 可用性群組中設定這兩個對等。
repl_freq continuous 發佈所有記錄式交易的輸出。
snapshot 只發佈排程的同步處理事件。
replicate_ddl 1 在發行者端執行的數據定義語言 (DDL) 語句會進行複寫。 非 SQL Server 發行集無法變更此屬性。
0 不會復寫 DDL 語句。 非 SQL Server 發行集無法變更此屬性。 使用點對點複寫時,無法停用架構變更的複寫。
replicate_partition_switch true ALTER TABLE...SWITCH 針對已發行資料庫的語句應該復寫至訂閱者。 只有在 設定為 trueallow_partition_switch,此選項才有效。 如需詳細資訊,請參閱複寫資料分割資料表及索引
false ALTER TABLE...SWITCH 語句不應該複寫至訂閱者。
retention int 代表訂用帳戶活動的保留期間,以小時為單位。 如果訂用帳戶未在保留期間內使用中,則會移除。
snapshot_in_defaultfolder true 快照集檔案會儲存在預設快照集資料夾中。 如果 alt_snapshot_folder 也指定,快照集檔案會同時儲存在預設和替代位置中。
false 快照集檔案會儲存在 所 alt_snapshot_folder指定的替代位置。
status active 發行集數據可在建立發行集時立即供訂閱者使用。 Oracle 發行者不支援。
inactive 建立發行集時,訂閱者無法使用發行集數據。 Oracle 發行者不支援。
sync_method native 同步處理訂閱時,使用所有數據表的原生模式大量複製輸出。
character 同步處理訂閱時,使用所有數據表的字元模式大量複製輸出。
concurrent 使用所有數據表的原生模式大量複製程序輸出,但在快照集產生程式期間不會鎖定數據表。 不適用於快照式複寫。
concurrent_c 使用所有數據表的字元模式大量複製程序輸出,但在快照集產生程式期間不會鎖定數據表。 不適用於快照式複寫。
taskid 這個屬性已被取代,不再支援。
allow_drop true 啟用 DROP TABLE 屬於事務複製一部分之發行項的 DLL 支援。 最低支援版本:SQL Server 2014 (12.x) Service Pack 2 或更新版本和 SQL Server 2016 (13.x) Service Pack 1 或更新版本。 如需詳細資訊,請參閱 KB 3170123
false (預設值) 停用 DROP TABLE 屬於事務複製一部分之發行項的 DLL 支援。
NULL (預設值) 傳回@property支援的值清單。

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

確認此預存程式所採取的動作可能會使現有的快照集失效。 @force_invalidate_snapshot為 bit,預設值為 0

  • 0 指定發行項的變更不會造成快照集無效。 如果預存程式偵測到變更確實需要新的快照集,就會發生錯誤,而且不會進行任何變更。
  • 1 指定發行項的變更可能會導致快照集無效。 如果有現有的訂用帳戶需要新的快照集,這個值會提供現有快照集的許可權,以標示為過時,併產生新的快照集。

如需變更時需要產生新快照集的屬性,請參閱<備註>一節。

[ @force_reinit_subscription = ] force_reinit_subscription

確認此預存程式所採取的動作可能需要重新初始化現有的訂用帳戶。 @force_reinit_subscription為 bit,預設值為 0

  • 0 指定發行項的變更不會使訂閱重新初始化。 如果預存程式偵測到變更需要重新初始化現有的訂用帳戶,就會發生錯誤,而且不會進行任何變更。
  • 1 指定對發行項所做的變更會導致現有訂閱重新初始化,並授與重新初始化訂閱的許可權。

[ @publisher = ] N'publisher'

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

變更 SQL Server 發行者上的發行項屬性時,不應使用@publisher。

傳回碼值

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

備註

sp_changepublication 用於快照式複寫和事務複製。

變更下列任何屬性之後,您必須產生新的快照集,而且您必須為 @force_invalidate_snapshot 參數指定 的值1

  • alt_snapshot_folder
  • compress_snapshot
  • enabled_for_het_sub
  • ftp_address
  • ftp_login
  • ftp_password
  • ftp_port
  • ftp_subdirectory
  • post_snapshot_script
  • pre_snapshot_script
  • snapshot_in_defaultfolder
  • sync_mode

若要使用 publish_to_active_directory 參數列出 Active Directory 中的發行集物件,必須在 Active Directory 中建立 SQL Server 物件。

立即同步的效果

當立即同步處理開啟時,即使沒有任何訂用帳戶,記錄檔中的所有變更都會在產生初始快照集之後立即追蹤。 當客戶使用備份來新增對等節點時,會使用記錄的變更。 還原備份之後,對等會與在進行備份之後發生的任何其他變更同步處理。 由於命令會在散發資料庫中追蹤,因此同步處理邏輯可以查看上次備份的 LSN,並以此作為起點,知道如果備份是在最大保留期間內進行備份,就可以使用命令。 (最小保留期限的預設值為 0 小時,保留期間上限為 24 小時。

當立即同步處理關閉時,變更至少會保留最小保留期間,並立即清除已複寫的所有交易。 如果立即同步處理已關閉,並使用預設保留期間進行設定,則備份清除後可能需要的變更,而且新的對等節點將不會正確初始化。 左側唯一的選項是停止拓撲。 將立即同步設定為 開啟可提供更大的彈性,而且是 P2P 複寫的建議設定。

範例

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

權限

只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_changepublication