使用复制代理配置文件

适用于:SQL Server Azure SQL 托管实例

本主题介绍如何使用 SQL Server Management Studio、Transact-SQL 或复制管理对象 (RMO) 在 SQL Server 中使用复制代理配置文件。 每个复制代理的行为都受一组参数控制,这些参数是通过代理配置文件设置的。 每个代理都有一个默认配置文件,有些代理还有一些其他的预定义配置文件;每个代理每次只能使用一个配置文件。

本主题内容

  • 处理复制代理配置文件,使用:

    SQL Server Management Studio

    • 访问“代理配置文件”对话框

    • 指定代理的配置文件

    • 创建档案

    • 修改配置文件

    • 删除配置文件

    Transact-SQL

    • 创建档案

    • 修改配置文件

    • 删除配置文件

    • 在同步期间使用代理配置文件

    • Transact-SQL 示例

    复制管理对象

    • 创建档案

    • 修改配置文件

    • 删除配置文件

  • 跟进:在更改代理参数后

使用 SQL Server Management Studio

从 SQL Server Management Studio 访问“代理配置文件”对话框

  1. 在“分发服务器属性 - <分发服务器>”对话框的“常规”页上,单击“配置文件默认值”

从复制监视器访问“代理配置文件”对话框

  • 若要为所有代理打开此对话框,请右键单击发布服务器,再单击 “代理配置文件”

  • 为单个代理打开此对话框:

    1. 在复制监视器的左窗格中依次展开发布服务器组、发布服务器,然后单击某个发布。

    2. 对于分发代理配置文件和合并代理配置文件,请右键单击 “所有订阅” 选项卡上的订阅,再单击 “代理配置文件”。 对于其他代理,右键单击 “代理” 选项卡上的代理,然后单击 “代理配置文件”

指定代理的配置文件

  1. 如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。

  2. “代理配置文件” 网格的 “作为新项的默认值” 列中选择一个配置文件。 默认情况下,该配置文件只应用于新发布和订阅的代理。

  3. 若要指定用于现有发布或订阅且属于选定类型的所有代理都使用该配置文件,请单击 “更改现有代理”

查看和编辑与配置文件关联的参数

  1. 如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。

  2. 单击配置文件旁边的属性按钮 (...)

  3. 查看“<ProfileName> 配置文件属性”对话框中的参数和值。

    • 用户定义配置文件中的参数可以编辑,但预定义系统配置文件中的参数不可编辑。

    • 若要查看代理的所有参数,请清除 “仅显示此配置文件中使用的参数” 复选框。 有关代理参数的信息,请参阅本主题末尾处的链接。

  4. 单击“关闭” 。

创建用户定义的配置文件

  1. 如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。

  2. 单击新建

  3. “新建代理配置文件” 初始化对话框中,选择一个作为新配置文件基础的现有配置文件。

  4. “新建代理配置文件” 对话框的 “名称”“说明” 文本框中输入相应值。

  5. 修改参数以调整配置文件。 若要查看代理的所有参数,请清除 “仅显示此配置文件中使用的参数” 复选框。 有关代理参数的信息,请参阅本主题末尾处的链接。

  6. 选择“确定”

删除用户定义的配置文件

  1. 如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。

  2. 如果一个配置文件与一个或多个代理相关联,请更改这些代理的配置文件:

    1. “代理配置文件” 网格中选择其他配置文件。

    2. 单击 “更改现有代理”

      注意

      此操作将更改用于现有发布或订阅且属于选定类型的所有代理的配置文件,而不只更改那些使用要删除的配置文件的代理的配置文件。

  3. 选择要删除的配置文件,再单击 “删除”

  4. 选择“确定”

“使用 Transact-SQL”

创建一个新的代理配置文件

  1. 在分发服务器上,执行 sp_add_agent_profile (Transact-SQL)。 指定 @name,将 @profile_type 的值指定为 1,并为 @agent_type指定下列值之一:

    如果此配置文件将成为此复制代理类型的新默认配置文件,请将 @default 的值指定为 1。 使用 @profile_id 输出参数可返回新配置文件的标识符。 这将会使用基于给定代理类型的默认配置文件的配置文件参数集创建新的配置文件。

  2. 在已创建新配置文件后,可添加、删除或修改默认参数以自定义该配置文件。

修改现有代理配置文件

  1. 在分发服务器上,执行 sp_help_agent_profile (Transact-SQL)。 为 @agent_type指定下列值之一:

    这将返回指定类型的代理的所有配置文件。 请记下要更改的配置文件在结果集中的 profile_id 值。

  2. 在分发服务器上,执行 sp_help_agent_parameter (Transact-SQL)。 为 @profile_id指定步骤 1 中的配置文件标识符。 这将返回该配置文件的所有参数。 请记下要从配置文件中修改或删除的任何参数的名称。

  3. 要更改配置文件中的参数值,请执行 sp_change_agent_parameter (Transact-SQL)。 为 @profile_id 指定步骤 1 中的配置文件标识符,为 @parameter_name 指定要更改的参数的名称,并为 @parameter_value 指定一个新的参数值。

    注意

    您不能将现有的代理配置文件更改为代理的默认配置文件。 相反,您必须创建一个新的配置文件以作为默认配置文件,如前面的过程所示。

  4. 要从配置文件中移除参数,请执行 sp_drop_agent_parameter (Transact-SQL)。 为 @profile_id 指定步骤 1 中的配置文件标识符并为 @parameter_name指定要删除的参数的名称。

  5. 若要向配置文件添加新的参数,必须执行下列操作:

    • 查询分发服务器上的 MSagentparameterlist (Transact-SQL) 表以确定可为每个代理类型设置哪些配置文件参数。

    • 在分发服务器上,执行 sp_add_agent_parameter (Transact-SQL)。 为 @profile_id指定步骤 1 中的配置文件标识符,为 @parameter_name指定要添加的有效参数的名称,并为 @parameter_value指定参数的值。

删除代理配置文件

  1. 在分发服务器上,执行 sp_help_agent_profile (Transact-SQL)。 为 @agent_type指定下列值之一:

    这将返回指定类型的代理的所有配置文件。 请记下要删除的配置文件在结果集中的 profile_id 值。

  2. 在分发服务器上,执行 sp_drop_agent_profile (Transact-SQL)。 为 @profile_id指定步骤 1 中的配置文件标识符。

在同步期间使用代理配置文件

  1. 在分发服务器上,执行 sp_help_agent_profile (Transact-SQL)。 为 @agent_type指定下列值之一:

    这将返回指定类型的代理的所有配置文件。 请记下要使用的配置文件在结果集中的 profile_name 值。

  2. 如果是从代理作业启动代理,则编辑用于启动该代理的作业步骤,以在 -ProfileName 命令行参数后指定在步骤 1 中获得的 profile_name 值。 有关详细信息,请参阅查看和修改复制代理命令提示符参数 (SQL Server Management Studio)

  3. 如果是从命令提示符处启动代理,请在 -ProfileName 命令行参数后指定在步骤 1 中获得的 profile_name 值。

示例 (Transact-SQL)

此示例将为名为 custom_merge的合并代理创建自定义配置文件,更改 -UploadReadChangesPerBatch 参数的值,添加新的 -ExchangeType 参数,并返回有关创建的配置文件的信息。

DECLARE @profilename AS sysname;
DECLARE @profileid AS int;
SET @profilename = N'custom_merge';

-- Create a temporary table to hold the returned 
-- Merge Agent profiles.
CREATE TABLE #profiles (
    profile_id int, 
    profile_name sysname,
    agent_type int,
    [type] int,
    description varchar(3000),
    def_profile bit)

INSERT INTO #profiles (profile_id, profile_name, 
    agent_type, [type],description, def_profile)
    EXEC sp_help_agent_profile @agent_type = 4;

SET @profileid = (SELECT profile_id FROM #profiles 
    WHERE profile_name = @profilename);

IF (@profileid IS NOT NULL)
BEGIN
    EXEC sp_drop_agent_profile @profileid;
END
DROP TABLE #profiles

-- Add a new merge agent profile. 
EXEC sp_add_agent_profile @profile_id = @profileid OUTPUT, 
@profile_name = @profilename, @agent_type = 4, 
@description = N'custom merge profile';

-- Change the value of uploadreadchangesperbatch in the profile.
EXEC sp_change_agent_parameter @profile_id = @profileid, 
    @parameter_name = N'-UploadReadChangesPerBatch', @parameter_value = 50;

-- Add a new parameter ExchangeType the profile. 
EXEC sp_add_agent_parameter @profile_id = @profileid, 
    @parameter_name = N'-ExchangeType', @parameter_value = 1;

-- Verify the new profile. 
EXEC sp_help_agent_parameter @profileid;
GO

使用 RMO

创建一个新的代理配置文件

  1. 使用 ServerConnection 类的实例创建与分发服务器的连接。

  2. 创建 AgentProfile 类的一个实例。

  3. 设置对象的下列属性:

    • Name - 配置文件的名称。

    • AgentType - 一个 AgentType 值,该值指定要为其创建该配置文件的复制代理的类型。

    • ConnectionContext - 步骤 1 中创建的 ServerConnection

    • (可选) Description - 配置文件的说明。

    • (可选) Default - 如果默认情况下此 T:Microsoft.SqlServer.Replication.AgentType 的所有新代理作业都将使用此配置文件,则将此属性设置为 AgentType

  4. 调用 Create 方法以在服务器上创建配置文件。

  5. 在服务器上存在此配置文件后,可以通过添加、删除或更改复制代理参数的值来对该配置文件进行自定义。

  6. 若要将此配置文件分配给现有的复制代理作业,请调用 AssignToAgent 方法。 为 distributionDBName 传递分发数据库的名称并为 agentID传递作业 ID。

修改现有代理配置文件

  1. 使用 ServerConnection 类的实例创建与分发服务器的连接。

  2. 创建 ReplicationServer 类的一个实例。 传递步骤 1 中创建的 ServerConnection 对象。

  3. 调用 LoadProperties 方法。 如果此方法返回 false,请验证分发服务器是否存在。

  4. 调用 EnumAgentProfiles 方法。 传递一个 AgentType 值以将返回的配置文件缩小至指定类型的复制代理。

  5. 从返回的 AgentProfile 中获取所需的 ArrayList对象,其中此对象的 Name 属性与配置文件名相匹配。

  6. 调用 AgentProfile 的以下方法之一更改配置文件:

    • AddParameter - 向此配置文件添加支持的参数,其中 name 为复制代理参数的名称, value 为指定的值。 若要枚举给定代理类型的所有支持的代理参数,请调用 EnumParameterInfo 方法。 此方法返回表示所有支持参数的一个 ArrayList 对象的 AgentProfileParameterInfo

    • RemoveParameter - 删除配置文件中的某个现有参数,其中 name 为复制代理参数的名称。 若要枚举为配置文件定义的所有当前代理参数,请调用 EnumParameters 方法。 此方法返回一个 ArrayList 对象的 AgentProfileParameter ,表示此配置文件的现有参数。

    • ChangeParameter - 更改配置文件中现有参数的设置,其中 name 为代理参数的名称, newValue 为更改参数时的目标值。 若要枚举为配置文件定义的所有当前代理参数,请调用 EnumParameters 方法。 此方法返回一个 ArrayList 对象的 AgentProfileParameter ,表示此配置文件的现有参数。 若要枚举所有支持的代理参数设置,请调用 EnumParameterInfo 方法。 此方法返回 ArrayList 对象的 AgentProfileParameterInfo ,表示所有参数的支持值。

删除代理配置文件

  1. 使用 ServerConnection 类的实例创建与分发服务器的连接。

  2. 创建 AgentProfile 类的一个实例。 将 Name 设置为配置文件的名称,将 ServerConnection 设置为从步骤 1 中获得的 ConnectionContext

  3. 调用 LoadProperties 方法。 如果此方法返回 false,则指定的名称不正确或服务器上不存在该配置文件。

  4. 验证 Type 属性是否设置为指示某个客户配置文件的 User。 您不应该删除 System 的值为 Type的配置文件。

  5. 调用 Remove 方法从服务器中删除此对象表示的用户定义的配置文件。

跟进:在更改代理参数后

对代理参数所做的更改在下次启动代理时生效。 如果代理连续运行,则必须停止该代理,然后重新启动。 从 SQL Server 2017 CU3 开始,某些代理参数更改将生效,无需重启代理。