适用于: SQL Server 
Azure SQL 托管实例
为给定数据库添加日志读取器代理。 此存储过程在发布服务器上对发布数据库执行。
重要
使用远程分发服务器配置发布服务器时,为所有参数(包括 @job_login 和 @job_password)提供的值将作为纯文本发送到分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅将 SQL Server 数据库引擎配置为使用加密连接。
语法
sp_addlogreader_agent
    [ [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @publisher_security_mode = ] publisher_security_mode ]
    [ , [ @publisher_login = ] N'publisher_login' ]
    [ , [ @publisher_password = ] N'publisher_password' ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]
参数
[ @job_login = ] N'job_login'
运行代理的 Windows 帐户的登录名。 @job_login 为 nvarchar(257),默认值为 NULL. 此 Windows 帐户总是用于与分发服务器建立代理连接。 在Azure SQL 托管实例,使用 SQL Server 帐户。
注意
对于非 SQL Server 发布服务器,此登录名必须与sp_adddistpublisher中指定的登录名相同。
[ @job_password = ] N'job_password'
运行代理的 Windows 帐户的密码。 @job_password为 sysname,默认值为 NULL.
重要
不要将身份验证信息存储在脚本文件中。 为保证安全性,应当在运行时再提供登录名和密码。
[ @job_name = ] N'job_name'
现有代理作业的名称。 @job_name为 sysname,默认值为 NULL. 只有在使用现有作业而不是使用新创建的作业(默认值)来启动代理时,才需要指定此参数。
[ @publisher_security_mode = ] publisher_security_mode
注意
Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。
连接到发布服务器时代理使用的安全模式。 @publisher_security_mode为 smallint,默认值为 1. 必须为非 SQL Server 发布服务器指定值 0 。 以下值定义安全模式:
0指定 SQL Server 身份验证。1指定Windows 身份验证。2指定从 SQL Server 2022 (16.x) CU 6 开始Microsoft Entra 密码身份验证。3指定从 SQL Server 2022 (16.x) CU 6 开始的 Microsoft Entra 集成身份验证。4指定从 SQL Server 2022 (16.x) CU 6 开始Microsoft Entra 令牌身份验证。
[ @publisher_login = ] N'publisher_login'
连接发布服务器时所使用的登录名。 @publisher_login为 sysname,默认值为 NULL. 当@publisher_security_mode为0时,必须指定@publisher_login。 如果@publisher_login是NULL@publisher_security_mode1,则在连接到发布服务器时使用@job_login中指定的 Windows 帐户。
[ @publisher_password = ] N'publisher_password'
连接到发布服务器时使用的密码。 @publisher_password为 sysname,默认值为 NULL.
重要
不要将身份验证信息存储在脚本文件中。 为保证安全性,应当在运行时再提供登录名和密码。
[ @publisher = ] N'publisher'
非 SQL Server 发布服务器的名称。 @publisher为 sysname,默认值为 NULL.
注意
不应为 SQL Server 发布服务器指定此参数。
返回代码值
0(成功)或 1(失败)。
注解
sp_addlogreader_agent 用于事务复制。
如果在创建使用该数据库的发布之前升级了要复制到此版本的 SQL Server 的数据库,则必须执行 sp_addlogreader_agent 该操作才能添加日志读取器代理。
权限
只有 sysadmin 固定服务器角色的成员或db_owner固定数据库角色的成员才能执行sp_addlogreader_agent。
示例
-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 
-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';
-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';
-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO