复制日志读取器代理

适用于:SQL ServerAzure 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]  

参数

%>
显示用法信息。

-Publisherserver_name[\instance_name]
发布服务器的名称。 指定该服务器上 Microsoft SQL Server 默认实例的 server_name。 指定该服务器上 SQL Server 命名实例的 server_name\instance_name

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

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

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

-Distributorserver_name[\instance_name]
分发服务器名称。 指定该服务器上 SQL Server 默认实例的 server_name。 指定该服务器上 SQL Server 命名实例的 server_name\instance_name

-DistributorLogindistributor_login
分发服务器登录名。

-DistributorPassworddistributor_password
分发服务器密码。

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

-EncryptionLevel [ 0 | 1 | 2 ]
是日志读取器代理在建立连接时使用的传输层安全性 (TLS)(旧称为“安全套接字层 (SSL)”)加密的级别。

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

注意

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

有关详细信息,请参阅查看和修改复制安全设置

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

-HistoryVerboseLevel [ 0| 1| 2]
指定在日志读取器运行期间记录的历史记录数量。 选择 1 可将历史日志记录对性能的影响减小到最低限度。

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

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

-LoginTimeOutlogin_time_out_seconds
登录超时前等待的秒数。默认值为 15 秒。

-LogScanThresholdscan_threshold
仅供内部使用。

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

注意

对于非 SQL Server 发布,会忽略此参数。 有关详细信息,请参阅 Performance Tuning for Oracle Publishers的“配置事务集作业”部分。

警告

MaxCmdsInTran 并非始终开启。 其之所以存在,是为了解决某人在单个事务中意外执行了大量 DML 操作(在整个事务进入分发数据库并持有锁之前,导致命令分发延迟等)的问题。 如果你经常遇到这种情况,请审查应用程序并找到减少事务大小的方法。

警告

如果同时为变更数据捕获和复制启用了给定的发布数据库,则不支持 MaxCmdsInTran。 在此配置中使用 MaxCmdsInTran 可能会导致 CDC 更改表中数据丢失。 如果在复制大型事务时添加和删除 MaxCmdsInTran 参数,也可能会导致 PK 错误。

-MessageIntervalmessage_interval
用于历史日志记录的时间间隔。 记录完上一个历史事件后,如达到 MessageInterval 值,会开始记录新的历史事件。

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

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

在 AG 上配置交易性发布时,“日志读取器代理”会为侦听器创建一个动态关联服务器验证元数据。 从 SQL Server 2022 CU10 开始,动态链接服务器的配置发生了更改。 有关详细信息,请参阅 KB5031778

适用对象:SQL Server(从 SQL Server 2019 (15.x) 开始)。

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

-OutputVerboseLevel [ 0| 1| 2 | 3 | 4 ]
指定输出是否应提供详细内容。

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

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

-PacketSizepacket_size
数据包大小(按字节计)。 默认值为 4096(字节)。

-PollingIntervalpolling_interval
对日志进行已复制事务查询的频率(以秒计)。 默认值为 5 秒。

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

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

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

-PublisherLoginpublisher_login
发布服务器登录名。

-PublisherPasswordpublisher_password
发布服务器密码。

-QueryTimeOutquery_time_out_seconds
查询超时之前等待的秒数。默认为 1800 秒。

-ReadBatchSizenumber_of_transactions
每个处理周期从发布数据库的事务日志中读取的最大事务数目,默认值为 500,最多为 10000。 代理不断读取批次中的事务,直到从该日志中读取所有事务为止。 Oracle 发布服务器不支持该参数。

-ReadBatchThresholdnumber_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 。 有关信息,请参阅复制代理可执行文件概念

更改历史记录

更新的内容
添加了 -ExtendedEventConfigFile 参数。
添加了 -MultiSubnetFailover 参数

另请参阅

复制代理管理