sp_changepublication (Transact-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'
    這是發行集的名稱。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

    訂閱者能夠從備份中,而不是從初始快照集中,對這個發行集的訂閱進行初始化。非 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

    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 [AdventureWorks2008R2]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

權限

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