sp_changepublication (Transact-SQL)
適用於:SQL Server
Azure 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_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 必須是 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 針對已發行資料庫的語句應該復寫至訂閱者。 只有在 設定為 true 時allow_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
。