共用方式為


sp_addpublication (Transact-SQL)

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

建立快照式或交易式發行集。 這個預存程式會在發行集資料庫的發行者端執行。

Transact-SQL 語法慣例

語法

sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

引數

[ @publication = ] N'publication'

要建立的發行集名稱。 @publication為 sysname,沒有預設值。 這個名稱在資料庫內必須是唯一的。

[ @taskid = ] taskid

僅支援回溯相容性;使用 sp_addpublication_snapshot

[ @restricted = ] N'restricted'

僅支援回溯相容性;使用 default_access

[ @sync_method = ] N'sync_method'

同步處理模式。 @sync_method為 nvarchar(40),而且可以是下列其中一個值。

Description
native1 產生所有數據表的原生模式大量複製程序輸出。
character 產生所有數據表的字元模式大量複製程序輸出。 注意: 對於 Oracle 發行者, character 僅適用於快照式複寫。
concurrent1 產生所有數據表的原生模式大量複製程序輸出,但不會在快照集期間鎖定數據表。 僅支援交易式發行集。
concurrent_c 產生所有數據表的字元模式大量複製程序輸出,但不會在快照集期間鎖定數據表。 僅支援交易式發行集。
database snapshot 從資料庫快照集產生所有數據表的原生模式大量複製程序輸出。 每個 SQL Server 版本都無法使用資料庫快照集。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 版本和支援的功能
database snapshot character 從資料庫快照集產生所有數據表的字元模式大量複製程序輸出。 每個 SQL Server 版本都無法使用資料庫快照集。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 版本和支援的功能
NULL (預設值) native預設為 SQL Server 發行者。 若為非 SQL Server 發行者,則預設character為 當 @repl_freq 的值Snapshot ,並針對所有其他案例concurrent_c

1 Oracle 發行者不支援。

[ @repl_freq = ] N'repl_freq'

復寫頻率的類型, @repl_freqnvarchar(10),而且可以是下列其中一個值。

Description
continuous (預設值) 記錄讀取器代理程式會持續執行。 針對非 SQL Server 發行者,這需要 將@sync_method 設定為 concurrent_c
snapshot 記錄讀取器代理程式會依排程執行。 針對非 SQL Server 發行者,這需要 將@sync_method 設定為 character

[ @description = ] N'description'

發行集的選擇性描述。 @description為 nvarchar(255),預設值為 NULL

[ @status = ] N'status'

指定發行集數據是否可用。 @status為 nvarchar(8),可以是下列其中一個值。

Description
active 發行集數據立即可供訂閱者使用。
inactive (預設值) 第一次建立發行集時,發行集數據不適用於訂閱者(可以訂閱,但不會處理訂閱)。

Oracle 發行者不支援。

[ @independent_agent = ] N'independent_agent'

指定此發行集是否有獨立 散發代理程式。 @independent_agent為 nvarchar(5),預設值為 false

  • 如果true為 ,則此出版物有獨立 散發代理程式。
  • 如果false為 ,發行集會使用共用 散發代理程式,而且每個 Publisher 資料庫/訂閱者資料庫組都有單一的共用代理程式。

[ @immediate_sync = ] N'immediate_sync'

指定每次執行 快照集代理程式 時,是否建立發行集的同步處理檔案。 @immediate_sync為 nvarchar(5),預設值為 false

如果true為 ,則每次執行 快照集代理程式 時,都會建立或重新建立同步處理檔案。 如果 快照集代理程式 在建立訂閱之前完成,訂閱者就能夠立即取得同步處理檔案。 新的訂用帳戶會取得最近執行 快照集代理程式 所產生的最新同步處理檔案。 @independent_agent必須是 true @immediate_synctrue。 如果 false為 ,則只有在有新的訂用帳戶時,才會建立同步處理檔案。 當您以累加方式將新發行項新增至現有的發行集時,您必須為每個訂閱呼叫 sp_addsubscription 。 訂閱者在訂閱之後無法接收同步處理檔案,直到啟動和完成 快照集代理程式 為止。

[ @enabled_for_internet = ] N'enabled_for_internet'

指定是否為因特網啟用發行集,並判斷是否可以使用檔案傳輸通訊協定 (FTP) 將快照集檔案傳送給訂閱者。 @enabled_for_internet為 nvarchar(5),預設值為 false。 如果 true為 ,則發行集的同步處理檔案會放入 C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp 目錄中。 用戶必須建立 Ftp 目錄。

[ @allow_push = ] N'allow_push'

指定是否可以為指定的發行集建立發送訂閱。 @allow_push為 nvarchar(5),預設值true為 ,允許發行集上的發送訂閱。

[ @allow_pull = ] N'allow_pull'

指定是否可以為指定的發行集建立提取訂閱。 @allow_pull為 nvarchar(5),預設值為 false。 如果 false為 ,則發行集上不允許提取訂閱。

[ @allow_anonymous = ] N'allow_anonymous'

指定是否可以為指定的發行集建立匿名訂閱。 @allow_anonymous為 nvarchar(5),預設值為 false。 如果 true為 , @immediate_sync 也必須設定為 true。 如果 false為 ,則發行集上不允許匿名訂閱。

[ @allow_sync_tran = ] N'allow_sync_tran'

指定發行集是否允許立即更新訂閱。 @allow_sync_tran為 nvarchar(5),預設值為 falsetrueOracle 發行者不支援。

[ @autogen_sync_procs = ] N'autogen_sync_procs'

指定是否在發行者端產生更新訂閱的同步處理預存程式。 @autogen_sync_procs為 nvarchar(5),而且可以是下列其中一個值。

Description
true 啟用更新訂閱時自動設定。
false 在未啟用或 Oracle 發行者更新訂閱時自動設定。
NULL (預設值) 預設為 true 開啟更新訂閱時,以及 false 未啟用更新訂閱時的 。

注意

根據為@allow_queued_tran@allow_sync_tran指定的值,將會覆寫@autogen_sync_procs使用者提供的值。

[ @retention = ] 保留期

訂用帳戶活動的保留期間,以小時為單位。 @retention為 int,預設值為 336。 如果訂用帳戶未在保留期間內作用中,則會到期並移除。 此值可以大於發行者所使用散發資料庫的最大保留期間。 如果 0為 ,則發行集的已知訂閱永遠不會過期,並由過期的訂閱清除代理程序移除。

[ @allow_queued_tran = ] N'allow_queued_tran'

啟用或停用訂閱者端變更的佇列,直到可以在發行者端套用變更為止。 @allow_queued_tran為 nvarchar(5),預設值為 false

  • 如果 false為 ,則訂閱者端的變更不會排入佇列。
  • trueOracle 發行者不支援。

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

指定快照集檔案是否儲存在預設資料夾中。 @snapshot_in_defaultfolder為 nvarchar(5),預設值為 true

  • 如果 true為 ,則可以在預設資料夾中找到快照集檔案。
  • 如果false為 ,則快照集檔案已儲存在@alt_snapshot_folder指定的替代位置。

替代位置可以位於另一部伺服器、網路驅動器機或卸載式媒體上(例如卸載式磁碟)。 您也可以將快照集檔案儲存至 FTP 網站,以供訂閱者稍後擷取。 此參數可以是 true,而且在 @alt_snapshot_folder 參數中仍有位置。 此組合會指定快照集檔案會同時儲存在預設和替代位置中。

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

指定快照集替代資料夾的位置。 @alt_snapshot_folder為 nvarchar(255),預設值為 NULL

[ @pre_snapshot_script = ] N'pre_snapshot_script'

指定.sql檔案位置的指標。 @pre_snapshot_script為 nvarchar(255),預設值為 NULL。 散發代理程式 會在訂閱者端套用快照集時,先執行預先快照集腳本,再執行任何復寫的物件腳本。 腳本會在連接到訂用帳戶資料庫時,散發代理程式 所使用的安全性內容中執行。

[ @post_snapshot_script = ] N'post_snapshot_script'

指定檔案位置的 .sql 指標。 @post_snapshot_script為 nvarchar(255),預設值為 NULL。 散發代理程式 會在初始同步處理期間套用所有其他複寫的物件腳本和數據之後,執行快照集後腳本。 腳本會在連接到訂用帳戶資料庫時,散發代理程式 所使用的安全性內容中執行。

[ @compress_snapshot = ] N'compress_snapshot'

指定寫入@alt_snapshot_folder位置的快照集會壓縮成Microsoft CAB 格式。 @compress_snapshot為 nvarchar(5),預設值為 false

  • false 指定不會壓縮快照集。
  • true 指定快照集已壓縮。

無法壓縮大於 2 GB 的快照集檔案。 壓縮快照集檔案會在執行 散發代理程式 的位置取消壓縮;提取訂閱通常會與壓縮快照集搭配使用,如此一來,檔案就會在訂閱者端取消壓縮。 預設資料夾中的快照集無法壓縮。

[ @ftp_address = ] N'ftp_address'

散發者 FTP 服務的網路位址。 @ftp_address為 sysname,預設值為 NULL。 指定發行集快照集檔案的位置,供訂閱者 散發代理程式 或 合併代理程式 取用。 由於此屬性會針對每個發行集儲存,因此每個發行集可以有不同的 @ftp_address。 發行集必須支援使用 FTP 傳播快照集。

[ @ftp_port = ] ftp_port

散發者的 FTP 服務埠號碼。 @ftp_port為 int,預設值為 21。 指定發行集快照集檔案的位置,供訂閱者 散發代理程式 或 合併代理程式 取用。 由於此屬性會針對每個發行集儲存,因此每個發行集可以有自己的 @ftp_port

[ @ftp_subdirectory = ] N'ftp_subdirectory'

指定當發行集支援使用 FTP 傳播快照集時,訂閱者 散發代理程式 或訂閱者 合併代理程式 的可用位置。 @ftp_subdirectory為 nvarchar(255),預設值為 NULL。 由於此屬性會針對每個發行集儲存,因此每個發行集可以有自己的 @ftp_subdirctory 或選擇沒有子目錄,以 NULL 值表示。

[ @ftp_login = ] N'ftp_login'

用來連線到 FTP 服務的用戶名稱。 @ftp_login為 sysname 預設值為 anonymous

[ @ftp_password = ] N'ftp_password'

用來連線到 FTP 服務的用戶密碼。 @ftp_password為 sysname,預設值為 NULL

[ @allow_dts = ] N'allow_dts'

指定發行集允許數據轉換。 您可以在建立訂用帳戶時指定 DTS 套件。 @allow_dts為 nvarchar(5),預設值false為 ,不允許 DTS 轉換。 當@allow_dts為 true 時@sync_method必須設定為 characterconcurrent_c

trueOracle 發行者不支援。

[ @allow_subscription_copy = ] N'allow_subscription_copy'

啟用或停用複製訂閱此發行集的訂閱資料庫的能力。 @allow_subscription_copy為 nvarchar(5),預設值為 false

[ @conflict_policy = ] N'conflict_policy'

指定使用佇列更新訂閱者選項時所遵循的衝突解決原則。 @conflict_policy為 nvarchar(100),而且可以是下列其中一個值。

Description
pub wins 發行者會贏得衝突。
sub reinit 重新初始化這項訂閱。
sub wins 訂閱者會贏得衝突。
NULL (預設值) 如果 NULL為 ,而且發行集是快照式發行集,則預設原則會 sub reinit變成 。 如果 NULL 與發行集不是快照式發行集,則預設值會 pub wins變成 。

Oracle 發行者不支援。

[ @centralized_conflicts = ] N'centralized_conflicts'

指定衝突記錄是否儲存在發行者上。 @centralized_conflicts為 nvarchar(5),預設值為 NULL

  • 如果 true為 ,衝突記錄會儲存在發行者端。
  • 如果 false為 ,衝突記錄會同時儲存在發行者和造成衝突的訂閱者端。

Oracle 發行者不支援。

[ @conflict_retention = ] conflict_retention

指定以天為單位的衝突保留期間。 這是衝突元數據儲存在點對點事務複製和佇列更新訂閱的時間週期。 @conflict_retention為 int,預設值為 14

Oracle 發行者不支援。

[ @queue_type = ] N'queue_type'

指定使用哪種類型的佇列。 @queue_type是 nvarchar(10),而且可以是下列其中一個值。

Description
sql 使用 SQL Server 來儲存交易。
NULL (預設值) 預設為 sql,指定使用 SQL Server 來儲存交易。

注意

停止使用Microsoft消息佇列的支援。 指定的值 msmq 會導致警告,複寫會自動將值設定為 sql

Oracle 發行者不支援。

[ @add_to_active_directory = ] N'add_to_active_directory'

此參數已被取代,而且僅支援腳本的回溯相容性。 您無法再將發行集資訊新增至 Microsoft Active Directory。

[ @logreader_job_name = ] N'logreader_job_name'

現有代理程式作業的名稱。 @logreader_job_name為 sysname 預設值為 NULL。 只有當記錄讀取器代理程式使用現有的作業,而不是建立新的作業時,才會指定此參數。

[ @qreader_job_name = ] N'qreader_job_name'

現有代理程式作業的名稱。 @qreader_job_name為 sysname,預設值為 NULL。 只有當佇列讀取器代理程式使用現有的作業,而不是建立新的作業時,才會指定此參數。

[ @publisher = ] N'publisher'

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

將發行集新增至 SQL Server 發行者時,不應該使用@publisher

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

指出訂閱者是否可以從備份初始化這個發行集的訂閱,而不是初始快照集。 @allow_initialize_from_backup為 nvarchar(5),可以是下列其中一個值:

Description
true 從備份啟用初始化。
false 停用備份的初始化。
NULL (預設值) true針對點對點複寫拓撲中的發行集,以及false所有其他發行集,預設為 。

如需詳細資訊,請參閱 不使用快照集初始化交易式訂閱中手動初始化訂閱。

警告

若要避免遺漏訂閱者數據,搭配 @allow_initialize_from_backup = N'true'使用 sp_addpublication 時,一律使用 @immediate_sync = N'true'

[ @replicate_ddl = ] replicate_ddl

指出發行集是否支援架構複寫。 @replicate_ddl為 int,SQL Server 發行者的預設值1為 ,非 0 SQL Server 發行者則為 。

  • 1 表示在發行者端執行的數據定義語言 (DDL) 語句會複寫。
  • 0 表示不會復寫 DDL 語句。

Oracle 發行者不支援架構複寫。

如需詳細資訊,請參閱對發行集資料庫進行結構描述變更

DDL 語句加入數據行時,會接受@replicate_ddl 參數。 當 DDL 語句改變或卸除數據行時,會忽略@replicate_ddl參數,原因如下。

  • 卸除數據行時, sysarticlecolumns 必須更新 ,以防止新的 DML 語句包含已卸除的數據行,這會導致散發代理程序失敗。 因為復寫必須一律復寫架構變更,因此會忽略@replicate_ddl參數。

  • 更改數據行時,源數據類型或 Null 屬性可能會變更,導致 DML 語句包含可能與訂閱者端數據表不相容的值。 這類 DML 語句可能會導致散發代理程序失敗。 因為復寫必須一律復寫架構變更,因此會忽略@replicate_ddl參數。

  • 當 DDL 語句加入新的資料行時, sysarticlecolumns 不包含新的數據行。 DML 語句不會嘗試複寫新數據行的數據。 因為可接受複寫或不復寫 DDL,因此會接受 參數。

[ @enabled_for_p2p = ] N'enabled_for_p2p'

可讓發行集用於點對點復寫拓撲中。 @enabled_for_p2p為 nvarchar(5),預設值為 falsetrue 表示發行集支援點對點複寫。 將 @enabled_for_p2p 設定true時,會套用下列限制:

  • @allow_anonymous必須是 false
  • @allow_dts必須是 false
  • @allow_initialize_from_backup必須是 true
  • @allow_queued_tran必須是 false
  • @allow_sync_tran必須是 false
  • @conflict_policy必須是 false
  • @independent_agent必須是 true
  • @repl_freq必須是 continuous
  • @replicate_ddl必須是 1

如需詳細資訊,請參閱 點對點 - 事務複製

[ @publish_local_changes_only = ] N'publish_local_changes_only'

僅供參考之用。 不支援。 我們無法保證未來的相容性。

[ @enabled_for_het_sub = ] N'enabled_for_het_sub'

可讓發行集支援非 SQL Server 訂閱者。 @enabled_for_het_sub為 nvarchar(5),預設值為 false。 的值 true 表示發行集支援非 SQL Server 訂閱者。 當 @enabled_for_het_subtrue,適用下列限制:

  • @allow_initialize_from_backup必須是 false
  • @allow_push必須是 true
  • @allow_queued_tran必須是 false
  • @allow_subscription_copy必須是 false
  • @allow_sync_tran必須是 false
  • @autogen_sync_procs必須是 false
  • @conflict_policy必須是 NULL
  • @enabled_for_internet必須是 false
  • @enabled_for_p2p必須是 false
  • @ftp_address必須是 NULL
  • @ftp_subdirectory必須是 NULL
  • @ftp_password必須是 NULL
  • @pre_snapshot_script必須是 NULL
  • @post_snapshot_script必須是 NULL
  • @replicate_ddl必須是 0。
  • @qreader_job_name必須是 NULL
  • @queue_type必須是 NULL
  • @sync_method不能是 nativeconcurrent

如需詳細資訊,請參閱 Non-SQL Server Subscribers

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

啟用 散發代理程式,以偵測發行集是否已啟用點對點複寫的衝突。 @p2p_conflictdetection為 nvarchar(5),預設值為 false。 如需詳細資訊,請參閱 點對點複寫中的點對點 - 衝突偵測。

[ @p2p_originator_id = ] p2p_originator_id

針對點對點拓撲中的節點指定識別碼。 @p2p_originator_id為 int,預設值為 NULL。 如果 @p2p_conflictdetection 設為TRUE,此標識符會用於衝突偵測。 指定拓撲中未使用的正數非零標識符。 如需所使用的標識碼清單,請執行 sp_help_peerconflictdetection

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

判斷在偵測到衝突之後,散發代理程式 是否繼續處理變更。 @p2p_continue_onconflict為 nvarchar(5),預設值為 false

警告

我們建議您使用的 false預設值。 當此選項設定為 true時,散發代理程式 會藉由套用來自最高原始程式標識碼之節點的衝突數據列,嘗試聚合拓撲中的數據。 此方法不保證聚合。 您應該確定拓撲在偵測到衝突之後是一致的。 如需詳細資訊,請參閱點對點複寫中的 「處理衝突」- 點對點複寫中的衝突偵測。

[ @allow_partition_switch = ] N'allow_partition_switch'

指定是否可以 ALTER TABLE...SWITCH 對已發佈的資料庫執行語句。 @allow_partition_switch為 nvarchar(5),預設值為 false。 如需詳細資訊,請參閱複寫資料分割資料表及索引

[ @replicate_partition_switch = ] N'replicate_partition_switch'

指定是否 ALTER TABLE...SWITCH 應該將針對已發行資料庫的語句複寫至訂閱者。 @replicate_partition_switch為 nvarchar(5),預設值為 NULL。 只有在@allow_partition_switch設定為 TRUE 時,此選項才有效。

[ @allow_drop = ] N'allow_drop'

僅供參考之用。 不支援。 我們無法保證未來的相容性。

[ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy'

適用於: SQL Server 2019 (15.x) CU 13 和更新版本。

@p2p_conflictdetection_policy是 nvarchar(12),可以是下列其中一個值:

Description
originatorid (預設值) 如果 p2p_continue_onconflict = N'true'為 ,散發代理程式會偵測衝突,並根據原始程式標識符來決定獲勝者。 否則,函式會傳回錯誤。
lastwriter 如果 為 ,散發代理程式會偵測衝突,並根據最後一個寫入 p2p_continue_onconflict = N'true'器的日期時間決定獲勝者。 否則,函式會傳回錯誤。

注意

當您指定 originatorid時,衝突偵測與 SQL Server 2019 (15.x) CU 12 和舊版相同。 當您指定 lastwriter時,SQL Server 允許根據最近的寫入自動解決衝突。

傳回碼值

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

備註

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

如果有多個發行集發行相同的資料庫物件,則只有具有複寫 、、、 ALTER FUNCTION和 DDL 語句之@replicate_ddl值的ALTER TABLE1發行集。ALTER TRIGGER ALTER PROCEDUREALTER VIEW 不過, ALTER TABLE DROP COLUMN 所有發行卸除數據行的發行集都會復寫 DDL 語句。

啟用發行集的 DDL 複寫(@replicate_ddl = 1),若要對發行集進行非重複的 DDL 變更,必須先執行 sp_changepublication,才能將 @replicate_ddl 設定為 。0 發出非重複的 DDL 語句之後, sp_changepublication可以再次執行,以重新開啟 DDL 複寫。

範例

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

權限

只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_addpublication。 Windows 驗證 登入在資料庫中必須有代表其 Windows 用戶帳戶的用戶帳戶。 代表 Windows 群組的用戶帳戶不足。