You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TSQL查询SQL Server事务复制日志读取代理账户?

获取SQL Server事务复制日志读取代理账户的TSQL查询语句

日志读取代理的账户信息并非存储在分发数据库的普通系统表中,而是在几个系统视图里。以下是可直接用于自动化脚本的TSQL查询语句:

基础查询:获取发布关联的日志读取代理核心账户信息

USE [distribution]
GO

SELECT 
    p.publication AS 发布名称,
    la.name AS 代理名称,
    sl.name AS 代理登录账户,
    la.subscriber_security_mode AS 订阅端安全模式, -- 0=SQL身份验证, 1=Windows身份验证
    la.subscriber_login AS 订阅端登录账户,
    la.publisher_security_mode AS 发布端安全模式, -- 0=SQL身份验证, 1=Windows身份验证
    la.publisher_login AS 发布端登录账户
FROM 
    MSlogreader_agents la
JOIN 
    MSpublications p ON la.publication_id = p.publication_id
LEFT JOIN 
    syslogins sl ON la.job_id IN (SELECT job_id FROM sysjobs WHERE owner_sid = sl.sid)
ORDER BY 
    p.publication

进阶查询:查看代理作业的运行账户(含作业步骤细节)

如果需要更详细的作业运行账户信息(对应UI中代理安全里的执行账户),可以用这个查询:

USE [distribution]
GO

SELECT 
    p.publication AS 发布名称,
    j.name AS 代理作业名称,
    js.step_name AS 作业步骤名称,
    js.subsystem AS 作业子系统,
    CASE WHEN js.runas_user IS NOT NULL THEN js.runas_user ELSE sl.name END AS 运行账户
FROM 
    MSlogreader_agents la
JOIN 
    MSpublications p ON la.publication_id = p.publication_id
JOIN 
    sysjobs j ON la.job_id = j.job_id
JOIN 
    sysjobsteps js ON j.job_id = js.job_id
LEFT JOIN 
    syslogins sl ON j.owner_sid = sl.sid
ORDER BY 
    p.publication, js.step_id

关键视图说明

  • MSlogreader_agents:存储日志读取代理的核心配置,关联对应发布和作业ID
  • MSpublications:关联具体发布名称,便于识别目标发布
  • sysjobs/sysjobsteps:获取代理对应的SQL Server Agent作业细节,包括实际运行账户
  • syslogins:将账户SID映射为可读的登录账户名称

内容的提问来源于stack exchange,提问作者RaviLobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:43:13