sp_addpublication (Transact-SQL)
適用於:SQL Server Azure 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 |
---|---|
native 1 |
產生所有數據表的原生模式大量複製程序輸出。 |
character |
產生所有數據表的字元模式大量複製程序輸出。 注意: 對於 Oracle 發行者, character 僅適用於快照式複寫。 |
concurrent 1 |
產生所有數據表的原生模式大量複製程序輸出,但不會在快照集期間鎖定數據表。 僅支援交易式發行集。 |
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_freq 是 nvarchar(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_sync 為 true
。 如果 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),預設值為 false
。 true
Oracle 發行者不支援。
[ @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
為 ,則訂閱者端的變更不會排入佇列。 true
Oracle 發行者不支援。
[ @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必須設定為 character
或 concurrent_c
。
true
Oracle 發行者不支援。
[ @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),預設值為 false
。 true
表示發行集支援點對點複寫。 將 @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_sub 為 true
時,適用下列限制:
- @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不能是
native
或concurrent
。
如需詳細資訊,請參閱 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 TABLE
1
發行集。ALTER TRIGGER
ALTER PROCEDURE
ALTER 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 群組的用戶帳戶不足。