sp_changepublication (Transact-SQL)

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

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

Transact-SQL 語法慣例

語法

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

引數

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

[ @property = ] 'property' 這是要變更的發行集屬性。 屬性nvarchar(255)

[ @value = ] 'value' 這是新的屬性值。 值為 nvarchar(255),預設值為 NULL。

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

屬性 說明
allow_anonymous true 匿名訂閱可以針對指定的發行集建立,immediate_sync也必須成立 無法變更點對點發行集。
false 無法為指定的發行集建立匿名訂閱。 無法變更點對點發行集。
allow_initialize_from_backup true 訂閱者可以從備份初始化這個發行集的訂閱,而不是初始快照集。 非 Microsoft 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 酒吧贏了 更新發行者贏得衝突之訂閱者的衝突解決原則。 只有在沒有作用中的訂用帳戶時,才能變更此屬性。 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 。 您可能需要執行復寫預存程式 (Transact-SQL) 以符合下列需求,再將enabled_for_het_sub設定為 true:
- allow_queued_tran必須是 false
- allow_sync_tran必須是 false
將enabled_for_het_sub變更true 可能會變更現有的發行集設定。 如需詳細資訊,請參閱 Non-SQL Server Subscribers。 無法變更非 SQL Server 發行集的這個屬性。
false 發行集不支援非 SQL Server 訂閱者。 無法變更非 SQL Server 發行集的這個屬性。
enabled_for_internet true 因特網已啟用發行集,而檔傳輸通訊協定 (FTP) 可用來將快照集檔案傳送給訂閱者。 發行集的同步處理檔案會放入下列目錄中:C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp。 ftp_address不可為 NULL。 無法變更非 SQL Server 發行集的這個屬性。
false 因特網未啟用發行集。 無法變更非 SQL Server 發行集的這個屬性。
enabled_for_p2p true 發行集支援點對點複寫。 無法變更非 SQL Server 發行集的這個屬性。
若要將enabled_for_p2p設為 true,適用下列限制:
- 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必須是連續的。
- 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也必須成立。 如需immediate_sync的詳細資訊,請參閱下方的備註。
false 只有在有新的訂用帳戶時,才會建立同步處理檔案。 訂閱者無法在訂閱之後收到同步處理檔案,直到啟動並完成 快照集代理程式 為止。
independent_agent true 出版物有自己的專用 散發代理程式。
false 發行集使用共用 散發代理程式,而且每個發行集/訂閱資料庫組都有共用代理程式。
p2p_continue_onconflict true 偵測到衝突時,散發代理程式 會繼續處理變更。
注意: 我們建議您使用 的預設值 FALSE。 當此選項設定為 TRUE時,散發代理程式 會從具有最高原始程式標識碼的節點套用衝突數據列,嘗試聚合拓撲中的數據。 此方法不保證聚合。 您應該確定拓撲在偵測到衝突之後是一致的。 如需詳細資訊,請參閱< Conflict Detection in Peer-to-Peer Replication>中的「處理衝突」。
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 Message Queuing 的支援。 針對 value 指定 msmq 的值會導致錯誤。
redirected_publisher 可用性群組接聽程序的名稱。 當對等在可用性群組中時,用於點對點複寫。 無法變更非 SQL Server 發行集的這個屬性。 在 SQL Server 2019 (15.x) CU 13 中引進。 如需其他資訊,請參閱 將一個對等設定為可用性群組 的一部分,或在 可用性群組中設定這兩個對等。
repl_freq 連續 發佈所有記錄式交易的輸出。
快照 只發佈排程的同步處理事件。
replicate_ddl 1 在發行者端執行的數據定義語言 (DDL) 語句會進行複寫。 無法變更非 SQL Server 發行集的這個屬性。
0 不會復寫 DDL 語句。 無法變更非 SQL Server 發行集的這個屬性。 使用點對點複寫時,無法停用架構變更的複寫。
replicate_partition_switch true ALTER TABLE...針對已發行資料庫的 SWITCH 語句應該複寫至訂閱者。 只有在allow_partition_switch設為 TRUE 時,此選項才有效。 如需詳細資訊,請參閱複寫資料分割資料表及索引
false ALTER TABLE...SWITCH 語句不應該復寫到訂閱者。
保留 int 代表訂用帳戶活動的保留期間,以小時為單位。 如果訂用帳戶在保留期間內沒有作用中,則會移除訂閱。
snapshot_in_defaultfolder true 快照集檔案會儲存在預設快照集資料夾中。 如果 同時指定alt_snapshot_folder,快照集檔案會同時儲存在預設和替代位置中。
false 快照集檔案會儲存在alt_snapshot_folder指定的替代位置。
status active 發行集數據可在建立發行集時立即供訂閱者使用。 Oracle 發行者不支援。
inactive 建立發行集時,訂閱者無法使用發行集數據。 Oracle 發行者不支援。
sync_method native 同步處理訂閱時,使用所有數據表的原生模式大量複製輸出。
character 同步處理訂閱時,使用所有數據表的字元模式大量複製輸出。
併發 使用所有數據表的原生模式大量複製程序輸出,但在快照集產生程式期間不會鎖定數據表。 不適用於快照式複寫。
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 (預設值) 傳回屬性支援的值清單。

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

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

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

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

[ @publisher = ] 'publisher' 指定非 SQL Server 發行者。 publishersysname,預設值為 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

另請參閱

檢視和修改發行集屬性
變更發行集與發行項屬性
sp_addpublication (Transact-SQL)
sp_droppublication (Transact-SQL)
sp_helppublication (Transact-SQL)
複寫預存程式 (Transact-SQL)