复制日志读取器代理

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

复制日志读取器代理是一个可执行文件,用于监视为事务复制配置的每个数据库的事务日志,并将标记为要复制的事务从事务日志复制到分发数据库中。

注意

可以按任意顺序指定参数。 如果未指定可选参数,将使用基于默认代理配置文件的预定义值。

语法

logread [ -? ]
-Publisher server_name [ \instance_name ]
-PublisherDB publisher_database
[ -Continuous ]
[ -DefinitionFile def_path_and_file_name ]
[ -Distributor server_name[ \instance_name ] ]
[ -DistributorLogin distributor_login ]
[ -DistributorPassword distributor_password ]
[ -DistributorSecurityMode [ 0 | 1 ] ]
[ -EncryptionLevel [ 0 | 1 | 2 ] ]
[ -ExtendedEventConfigFile configuration_path_and_file_name ]
[ -HistoryVerboseLevel [ 0 | 1 | 2 ] ]
[ -KeepAliveMessageInterval keep_alive_message_interval_seconds ]
[ -LoginTimeOut login_time_out_seconds ]
[ -LogScanThreshold scan_threshold ]
[ -MaxCmdsInTran number_of_commands ]
[ -MessageInterval message_interval ]
[ -MultiSubnetFailover [ 0 | 1 ] ]
[ -Output output_path_and_file_name ]
[ -OutputVerboseLevel [ 0 | 1 | 2 | 3 | 4 ] ]
[ -PacketSize packet_size ]
[ -PollingInterval polling_interval ]
[ -ProfileName profile_name ]
[ -PublisherFailoverPartner server_name[ \instance_name ] ]
[ -PublisherSecurityMode [ 0 | 1 ] ]
[ -PublisherLogin publisher_login ]
[ -PublisherPassword publisher_password ]
[ -QueryTimeOut query_time_out_seconds ]
[ -ReadBatchSize number_of_transactions ]
[ -ReadBatchThreshold read_batch_threshold ]
[ -RecoverFromDataErrors ]

参数

-?

显示用法信息。

-Publisher server_name [ \instance_name ]

发布服务器的名称。 <server_name>指定该服务器上 SQL Server 的默认实例。 <server_name>\<instance_name>指定该服务器上的 SQL Server 命名实例。

-PublisherDB publisher_database

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

-Continuous

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

-DefinitionFile def_path_and_file_name

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

-Distributor server_name [ \instance_name ]

分发服务器名称。 <server_name>指定该服务器上 SQL Server 的默认实例。 <server_name>\<instance_name>指定该服务器上的 SQL Server 命名实例。

-DistributorLogin distributor_login

分发服务器登录名。

-DistributorPassword distributor_password

分发服务器密码。

-DistributorSecurityMode [ 0 | 1 ]

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

-EncryptionLevel [ 0 | 1 | 2 ]

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

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

注意

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

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

-ExtendedEventConfigFile configuration_path_and_file_name

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

-HistoryVerboseLevel [ 0 | 1 | 2 ]

指定在日志读取器运行期间记录的历史记录数量。 可以通过选择 1来最大程度地减少历史记录日志记录的性能影响。

HistoryVerboseLevel 值 说明
0 无。
1(默认值) 总是更新具有相同状态(启动、进行中、成功等)的上一历史记录消息。 如果不存在状态相同的上一记录,将插入新记录。
2 除非记录为空闲消息或长时间运行的作业消息等信息(此时将更新上一记录),否则插入新的历史记录。

-KeepAliveMessageInterval keep_alive_message_interval_seconds

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

-LoginTimeOut login_time_out_seconds

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

-LogScanThreshold scan_threshold

标识为仅供参考。 不支持。 不保证以后的兼容性。

-MaxCmdsInTran number_of_commands

指定在日志读取器将命令写入到分发数据库时可分组到一个事务中的语句的最大数目。 如果使用此参数,在发布服务器上的大事务(包含许多命令)应用于订阅服务器时,日志读取器代理和分发代理可将这些大事务拆分为若干个较小的事务。 指定此参数可以减少分发服务器的争用问题并缩短发布服务器与订阅服务器之间的滞后时间。 由于原始事务以较小的单位应用,订阅服务器可以在原始事务结束前访问大型逻辑发布服务器事务的行,从而打破严格的事务原子性。 默认值为 0保留发布服务器的事务边界。

对于非 SQL Server 发布,将忽略此参数。 有关详细信息,请参阅 配置事务集作业

MaxCmdsInTran 未设计为始终打开。 它适用于在单个事务中意外执行大量 DML 操作的情况。 这会导致命令的分布延迟,直到整个事务位于分发数据库中、正在保留锁等。如果经常出现这种情况,请查看应用程序并找到减少事务大小的方法。

警告

如果在 MaxCmdsInTran 复制大型事务时添加和删除参数,则可能会出现主键错误。 若要解决大型事务的主键错误,请将参数添加 MaxCmdsInTran 回,直到事务复制到分发数据库。

MaxCmdsInTran不支持对同时启用变更数据捕获(CDC)和复制的数据库使用参数,并可能导致 CDC 更改表中的数据丢失。

-MessageInterval message_interval

用于历史记录日志记录的时间间隔。 记录最后一个历史记录事件后的值时 MessageInterval ,将记录历史记录事件。

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

-MultiSubnetFailover [ 0 | 1 ]

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

指定是否启用 MultiSubnetFailover 属性。 如果你的应用程序要连接到不同子网上的 Always On 可用性组 (AG),则将 MultiSubnetFailover 设置为 1 (true) 会加快检测(当前)活动服务器以及与服务器的连接。

在 AG 上配置交易性发布时,“日志读取器代理”会为侦听器创建一个动态关联服务器验证元数据。 在 SQL Server 2022(16.x) CU 10 及更高版本中,动态链接服务器的配置发生了变化。 有关详细信息,请参阅 KB5031778

-Output output_path_and_file_name

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

-OutputVerboseLevel [ 0 | 1 | 2 | 3 | 4 ]

指定输出是否应提供详细内容。

说明
0 仅输出错误消息。
1 输出所有代理进度报告消息。
2(默认值) 输出所有错误消息和代理进度报告消息。
3 输出每个复制的命令的前 100 个字节。
4 输出所有复制的命令。

进行调试时,值 2-4 颇为有用。

-PacketSize packet_size

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

-PollingInterval polling_interval

为复制的事务查询日志的频率(以秒为单位)。 默认值为 5 秒。

-ProfileName profile_name

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

-PublisherFailoverPartner server_name [ \instance_name ]

指定参加与发布数据库进行的数据库镜像会话的 SQL Server 故障转移伙伴实例。 有关详细信息,请参阅数据库镜像和复制 (SQL Server)

-PublisherSecurityMode [ 0 | 1 ]

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

-PublisherLogin publisher_login

发布服务器登录名。

-PublisherPassword publisher_password

发布服务器密码。

-QueryTimeOut query_time_out_seconds

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

-ReadBatchSize number_of_transactions

每个处理周期发布数据库的事务日志中读取的最大事务数,默认值为 500,最大为 10000。 代理将继续批量读取事务,直到从日志中读取所有事务。 Oracle 发布服务器不支持此参数。

-ReadBatchThreshold number_of_commands

要从事务日志中读取的复制命令数,然后由分发代理颁发给订阅服务器。 默认值为 0。 如果未指定此参数,则日志读取器代理将读取到日志末尾或指定的 -ReadBatchSize 数字(事务数)。

-RecoverFromDataErrors

指定日志读取器代理在从非 SQL Server 发布服务器发布的列数据中遇到错误时应继续运行。 默认情况下,这类错误可导致日志读取器代理失败。 使用 -RecoverFromDataErrors时,错误列数据会作为 NULL 或适当的非 null 值复制,警告消息将记录到 MSlogreader_history 表中。 仅 Oracle 发布服务器支持此参数。

注解

如果安装的 SQL Server 代理是通过本地系统帐户而不是域用户帐户(默认值)运行,则该服务仅可访问本地计算机。 如果以 SQL Server 代理身份运行的日志读取器代理已配置为在登录到 SQL Server 时使用 Windows 身份验证模式,则日志读取器代理将失败。 默认设置为 SQL Server 身份验证。 有关更改安全帐户的信息,请参阅 View and Modify Replication Security Settings

若要启动日志读取器代理,请从命令提示符执行 logread.exe 。 有关信息,请参阅复制代理可执行文件概念