Replication Distribution Agent

适用于: SQL Server Azure SQL 数据库

复制分发代理是一个可执行文件,它可用于将快照(用于快照复制和事务复制)和分发数据库表中保存的事务(用于事务复制)移动到订阅服务器上的目标表。

注意

可以按任意顺序指定参数。 如果未指定可选参数,则使用本地计算机上的预定义注册表设置中的值。

语法

distrib [ -? ]
-Publisher server_name [ \instance_name ]
-PublisherDB publisher_database
-Subscriber server_name [ \instance_name ]
-SubscriberDB subscriber_database
[ -AltSnapshotFolder alt_snapshot_folder_path ]
[ -BcpBatchSize bcp_batch_size ]
[ -CommitBatchSize commit_batch_size ]
[ -CommitBatchThreshold commit_batch_threshold ]
[ -Continuous ]
[ -DefinitionFile def_path_and_file_name ]
[ -Distributor distributor ]
[ -DistributorLogin distributor_login ]
[ -DistributorPassword distributor_password ]
[ -DistributorSecurityMode [ 0 | 1 ] ]
[ -EncryptionLevel [ 0 | 1 | 2 ] ]
[ -ErrorFile error_path_and_file_name ]
[ -ExtendedEventConfigFile configuration_path_and_file_name ]
[ -FileTransferType [ 0 | 1 ] ]
[ -FtpAddress ftp_address ]
[ -FtpPassword ftp_password ]
[ -FtpPort ftp_port ]
[ -FtpUserName ftp_user_name ]
[ -HistoryVerboseLevel [ 0 | 1 | 2 | 3 ] ]
[ -Hostname host_name ]
[ -KeepAliveMessageInterval keep_alive_message_interval_seconds ]
[ -LoginTimeOut login_time_out_seconds ]
[ -MaxBcpThreads ]
[ -MaxDeliveredTransactions number_of_transactions ]
[ -MessageInterval message_interval ]
[ -MultiSubnetFailover [ 0 | 1 ] ]
[ -OledbStreamThreshold oledb_stream_threshold ]
[ -Output output_path_and_file_name ]
[ -OutputVerboseLevel [ 0 | 1 | 2 ] ]
[ -PacketSize packet_size ]
[ -PollingInterval polling_interval ]
[ -ProfileName profile_name ]
[ -Publication publication ]
[ -QueryTimeOut query_time_out_seconds ]
[ -QuotedIdentifier quoted_identifier ]
[ -SkipErrors native_error_id [ :...n ] ]
[ -SubscriberDatabasePath subscriber_path ]
[ -SubscriberLogin subscriber_login ]
[ -SubscriberPassword subscriber_password ]
[ -SubscriberSecurityMode [ 0 | 1 ] ]
[ -SubscriberType [ 0 | 1 | 3 ] ]
[ -SubscriptionStreams [ 1 | 2 | ...64 ] ]
[ -SubscriptionTableName subscription_table ]
[ -SubscriptionType [ 0 | 1 | 2 ] ]
[ -TransactionsPerHistory [ 0 | 1 | ...10000 ] ]
[ -UseDTS ]
[ -UseInprocLoader ]
[ -UseOledbStreaming ]

参数

-?

输出所有可用的参数。

-Publisher server_name [ \instance_name ]

发布服务器的名称。 <server_name>指定该服务器上Microsoft SQL Server 的默认实例。 <server_name>\<instance_name>指定该服务器上的 SQL Server 命名实例。 如果发布服务器数据库位于可用性组(AG),这仍会反映原始主发布服务器名称, 因为sp_redirect_publisher。 它不反映 AG 侦听器名称。

-PublisherDB publisher_database

发布服务器数据库的名称。

-Subscriber server_name [ \instance_name ]

订阅服务器的名称。 <server_name>指定该服务器上 SQL Server 的默认实例。 <server_name>\<instance_name>指定该服务器上的 SQL Server 命名实例。 如果订阅服务器数据库位于 AG 中,则应反映 AG 侦听器名称。

-SubscriberDB subscriber_database

订阅服务器数据库的名称。

-AltSnapshotFolder alt_snapshot_folder_path

包含订阅初始快照的文件夹的路径。

-BcpBatchSize bcp_batch_size

在大容量复制操作中发送的行数。 执行bcp in操作时,批大小是作为一个事务发送到服务器的行数,也是在分发代理记录 bcp 进度消息之前必须发送的行数。 执行 bcp out 操作时,将使用固定批 1000 大小。

-CommitBatchSize commit_batch_size

在发出 COMMIT 语句之前,要颁发给订阅服务器的事务数。 默认值为 100,最大值为 10000。 分发代理在订阅服务器上应用快照时,将忽略此参数。

-CommitBatchThreshold commit_batch_threshold

在发出 COMMIT 语句之前,要颁发给订阅服务器的复制命令数。 默认值为 1000,最大值为 10000。 分发代理在订阅服务器上应用快照时,将忽略此参数。

-Continuous

指定代理是否尝试连续轮询已复制的事务。 如果指定了该参数,即使没有事务挂起,代理也将在轮询间隔期间轮询来自源的已复制事务。

-DefinitionFile def_path_and_file_name

代理定义文件的路径。 代理定义文件中包含代理的命令提示符参数。 文件的内容被当作可执行文件进行分析。 使用双引号 (") 指定包含任意字符的参数值。

-Distributor 分发 服务器

分发服务器名称。 对于分发服务器(推送)分发,该名称默认为本地分发服务器的名称。 如果分发服务器数据库位于 AG 中,则应反映 AG 侦听器名称。

-DistributorLogin distributor_login

分发服务器登录名。

-DistributorPassword distributor_password

分发服务器密码。

-DistributorSecurityMode [ 0 | 1 ]

指定分发服务器的安全模式。 值为 0 表示 SQL Server 身份验证模式,值为 1 表示 Windows 身份验证模式(默认值)。

-EncryptionLevel [ 0 | 1 | 2 ]

传输层安全性(TLS)级别(以前称为安全套接字层(SSL),在建立连接时分发代理使用的加密。

EncryptionLevel 值 说明
0 指定未使用 TLS。
1 指定使用 TLS,但代理不验证 TLS 服务器证书是否由受信任的颁发者签名。
2 指定使用 TLS,并验证证书。

使用 SQL Server 的完全限定域名定义有效的 TLS 证书。 若要使代理在设置为 <2a0/> 时成功连接,请在本地 SQL Server 上创建别名。 “Alias Name”参数应为服务器名称,”Server”参数应设置为 SQL Server 的完全限定名称。

有关详细信息,请参阅 View and Modify Replication Security Settings

-ErrorFile error_path_and_file_name

由分发代理生成的错误文件的路径和文件名。 在订阅服务器上应用复制事务时发生故障的任何时间点生成此文件;发布服务器或分发服务器上发生的错误不会记录在此文件中。 此文件包含失败的复制事务和相关的错误消息。 如果没有指定,则在分发代理的当前目录中生成此错误文件。 错误文件名为分发代理的名称,扩展名为 .err。 如果指定的文件名已存在,会将错误消息追加到该文件中。 此参数最多可包含 256 个 Unicode 字符。

-ExtendedEventConfigFile configuration_path_and_file_name

为扩展事件 XML 配置文件指定路径和文件名。 通过该扩展事件 XML 配置文件,您可以配置会话并且启用事件跟踪。

-FileTransferType [ 0 | 1 ]

指定文件传输类型。 0指示 UNC(通用命名约定)的值,以及指示 FTP(文件传输协议)的值1

-FtpAddress ftp_address

分发服务器的 FTP 服务的网络地址。 如果未指定, DistributorAddress 则使用。 如果未指定 DistributorAddress,则会使用 Distributor

-FtpPassword ftp_password

用于连接到 FTP 服务的用户密码。

-FtpPort ftp_port

分发服务器的 FTP 服务的端口号。 如果不指定,则使用 FTP 服务的默认端口号 (21)。

-FtpUserName ftp_user_name

用于连接到 FTP 服务的用户名。 如果未指定, anonymous 则使用。

-HistoryVerboseLevel [ 0 | 1 | 2 | 3 ]

指定分发操作期间记录的历史信息量。 可以通过选择 1来最大程度地减少历史记录日志记录的性能影响。

HistoryVerboseLevel 值 说明
0 进度消息将写入控制台或输出文件。 历史记录记录不会记录到分发数据库中。
1(默认值) 总是更新具有相同状态(启动、进行中、成功等)的上一历史记录消息。 如果不存在状态相同的上一记录,将插入新记录。
2 除非记录为空闲消息或长时间运行的作业消息等信息(此时将更新上一记录),否则插入新的历史记录。
3 始终插入新记录,除非它用于空闲消息。

-Hostname host_name

连接到发布服务器时使用的主机名。 此参数最多可包含 128 个 Unicode 字符。

-KeepAliveMessageInterval keep_alive_message_interval_seconds

历史记录线程前的秒数检查是否有任何现有连接正在等待来自服务器的响应。 在执行长时间运行的批处理时,减小该值可避免检查代理将分发代理标记为可疑。 默认值为 300 秒。

-LoginTimeOut login_time_out_seconds

登录超时之前的秒数。默认值为 15 秒。

-MaxBcpThreads number_of_threads

指定可以并行执行的大容量复制操作的数量。 同时存在的线程数和 ODBC 连接的最大数目是分发数据库中同步事务中显示的大容量复制请求数或 MaxBcpThreads 数量。 MaxBcpThreads 必须具有大于 0 且没有硬编码上限的值。 默认值为 2 处理器数,最大为最大值 8。 使用并发快照选项应用在发布服务器上生成的快照时,将使用一个线程,而不考虑指定 MaxBcpThreads的数字。

-MaxDeliveredTransactions number_of_transactions

一次同步中应用于订阅服务器的最大推送或拉取事务数。 一个值 0 ,指示最大值是无限数量的事务。 订阅服务器可使用其他值缩短从发布服务器请求的同步的持续时间。

如果-MaxDeliveredTransactions同时指定且-Continuous同时指定,则分发代理传递指定的事务数,然后停止(即使-Continuous已指定)。 在作业完成后,您必须重新启动分发代理。

-MessageInterval message_interval

用于历史记录日志记录的时间间隔。 当达到以下参数值之一时,将记录一个历史记录事件:

  • 记录最后一个历史记录事件后,将 TransactionsPerHistory 达到该值。

  • 记录最后一个历史记录事件后,将 MessageInterval 达到该值。

如果源中没有可用的复制事务,代理会向分发服务器报告无事务消息。 此选项可指定代理在报告另一条无事务消息前将等待多长时间。 在上次处理已复制事务后,如果代理在源上没有检测到任何可用的事务,则总是会报告一条无事务消息。 默认值为 60 秒。

-MultiSubnetFailover

适用于:SQL Server 2019 (15.x) 及更高版本。

指定是否启用 MultiSubnetFailover 属性。 如果应用程序连接到不同子网上的 AG,则设置 MultiSubnetFailover=true 可以更快地检测和连接到活动服务器(当前)服务器。

-OledbStreamThreshold oledb_stream_threshold

指定作为流绑定数据的二进制大型对象数据的最小大小(以字节为单位)。 必须指定 -UseOledbStreaming 使用此参数。 值范围为 400 字节到 1,048,576 字节,默认值为 16,384 字节。

-Output output_path_and_file_name

代理输出文件的路径。 如果未提供文件名,输出将发送到控制台。 如果指定的文件名已存在,会将输出追加到该文件。

-OutputVerboseLevel [ 0 | 1 | 2 ]

指定输出是否应提供详细内容。 如果详细级别为 0,则仅打印错误消息。 如果详细级别为 1,则会打印所有进度报告消息。 如果详细级别为 2 (默认值),则会打印所有错误消息和进度报告消息,这对于调试很有用。

-PacketSize packet_size

数据包大小(以字节为单位)。 默认值为 4096(字节)。

-PollingInterval polling_interval

为复制的事务查询分发数据库的频率(以秒为单位)。 默认值为 5 秒。

-ProfileName profile_name

指定用于代理参数的代理配置文件。 NULL如果是ProfileName,则禁用代理配置文件。 如果未 ProfileName 指定,则使用代理类型的默认配置文件。 有关信息,请参阅复制代理配置文件

-Publication publication

发布的名称。 只有将发布设置为总是使快照可用于新订阅或重新初始化的订阅时,此参数才有效。

-QueryTimeOut query_time_out_seconds

查询超时之前的秒数。默认值为 1,800 秒。

-QuotedIdentifier quoted_identifier

指定要使用的带引号的标识符字符。 该值的第一个字符表示分发代理使用的值。 如果未QuotedIdentifier使用任何值,则分发代理使用空格。 如果未QuotedIdentifier使用,分发代理将使用订阅服务器支持的任何带引号的标识符。

-SkipErrors native_error_id [ :...n ]

一个冒号分隔的列表,指定要由此代理跳过的错误号。 当分发代理在订阅服务器上应用快照时,忽略该参数。

-SubscriberDatabasePath subscriber_database_path

如果 SubscriberType 2 允许连接到没有 ODBC 数据源名称的 Jet 数据库(DSN),则为 Jet 数据库的路径(.mdb文件)。

-SubscriberLogin subscriber_login

订阅服务器登录名。 0 如果是SubscriberSecurityMode(对于 SQL Server 身份验证),则必须指定此参数。

-SubscriberPassword subscriber_password

订阅服务器密码。 0 如果是SubscriberSecurityMode(对于 SQL Server 身份验证),则必须指定此参数。

-SubscriberSecurityMode [ 0 | 1 ]

指定订阅服务器的安全模式。 指示 SQL Server 身份验证的值 0 ,以及 1 指示 Windows 身份验证模式的值(默认值)。

-SubscriberType [ 0 | 1 | 3 ]

指定分发代理使用的订阅服务器连接类型。

SubscriberType 值 说明
0 SQL Server
1 ODBC 数据源
3 OLE DB 数据源

-SubscriptionStreams [ 0 | 1 | 2 | ...64 ]

每个分发代理允许的连接数并行应用于订阅服务器,同时维护使用单个线程时存在的许多事务特征。 对于 SQL Server 发布服务器,支持介于 1 到 64 之间的值。

此参数不受支持,或者必须为 0 非 SQL Server 订阅服务器或对等订阅。 当分发代理在订阅服务器上应用快照时,忽略该参数。

如果其中一个连接无法执行或提交,则所有连接都会中止当前批处理,并且代理使用单个流重试失败的批处理。 在重试阶段完成之前,订阅服务器上会存在临时事务不一致。 失败的批处理成功提交后,订阅服务器将恢复到事务一致状态。

重要

为订阅服务器中 2 接收事务的顺序可能不同于在发布服务器上接收事务的顺序或大于 -SubscriptionStreams的值。 如果此行为在同步期间导致约束冲突,则应使用 NOT FOR REPLICATION 此选项在同步期间禁用约束强制实施。 有关详细信息,请参阅 同步中的触发器和约束的控制行为。

订阅流不适用于配置为传送 Transact-SQL 的文章。 若要使用订阅流,请将项目配置为改为传递存储过程调用。

-SubscriptionTableName subscription_table

在给定订阅服务器上生成或使用的订阅表的名称。 如果未指定, 将使用MSreplication_subscriptions 表。 对不支持长文件名的数据库管理系统(DBMS)使用此选项。

-SubscriptionType [ 0 | 1 | 2 ]

指定分发的订阅类型。 指示 0 推送订阅的值、指示请求订阅的值 1 ,以及指示匿名订阅的值 2

-TransactionsPerHistory [ 0 | 1 | ...10000 ]

指定历史日志记录的事务间隔。 如果自历史日志记录上一实例之后的已提交事务数大于此选项,将记录历史记录消息。 默认值为 100。 指示无限TransactionsPerHistory0。 请参阅前面的 –MessageInterval参数。

-UseDTS

必须指定为允许数据转换的发布的参数。

-UseInprocLoader

通过让分发代理在将快照文件应用于订阅服务器时使用 BULK INSERT 命令,提高初始快照的性能。 此参数已弃用,因为它与 XML 数据类型不兼容。 如果不复制 XML 数据,则可以使用此参数。 此参数不能与字符模式快照或非 SQL Server 订阅服务器一起使用。 如果使用此参数,订阅服务器上的 SQL Server 服务帐户需要对快照 .bcp 数据文件所在的目录具有读取权限。 如果未使用此参数,则代理(适用于非 SQL Server 订阅服务器)或代理(对于 SQL Server 订阅服务器)加载的 ODBC 驱动程序从文件读取,因此不使用 SQL Server 服务帐户的安全上下文。

-UseOledbStream

指定此参数时,可以将二进制大型对象数据作为流进行绑定。 用于 -OledbStreamThreshold 指定使用流上方的大小(以字节为单位)。 UseOledbStreaming 默认为启用状态。

在 SQL Server 2017 (14.x) CU 22 及更高版本中, UseOledbStreaming 写入文件夹 C:\Users\<DistributionAgentAccount>\AppData\Temp

在 SQL Server 2017 (14.x) CU 22 之前, UseOledbStreaming 写入 C:\Program Files\Microsoft SQL Server\<version>\COM 文件夹。

在 SQL Server 2019 (15.x) CU 29、SQL Server 2022 (16.x) CU 16 及更高版本中,可以通过更新-UseOledbStreaming来禁用 OLE DB 流式处理,以避免0在 SQL Server 中运行分发代理时出现错误消息中提到的错误。

注解

如果安装SQL Server 代理以在本地系统帐户下运行,而不是在域用户帐户(默认值)下运行,则服务只能访问本地计算机。 如果将以 SQL Server 代理身份运行的分发代理配置为在登录到 SQL Server 实例时使用 Windows 身份验证模式,则分发代理将失败。 默认设置为 SQL Server 身份验证。 View and Modify Replication Security Settings有关更改安全帐户的详细信息,请参阅。

若要启动分发代理,请从命令提示符执行distrib.exe。 有关信息,请参阅复制代理可执行文件概念