sp_changepublication (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'
這是發行集的名稱。publication 是 sysname,預設值是 NULL。[ @property = ] 'property'
這是要變更的發行集屬性。property 是 nvarchar(255)。[ @value = ] 'value'
這是新的屬性值。value 是 nvarchar(255),預設值是 NULL。下表描述可變更的發行集屬性及這些屬性值的限制。
屬性
值
描述
allow_anonymous
true
可以建立給定發行集的匿名訂閱,immediate_sync 也必須是 true。點對點發行集的這個項目不能變更。
false
不能建立給定發行集的匿名訂閱。點對點發行集的這個項目不能變更。
allow_initialize_from_backup
true
訂閱者能夠從備份中,而不是從初始快照集中,對這個發行集的訂閱進行初始化。非 MicrosoftSQL 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 (Transact-SQL),以便在將 enabled_for_het_sub 設為 true 之前,符合下列需求:
allow_queued_tran 必須是 false。
allow_sync_tran 必須是 false。
將 enabled_for_het_sub 改成 true,可能會變更現有的發行集設定。如需詳細資訊,請參閱<非 SQL Server 訂閱者>。非 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 Message Queuing。在 value 中指定 msmq 值,會發生錯誤。repl_freq
continuous
發行所有記錄式交易的輸出。
snapshot
只發行已排程的同步處理事件。
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 陳述式不應該複寫到訂閱者。
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
這個屬性已被取代,不再受到支援。
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 = ] 'publisher'
指定非 SQL Server 發行者。publisher 是 sysname,預設值是 NULL。[!附註]
當在 SQL Server 發行者上變更發行項屬性時,不應使用 publisher。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_changepublication 用於快照式複寫和交易式複寫中。
變更下列中的任何屬性都需要產生新的快照集,但您必須指定 1 值給 force_invalidate_snapshot 參數。
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 物件。
範例
DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran'
-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks]
EXEC sp_changepublication
@publication = @publication,
@property = N'replicate_ddl',
@value = 0
GO
權限
只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_changepublication。