使用复制代理配置文件

适用于:SQL ServerAzure SQL 托管实例

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

使用 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. 设置对象的下列属性:

  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 开始,某些代理参数更改将生效,无需重启代理。