sp_addmergepublication (Transact-SQL)

更新日期: 2006 年 12 月 12 日

创建新合并发布。此存储过程针对发布服务器上要发布的数据库执行。

主题链接图标Transact-SQL 语法约定

语法

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 日之间的天数。

    ms176103.note(zh-cn,SQL.90).gif注意:
    合并发布的保持期有 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,它允许对发布创建请求订阅。若要支持 SQL Server 2005 Compact Edition 订阅服务器,必须指定为 TRUE。
  • [ @allow_anonymous=] 'allow_anonymous'
    指定是否可以为给定发布创建匿名订阅。allow_anonymous 的数据类型为 nvarchar(5),默认值是 TRUE,即允许对发布进行匿名订阅。若要支持 SQL Server 2005 Compact Edition 订阅服务器,必须指定为 True
  • [ @enabled_for_internet=] 'enabled_for_internet'
    指定是否使该发布能用于 Internet,并确定是否可以使用文件传输协议 (FTP) 将快照文件传输到订阅服务器。enabled_for_internet 的数据类型为 nvarchar(5),默认值是 FALSE。如果为 True,则该发布的同步文件将放入 C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp 目录中。用户必须创建 Ftp 目录。如果是 false,则不为 Internet 访问启用该发布。
  • [ @centralized_conflicts =] 'centralized_conflicts'
    已不推荐使用该参数,支持该参数只是为了让脚本能够向后兼容。使用 conflict_logging 来指定存储冲突记录的位置。
  • [ @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。在订阅服务器上应用快照时,合并代理将在运行任何复制的对象脚本之前运行快照前脚本。该脚本将在合并代理连接到订阅数据库时使用的安全上下文中执行。快照前脚本不会在 SQL Server 2005 Compact Edition 订阅服务器中运行。
  • [ @post_snapshot_script = ] 'post_snapshot_script'
    指定指向 .sql 文件位置的指针。post_snapshot_script 的数据类型为 nvarchar(255),默认值是 NULL。当所有其他复制的对象脚本和数据均已在初始同步过程中应用之后,合并代理将运行快照后脚本。该脚本将在合并代理连接到订阅数据库时使用的安全上下文中执行。快照后脚本不会在 SQL Server 2005 Compact Edition 订阅服务器中运行。
  • [ @compress_snapshot = ] 'compress_snapshot'
    指定将写入 @alt_snapshot_folder 位置的快照压缩成 Microsoft CAB 格式。compress_snapshot 的数据类型为 nvarchar(5),默认值是 FALSE。false 指定不压缩快照;true 指定压缩快照。无法压缩大于 2GB 的快照文件。压缩的快照文件被解压缩到合并代理所在的位置;一般对压缩的快照使用请求订阅,以便在订阅服务器上解压缩文件。不能压缩默认文件夹中的快照。若要支持 SQL Server 2005 Compact Edition 订阅服务器,必须指定为 false
  • [ @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

    ms176103.note(zh-cn,SQL.90).gif注意:
    上面以斜体显示的值取决于发布和订阅服务器分区的具体情况。
  • [ @ftp_login = ] 'ftp_login'
    用于连接到 FTP 服务的用户名。ftp_login 的数据类型为 sysname,默认值是 anonymous。
  • [ @ftp_password = ] 'ftp_password'
    用于连接到 FTP 服务的用户密码。ftp_password 的数据类型为 sysname,默认值是 NULL。

    ms176103.security(zh-cn,SQL.90).gif安全说明:
    不要使用空密码。请使用强密码。
  • [ @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。有关详细信息,请参阅使用预计算分区优化参数化筛选器的性能

    ms176103.note(zh-cn,SQL.90).gif注意:
    如果为 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()'

    ms176103.note(zh-cn,SQL.90).gif注意:
    该参数不应由用户指定,而应由 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 同步若要支持 SQL Server 2005 Compact Edition 订阅服务器,必须指定为 True
  • [ @web_synchronization_url= ] 'web_synchronization_url'
    指定用于 Web 同步的 Internet URL 的默认值。web_synchronization_urlnvarchar(500),默认值是 NULL。在执行 sp_addmergepullsubscription_agent 且未明确设置该参数时,定义默认的 Internet URL。
  • [ @allow_partition_realignment = ] 'allow_partition_realignment']
    当发布服务器中行的修改使其更改其分区时,确定是否向订阅服务器发送删除操作。allow_partition_realignment 的数据类型为 nvarchar(5),默认值是 TRUE。值为 true 时,将向订阅服务器发送删除操作,通过删除不再是订阅服务器分区组成部分的数据,来反映更改分区的结果。值为 false 时,将数据保留在订阅服务器原来的分区中,在发布服务器中对此数据所做的更改将不复制到订阅服务器中,但是在订阅服务器中所做的更改将复制到发布服务器。如果是因为查看历史记录而需要访问这些数据,可以将 allow_partition_realignment 设置为 false,以将原来分区中的数据保留在订阅中。

    ms176103.note(zh-cn,SQL.90).gif注意:
    因为将 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 指定的值为 1automatic_reinitialization_policy 为一个二进制位,默认值是 0。值为 1 表示在自动重新初始化之前从订阅服务器上载更改。

    ms176103.note(zh-cn,SQL.90).gif重要提示:
    如果添加、删除或更改参数化筛选器,重新初始化期间在订阅服务器上挂起的更改将无法上载到发布服务器。若要上载挂起的更改,请在更改筛选器前同步所有订阅。
  • [ @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)
发布数据和数据库对象

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 增加了有关如何使用快照代理参数 -MaxNetworkOptimization 的信息。
  • 增加了有关 generation_leveling_threshold 参数的信息。