本主题介绍如何在 SQL Server 中使用 SQL Server Management Studio、Transact-SQL 或复制管理对象 (RMO) 处理复制代理配置文件。 每个复制代理的行为都受一组参数控制,这些参数是通过代理配置文件设置的。 每个代理都有一个默认配置文件,有些代理还有一些其他的预定义配置文件;每个代理每次只能使用一个配置文件。
使用 SQL Server Management Studio
若要从 SQL Server Management Studio 访问“代理配置文件”对话框
- 在“分发服务器属性 - <分发服务器>”对话框的“常规”页上,单击“配置文件默认值”。
从复制监视器访问“代理配置文件”对话框
若要为所有代理打开此对话框,请右键单击发布服务器,再单击 “代理配置文件”。
为单个代理打开此对话框:
在复制监视器的左窗格中展开发布服务器组,展开发布服务器,然后单击发布。
对于分发代理和合并代理配置文件,请在 “所有订阅” 选项卡上右键单击某个订阅,然后单击 “代理配置文件”。 对于其他代理,右键单击 “代理” 选项卡上的代理,然后单击 “代理配置文件”。
为代理指定配置文件
如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。
在 代理配置文件网格的新对象的默认值 列中选择一个配置文件。 默认情况下,该配置文件只应用于新发布和订阅的代理。
若要指定现有发布或订阅中所选类型的所有代理都使用此配置文件,请单击 “更改现有代理”。
查看和编辑与配置文件关联的参数
如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。
单击配置文件旁边的属性按钮(...)。
在“<ProfileName> 配置文件属性”对话框中查看参数和值。
用户定义配置文件中的参数可以编辑,但预定义系统配置文件中的参数不可编辑。
若要查看代理的所有参数,请清除 “仅显示此配置文件中使用的参数” 复选框。 有关代理参数的信息,请参阅本主题末尾处的链接。
单击“关闭” 。
创建用户定义的配置文件
如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。
单击新建。
在 “新建代理配置文件” 初始化对话框中,选择一个作为新配置文件基础的现有配置文件。
在 “新建代理配置文件” 对话框的 “名称” 和 “说明” 文本框中输入相应值。
修改参数以自定义配置。 若要查看代理的所有参数,请清除 “仅显示此配置文件中使用的参数” 复选框。 有关代理参数的信息,请参阅本主题末尾处的链接。
选择“确定”。
删除用户定义的配置文件
如果 “代理配置文件” 对话框中显示了多个代理的配置文件,请选择一个代理。
如果一个配置文件与一个或多个代理相关联,请更改这些代理的配置文件:
在 “代理配置文件” 网格中选择其他配置文件。
单击 “更改现有代理”。
注意
此操作将更改现有发布或订阅中所有选定类型代理的配置文件,而非仅更改那些使用您要删除的配置文件的代理。
选择要删除的配置文件,然后单击“删除”。
选择“确定”。
“使用 Transact-SQL”
创建一个新的代理配置文件
在分发服务器上,执行 sp_add_agent_profile (Transact-SQL)。 指定 @name,将 @profile_type 的值指定为 1,并为 @agent_type指定下列值之一:
如果此配置文件将成为此复制代理类型的新默认配置文件,请将 @default 的值指定为 1。 使用 @profile_id 输出参数可返回新配置文件的标识符。 这将基于给定代理类型的默认配置,使用一组配置参数创建新的配置。
在已创建新配置文件后,可添加、删除或修改默认参数以自定义该配置文件。
修改现有代理配置
在分发服务器上,执行 sp_help_agent_profile (Transact-SQL)。 为 @agent_type指定下列值之一:
这将返回指定类型的代理的所有配置文件。 请在结果集中记下要更改的配置文件对应的 profile_id 值。
在分发服务器上,执行 sp_help_agent_parameter (Transact-SQL)。 为 @profile_id指定步骤 1 中的配置文件标识符。 此操作将返回该配置文件的所有参数。 请记下要从配置文件中修改或删除的任何参数的名称。
要更改配置文件中的参数值,请执行 sp_change_agent_parameter (Transact-SQL)。 为 @profile_id 指定步骤 1 中的配置文件标识符,为 @parameter_name 指定要更改的参数的名称,并为 @parameter_value 指定一个新的参数值。
注意
您不能将现有的代理配置文件更改为代理的默认配置文件。 相反,您必须创建一个新的配置文件以作为默认配置文件,如前面的过程所示。
要从配置文件中移除参数,请执行 sp_drop_agent_parameter (Transact-SQL)。 为 @profile_id 指定步骤 1 中的配置文件标识符并为 @parameter_name指定要删除的参数的名称。
若要向配置文件添加新的参数,必须执行下列操作:
查询分发服务器上的 MSagentparameterlist (Transact-SQL) 表以确定可为每个代理类型设置哪些配置文件参数。
在分发服务器上,执行 sp_add_agent_parameter (Transact-SQL)。 为 @profile_id指定步骤 1 中的配置文件标识符,为 @parameter_name指定要添加的有效参数的名称,并为 @parameter_value指定参数的值。
删除代理配置文件
在分发服务器上,执行 sp_help_agent_profile (Transact-SQL)。 为 @agent_type指定下列值之一:
这将返回指定类型的代理的所有配置文件。 记下要删除的配置文件的结果集中的 profile_id 值。
在分发服务器上,执行 sp_drop_agent_profile (Transact-SQL)。 为 @profile_id指定步骤 1 中的配置文件标识符。
在同步期间使用代理配置文件
在分发服务器上,执行 sp_help_agent_profile (Transact-SQL)。 为 @agent_type指定下列值之一:
这将返回指定类型的代理的所有配置文件。 记下要使用的配置文件的结果集中的 profile_name 值。
如果代理是由代理作业启动的,则编辑启动该代理的作业步骤,以在 -ProfileName 命令行参数后指定在步骤 1 中获取的 profile_name 值。 有关详细信息,请参阅查看和修改复制代理命令提示符参数 (SQL Server Management Studio)。
如果是从命令提示符处启动代理,请在 -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
创建一个新的代理配置文件
使用 ServerConnection 类的实例创建与分发服务器的连接。
创建 AgentProfile 类的一个实例。
设置对象的下列属性:
Name- 配置文件的名称。
ConnectionContext - 步骤 1 中创建的 ServerConnection 。
(可选)Description - 配置文件的说明。
(可选)Default - 如果此 的所有新代理作业默认使用此配置文件,请将此属性设置为 true AgentType 。
调用 Create 方法以在服务器上创建配置文件。
在服务器上存在此配置文件后,可以通过添加、删除或更改复制代理参数的值来对该配置文件进行自定义。
若要将此配置分配到现有复制代理作业,请调用 AssignToAgent 方法。 为 distributionDBName 传递分发数据库的名称并为 agentID传递作业 ID。
修改现有代理配置
使用 ServerConnection 类的实例创建与分发服务器的连接。
创建 ReplicationServer 类的一个实例。 传递步骤 1 中创建的 ServerConnection 对象。
调用 LoadProperties 方法。 如果此方法返回 false,请验证分发服务器是否存在。
调用 EnumAgentProfiles 方法。 传递一个 AgentType 值以将返回的配置文件缩小至指定类型的复制代理。
从返回的 AgentProfile 中获取所需的 ArrayList对象,其中此对象的 Name 属性与配置文件名相匹配。
调用 AgentProfile 的以下任一方法来更改配置文件:
AddParameter - 向此配置文件添加支持的参数,其中 name 为复制代理参数的名称, value 为指定的值。 若要枚举给定代理类型的所有支持的代理参数,请调用 EnumParameterInfo 方法。 此方法返回一个 ArrayList,其中包含表示所有受支持参数的 AgentProfileParameterInfo 对象。
RemoveParameter - 删除配置文件中的某个现有参数,其中 name 为复制代理参数的名称。 若要枚举为配置文件定义的所有当前代理参数,请调用 EnumParameters 方法。 此方法返回一个ArrayList (其中包含AgentProfileParameter个对象),这些对象表示此配置文件的现有参数。
ChangeParameter - 更改配置文件中现有参数的设置,其中 name 为代理参数的名称, newValue 为更改参数时的目标值。 若要枚举为配置文件定义的所有当前代理参数,请调用 EnumParameters 方法。 此方法返回一个ArrayList (其中包含AgentProfileParameter个对象),这些对象表示此配置文件的现有参数。 若要枚举所有支持的代理参数设置,请调用 EnumParameterInfo 方法。 此方法返回一个ArrayList(其中包含 AgentProfileParameterInfo 个对象),这些对象表示所有参数的支持值。
删除代理配置文件
使用 ServerConnection 类的实例创建与分发服务器的连接。
创建 AgentProfile 类的一个实例。 为Name 设置配置文件的名称,并为 ServerConnection 设置步骤 1 中的ConnectionContext。
调用 LoadProperties 方法。 如果此方法返回 false,则指定的名称不正确或服务器上不存在该配置文件。
调用 Remove 方法从服务器中删除此对象表示的用户定义的配置文件。
后续操作:更改代理参数后
对代理参数所做的更改在下次启动代理时生效。 如果代理连续运行,则必须停止该代理,然后重新启动。 从 SQL Server 2017 CU3 开始,某些代理参数更改将生效,无需重启代理。