sp_addmergepublication (Transact-SQL)
更新: 2006 年 12 月 12 日
建立新的合併式發行集。這個預存程序執行於所發行之資料庫的發行者端。
語法
sp_addmergepublication [ @publication = ] 'publication'
[ , [ @description = ] 'description'
[ , [ @retention = ] retention ]
[ , [ @sync_mode = ] 'sync_mode' ]
[ , [ @allow_push = ] 'allow_push' ]
[ , [ @allow_pull = ] 'allow_pull' ]
[ , [ @allow_anonymous = ] 'allow_anonymous' ]
[ , [ @enabled_for_internet = ] 'enabled_for_internet' ]
[ , [ @centralized_conflicts = ] 'centralized_conflicts' ]
[ , [ @dynamic_filters = ] 'dynamic_filters' ]
[ , [ @snapshot_in_defaultfolder = ] 'snapshot_in_default_folder' ]
[ , [ @alt_snapshot_folder = ] 'alternate_snapshot_folder' ]
[ , [ @pre_snapshot_script = ] 'pre_snapshot_script' ]
[ , [ @post_snapshot_script = ] 'post_snapshot_script' ]
[ , [ @compress_snapshot = ] 'compress_snapshot' ]
[ , [ @ftp_address = ] 'ftp_address' ]
[ , [ @ftp_port = ] ftp_port ]
[ , [ @ftp_subdirectory = ] 'ftp_subdirectory' ]
[ , [ @ftp_login = ] 'ftp_login' ]
[ , [ @ftp_password = ] 'ftp_password' ]
[ , [ @conflict_retention = ] conflict_retention ]
[ , [ @keep_partition_changes = ] 'keep_partition_changes' ]
[ , [ @allow_subscription_copy = ] 'allow_subscription_copy' ]
[ , [ @allow_synctoalternate = ] 'allow_synctoalternate' ]
[ , [ @validate_subscriber_info = ] 'validate_subscriber_info' ]
[ , [ @add_to_active_directory = ] 'add_to_active_directory' ]
[ , [ @max_concurrent_merge = ] maximum_concurrent_merge ]
[ , [ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots ]
[ , [ @use_partition_groups = ] 'use_partition_groups' ]
[ , [ @publication_compatibility_level = ] 'backward_comp_level' ]
[ , [ @replicate_ddl = ] replicate_ddl ]
[ , [ @allow_subscriber_initiated_snapshot = ] 'allow_subscriber_initiated_snapshot' ]
[ , [ @allow_web_synchronization = ] 'allow_web_synchronization' ]
[ , [ @web_synchronization_url = ] 'web_synchronization_url' ]
[ , [ @allow_partition_realignment = ] 'allow_partition_realignment' ]
[ , [ @retention_period_unit = ] 'retention_period_unit' ]
[ , [ @generation_leveling_threshold = ] generation_leveling_threshold ]
[ , [ @automatic_reinitialization_policy = ] automatic_reinitialization_policy ]
[ , [ @conflict_logging = ] 'conflict_logging' ]
引數
- [ @publication=] 'publication'
這是要建立的合併式發行集名稱。publication 是 sysname,沒有預設值,不能是關鍵字 ALL。在資料庫內,發行集名稱必須是唯一的。
- [ @description=] 'description'
這是發行集描述。description 是 nvarchar(255),預設值是 NULL。
[ @retention=] retention
這是用來儲存給定 publication 之變更的保留期限,以保留期限單位來表示。retention 是 int,預設值是 14 個單位。保留期限單位由 retention_period_unit 來定義。如果未在保留期限內同步處理訂閱,且散發者端的清除作業移除了它已收到的暫止變更,訂閱便會到期,必須重新初始化。最大的允許保留期限是目前的日期到 9999 年 12 月 31 日之間的天數。附註: 合併式發行集的保留期限有 24 小時的寬限期,以便配合不同時區的訂閱者。例如,如果您設定的保留期限是一天,實際的保留期限便是 48 小時。
[ @sync_mode=] 'sync_mode'
這是發行集訂閱者的初始同步處理模式。sync_mode 是 nvarchar(10),它可以是下列值之一。值 描述 native (預設值)
產生所有資料表的原生模式大量複製程式輸出。
character
產生所有資料表的字元模式大量複製程式輸出。支援 SQL Server 2005 Compact Edition 和非 SQL Server 訂閱者需要這個值。
- [ @allow_push=] 'allow_push'
指定是否能夠建立給定發行集的發送訂閱。allow_push 是 nvarchar(5),預設值是 TRUE,允許發行集的發送訂閱。
- [ @allow_pull=] 'allow_pull'
指定是否能夠建立給定發行集的提取訂閱。allow_pull 是 nvarchar(5),預設值是 TRUE,允許發行集的提取訂閱。您必須指定 true 來支援 SQL Server 2005 Compact Edition 訂閱者。
- [ @allow_anonymous=] 'allow_anonymous'
指定是否能夠建立給定發行集的匿名訂閱。allow_anonymous 是 nvarchar(5),預設值是 TRUE,允許發行集的匿名訂閱。您必須指定 true 來支援 SQL Server 2005 Compact Edition 訂閱者。
- [ @enabled_for_internet=] 'enabled_for_internet'
指定是否啟用發行集的網際網路功能,以及決定是否能夠利用檔案傳輸通訊協定 (FTP),將快照集檔案傳送給訂閱者。enabled_for_internet 是 nvarchar(5),預設值是 FALSE。如果是 true,發行集的同步處理檔案會放在 C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp 目錄中。使用者必須建立這個 Ftp 目錄。如果是 false,便不會啟用發行集的網際網路存取功能。
- [ @centralized_conflicts =] 'centralized_conflicts'
這個參數已被取代,支援它的目的,只是為了與舊版的指令碼相容。請利用 conflict_logging 來指定衝突記錄的儲存位置。
[ @dynamic_filters =] 'dynamic_filters'
使合併式發行集能夠使用參數化資料列篩選。dynamic_filters 是 nvarchar(5),預設值是 FALSE。附註: 您不應該指定這個參數,而應允許 SQL Server 自動判斷是否正在使用參數化資料列篩選。如果您指定了 dynamic_filters 的 true 值,則必須定義發行項的參數化資料列篩選。如需詳細資訊,請參閱<How to: Define and Modify a Parameterized Row Filter for a Merge Article (Replication Transact-SQL Programming)>。
- [ @snapshot_in_defaultfolder = ] 'snapshot_in_default_folder'
指定是否將快照集檔案儲存在預設資料夾中。snapshot_in_default_folder 是 nvarchar(5),預設值是 TRUE。如果是 true,便可以在預設資料夾中找到快照集檔案。如果是 false,快照集檔案便會儲存在 alternate_snapshot_folder 所指定的替代位置中。替代位置可以在另一部伺服器、網路磁碟機或抽取式媒體 (如 CD-ROM 或抽取式磁碟) 中。另外,您也可以將快照集檔案儲存在檔案傳輸通訊協定 (FTP) 網站中,供訂閱者以後擷取它們。請注意,這個參數可以是 true,且仍有 alt_snapshot_folder 所指定的位置。這個組合會指定將快照集檔案同時儲存在預設位置和替代位置中。
- [ @alt_snapshot_folder = ] 'alternate_snapshot_folder'
指定快照集替代資料夾的位置。alternate_snapshot_folder 是 nvarchar(255),預設值是 NULL。
- [ @pre_snapshot_script = ] 'pre_snapshot_script'
指定指向 .sql 檔案位置的指標。pre_snapshot_script 是 nvarchar(255),預設值是 NULL。在訂閱者端套用快照集時,合併代理程式會在任何複寫的物件指令碼之前,先執行前快照集 (Pre-snapshot) 指令碼。這個指令碼是在連接到訂閱資料庫時,在合併代理程式所用的安全性內容中執行。預先快照集指令碼並非執行於 SQL Server 2005 Compact Edition 訂閱者。
- [ @post_snapshot_script = ] 'post_snapshot_script'
指定指向 .sql 檔案位置的指標。post_snapshot_script 是 nvarchar(255),預設值是 NULL。在初始同步處理期間,合併代理程式會先套用所有其他複寫的物件指令碼和資料,然後才執行後快照集 (Post-snapshot) 指令碼。這個指令碼是在連接到訂閱資料庫時,在合併代理程式所用的安全性內容中執行。後快照集 (Post-snapshot) 指令碼並非執行於 SQL Server 2005 Compact Edition 訂閱者。
- [ @compress_snapshot = ] 'compress_snapshot'
指定將寫入 @alt_snapshot_folder 位置的快照集壓縮成 Microsoft CAB 格式。compress_snapshot 是 nvarchar(5),預設值是 FALSE。false 指定不壓縮快照集;true 指定壓縮快照集。超出 2GB 的快照集檔案無法壓縮。壓縮的快照集檔案是在執行合併代理程式的位置進行解壓縮;提取訂閱通常會搭配使用壓縮的快照集,因此,會在訂閱者端將檔案解壓縮。預設資料夾中的快照集無法壓縮。您必須指定 false*,才能支援* SQL Server 2005 Compact Edition 訂閱者。
- [ @ftp_address = ] 'ftp_address'
這是散發者之 FTP 服務的網路位址。ftp_address 是 sysname,預設值是 NULL。指定發行集快照集檔案所在的位置,以便訂閱者的合併代理程式能夠加以收取。由於每個發行集都會儲存這個屬性,因此,每個發行集都可以有不同的 ftp_address。發行集必須支援利用 FTP 來傳播快照集。
- [ @ftp_port= ] ftp_port
這是散發者的 FTP 服務通訊埠編號。ftp_port 是 int,預設值是 21。指定發行集快照集檔案所在的位置,以便訂閱者的合併代理程式能夠加以收取。由於每個發行集都會儲存這個屬性,因此,每個發行集都可以有它自己的 ftp_port。
[ @ftp_subdirectory = ] 'ftp_subdirectory'
指定如果發行集支援利用 FTP 來傳播快照集,訂閱者的合併代理程式在哪裡可以收取快照集檔案。ftp_subdirectory 是 nvarchar(255),預設值是 NULL。由於每個發行集都會儲存這個屬性,因此,每個發行集都可以有它自己的 ftp_subdirctory,也可以選擇用 NULL 來表示沒有任何子目錄。當利用參數化篩選來預先產生快照集時,每個訂閱者資料分割的資料快照集都必須在它自己的資料夾中。利用 FTP 預先產生快照集,其目錄結構必須遵照下列結構:
alternate_snapshot_folder\ftp\publisher_publicationDB_publication\partitionID.
附註: 上述斜體值會隨著發行集和訂閱者資料分割的細節而不同。
- [ @ftp_login = ] 'ftp_login'
這是用來連接到 FTP 服務的使用者名稱。ftp_login 是 sysname,預設值是 'anonymous'。
[ @ftp_password = ] 'ftp_password'
這是用來連接到 FTP 服務的使用者密碼。ftp_password 是 sysname,預設值是 NULL。安全性注意事項: 密碼不能空白。請使用增強式密碼。
- [ @conflict_retention = ] conflict_retention
指定衝突的保留期限 (以天為單位)。conflict_retention 是 int,預設值是在 14 天之後,便從衝突資料表中清除衝突資料列。
[ @keep_partition_changes = ] 'keep_partition_changes'
指定當無法使用預先計算的資料分割時,是否啟用資料分割變更最佳化。keep_partition_changes 是 nvarchar(5),預設值是 TRUE。false 表示資料分割變更沒有最佳化,當不使用預先計算的資料分割時,便會在資料分割的資料有了改變時,驗證傳給所有訂閱者的資料分割。true 表示將資料分割變更最佳化,只會影響含有已變更的資料分割中之資料列的訂閱者。當使用預先計算的資料分割時,請將 use_partition_groups 設為 true,將 keep_partition_changes 設為 false。如需詳細資訊,請參閱<使用預先計算的資料分割最佳化參數化篩選效能>。附註: 如果您針對 keep_partition_changes 指定 true 值,請針對快照集代理程式參數 -MaxNetworkOptimization 指定 1 值。如需有關此參數的詳細資訊,請參閱<Replication Snapshot Agent>。如需有關指定代理程式參數的資訊,請參閱<管理複寫代理程式>。
- [ @allow_subscription_copy= ] 'allow_subscription_copy'
啟用或停用複製訂閱這個發行集之訂閱資料庫的能力。allow_subscription_copy 是 nvarchar(5),預設值是 FALSE。所複製的訂閱資料庫大小必須小於 2 GB。
- [ @allow_synctoalternate = ] 'allow_synctoalternate'
啟用與這個發行者同步的替代同步處理夥伴。allow_synctoalternate 是 nvarchar(5),預設值是 FALSE。替代的同步夥伴不支援 SQL Server 2005 Compact Edition 訂閱者。
[ @validate_subscriber_info = ] 'validate_subscriber_info'
列出使用參數化資料列篩選時,用來定義發行資料之訂閱者資料分割的函數。validate_subscriber_info 是 nvarchar(500),預設值是 NULL。合併代理程式利用這項資訊來驗證訂閱者的資料分割。例如,如果在參數化資料列篩選中使用 SUSER_SNAME (Transact-SQL),參數應該是@validate_subscriber_info=N'SUSER_SNAME()'
。附註: 您不應該指定這個參數,而應允許 SQL Server 自動判斷篩選準則。
- [ @add_to_active_directory = ] 'add_to_active_directory'
這個參數已被取代,支援它的目的,只是為了與舊版的指令碼相容。您不能再將發行集資訊加入 Microsoft Active Directory 中。
- [ @max_concurrent_merge = ] maximum_concurrent_merge
並行合併處理序的最大數目。maximum_concurrent_merge 是 int,預設值是 0。這個屬性的 0 值表示在任何給定時間執行的並行合併處理序數目都沒有限制。這個屬性會設定能夠針對合併式發行集來同時執行的並行合併處理序的數目限制。如果排程同時執行的合併處理序數目超出允許執行的值,超出的作業便會放在佇列中,等到目前在執行中的合併處理序完成為止。
- [ @max_concurrent_dynamic_snapshots =] max_concurrent_dynamic_snapshots
當要產生訂閱者資料分割之篩選資料快照集時,可以同時執行的最大快照集代理程式工作階段數目。maximum_concurrent_dynamic_snapshots 是 int,預設值是 0。如果是 0,快照集工作階段的數目便沒有限制。如果排程同時執行的快照集處理序數目超出允許執行的值,超出的作業便會放在佇列中,等到目前在執行中的快照集處理序完成為止。
[ @use_partition_groups= ] 'use_partition_groups'
指定應該利用預先計算的資料分割來最佳化同步處理。use_partition_groups 是 nvarchar(5),它可以是下列值之一:值 描述 true
發行集使用預先計算的資料分割。
false
發行集不使用預先計算的資料分割。
NULL (預設值)
系統決定資料分割策略。
依預設,會使用預先計算的資料分割。若要避免使用預先計算的資料分割,您必須將 use_partition_groups 設為 false。當設為 NULL 時,系統會決定能不能使用預先計算的資料分割。如果不能使用預先計算的資料分割,這個值會實際改成 false,不會產生任何錯誤。在這種情況下,您可以將 keep_partition_changes 設為 true 來提供某些最佳化。如需詳細資訊,請參閱<參數化資料列篩選>和<使用預先計算的資料分割最佳化參數化篩選效能>。
[ @publication_compatibility_level= ] backward_comp_level
指出發行集的回溯相容性。backward_comp_level 是 nvarchar(6),它可以是下列值之一:值 版本 70RTM
Microsoft SQL Server 7.0
70SP1
SQL Server 7.0 Service Pack 1
70SP2
SQL Server 7.0 Service Pack 2
70SP3
SQL Server 7.0 Service Pack 3
70SP4
SQL Server 7.0 Service Pack 4
80RTM
Microsoft SQL Server 2000
80SP1
SQL Server 2000 Service Pack 1
80SP3 (預設值)
SQL Server 2000 Service Pack 3
90RTM
Microsoft SQL Server 2005
- [ @replicate_ddl= ] replicate_ddl
指出是否支援發行集的結構描述複寫。replicate_ddl 是 int,預設值是 1。1 表示複寫在發行者端執行的資料定義語言 (DDL) 陳述式,0 表示不複寫 DDL 陳述式。如需詳細資訊,請參閱<對發行集資料庫進行結構描述變更>。
- [ @allow_subscriber_initiated_snapshot= ] 'allow_subscriber_initiated_snapshot'
指出這個發行集的訂閱者是否能起始快照集處理序來產生資料分割的篩選快照集。allow_subscriber_initiated_snapshot 是 nvarchar(5),預設值是 FALSE。true 指出訂閱者可以起始快照集處理序。
- [ @allow_web_synchronization = ] 'allow_web_synchronization'
指定是否啟用發行集的 Web 同步處理。allow_web_synchronization 是 nvarchar(5),預設值是 FALSE。true 指定可以透過 HTTPS 來同步處理這個發行集的訂閱。如需詳細資訊,請參閱<合併式複寫的 Web 同步處理>。您必須指定 true 來支援 SQL Server 2005 Compact Edition 訂閱者。
- [ @web_synchronization_url= ] 'web_synchronization_url'
Web 同步處理所用的網際網路 URL 預設值。web_synchronization_url 是 nvarchar(500),預設值是 NULL。定義當執行 sp_addmergepullsubscription_agent 並未明確設定網際網路 URL 時,所用的預設網際網路 URL。
[ @allow_partition_realignment = ] 'allow_partition_realignment']
決定當修改發行者的資料列造成資料分割的變更時,是否要將刪除動作傳給訂閱者。allow_partition_realignment 是 nvarchar(5),預設值是 TRUE。true 會將刪除動作傳給訂閱者來移除已不在訂閱者資料分割中的資料,以反映資料分割變更的結果。false 會將舊資料分割的資料保留在訂閱者中,發行者這項資料的變更並不會複寫到這個訂閱者,但訂閱者的變更會複寫到發行者中。為了歷程記錄而需要能夠存取舊資料分割的資料時,將 allow_partition_realignment 設為 false 可以將資料保留在訂閱中。附註: 因為 allow_partition_realignment 設為 false 而保留在訂閱者的資料,應該依照唯讀的方式來處理;不過,複寫系統並不會強制執行這一點。
[ @retention_period_unit= ] 'retention_period_unit'
指定 retention 所設定之保留期限的單位。retention_period_unit 是 nvarchar(10),它可以是下列值之一。值 版本 day (預設值)
以天為保留期限的指定單位。
week
以星期為保留期限的指定單位。
month
以月為保留期限的指定單位。
year
以年為保留期限的指定單位。
- [ @generation_leveling_threshold = ] generation_leveling_threshold
指定某個層代中包含的變更數目。層代是指傳遞給發行者或訂閱者的變更集合。generation_leveling_threshold 是 int,而預設值為 1000。如需詳細資訊,請參閱<合併式複寫如何追蹤和列舉變更>。
[ @automatic_reinitialization_policy = ] automatic_reinitialization_policy
指定是否先從訂閱者上載變更,再進行變更發行集所需要的自動重新初始化,@force_reinit_subscription 的指定值是 1。automatic_reinitialization_policy 是 bit,預設值是 0。1 表示在自動重新初始化之前,從訂閱者上載變更。重要事項: 如果您新增、卸除或變更參數化篩選,在重新初始化期間,便無法將訂閱者的暫止變更上載到發行者。如果您要上載暫止變更,請在變更篩選之前,同步處理所有訂閱。
[ @conflict_logging = ] 'conflict_logging'
指定衝突記錄的儲存位置。conflict_logging 是 nvarchar(15),它可以是下列值之一:值 描述 publisher
衝突記錄會儲存在發行者端。
subscriber
衝突記錄會儲存在造成衝突的訂閱者端。不支援 SQL Server 2005 Compact Edition 訂閱者使用這個項目。
both
衝突記錄會儲存在發行者端和訂閱者端。
NULL (預設值)
當 backward_comp_level 值是 90RTM 時,複寫會自動將 conflict_logging 設為 both,否則,便會設為 publisher。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_addmergepublication 用於合併式複寫中。
若要利用 @add_to_active_directory 參數來列出 Active Directory 中的發行集物件,您必須已在 Active Directory 中建立 SQL Server 物件。
如果有多個發行相同資料庫物件的發行集存在,只有 replicate_ddl 值是 1 的發行集會複寫 ALTER TABLE、ALTER VIEW、ALTER PROCEDURE、ALTER FUNCTION 和 ALTER TRIGGER DDL 陳述式。不過,所有發行已卸除之資料行的發行集都會複寫 ALTER TABLE DROP COLUMN DDL 陳述式。
對於 SQL Server 2005 Compact Edition 訂閱者而言,只有在 snapshot_in_default_folder 值是 false 時,才會使用 alternate_snapshot_folder 值。
當啟用發行集的 DDL 複寫 (replicate_ddl**=1**) 時,為了進行發行集的非複寫 DDL 變更,必須先執行 sp_changemergepublication,將 replicate_ddl 設為 0。在發出非複寫 DDL 陳述式之後,可以再執行 sp_changemergepublication 來重新開啟 DDL 複寫。
權限
只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_addmergepublication。
範例
-- To avoid storing the login and password in the script file, the value
-- is passed into SQLCMD as a scripting variable. 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".
--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks';
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @login = $(Login);
SET @password = $(Password);
-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'merge publish',
@value = N'true'
-- Create a new merge publication, explicitly setting the defaults.
USE [AdventureWorks]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks.',
@publication_compatibility_level = N'90RTM';
-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
GO
請參閱
參考
sp_changemergepublication (Transact-SQL)
sp_dropmergepublication (Transact-SQL)
sp_helpmergepublication (Transact-SQL)
複寫預存程序 (Transact-SQL)
其他資源
How to: Create a Publication (Replication Transact-SQL Programming)
發行資料和資料庫物件
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 12 月 12 日 |
|