使用 RDS 检索代理 SQL 作业的当前执行状态



多年来,我一直使用此查询来监视作业的执行:

    SELECT j.name , ja.start_execution_date ,
   Datediff(ss, ja.start_execution_date, Getdate()) AS 'HasRun(seconds)'    
    FROM   msdb.dbo.sysjobactivity ja   
    INNER JOIN msdb.dbo.sysjobs J   
    ON j.job_id = ja.job_id 
    WHERE  ja.session_id = (select MAX(sac.session_id) 
                              from msdb.dbo.sysjobactivity sac 
                             where sac.job_id = j.job_id)
    AND ja.start_execution_date IS not NULL
    and ja.stop_execution_date is null

此解决方案在普通的 MSSQL 服务器上运行良好。但是现在我使用的是亚马逊的RDS,安全性太有限了。我什至无法执行

select * FROM msdb.dbo.sysjobactivity 

使用"最完整的可用安全配置文件"登录。

我尝试了在不同博客上发布的其他解决方案(例如....

SELECT name, current_execution_status, job_id
INTO #Jobs
FROM OPENROWSET(‘SQLNCLI’, ‘server=(local);trusted_connection=yes’,

"设置FMT仅关闭执行msdb.dbo.sp_help_job"(

...

但是,由于缺少权限,这些都不适用于 RDS,无论是在 msdb 表、sps 还是其他元素上。

您是否有办法在表/变量上为普通用户检索 RDS 上的作业状态(即它是否正在运行(?

假设在

SQL 服务器 RDS 实例中有一个仅具有公共服务器角色的登录名。

1( 您需要将该登录名作为用户添加到 msdb 数据库使用 [msdb]去创建用户 [your_username] 用于登录 [your_username]

2( 将用户添加到角色 SQLAgentUserRole 之后

EXEC sp_addrolemember [SQLAgentUserRole], [your_username];

3(最后你应该能够运行exec msdb.dbo.sp_help_jobhistory

有关程序的详细信息,请点击此处

编辑:您需要运行查询,而不是使用GUI编辑 2:RDS 允许仅在运行 sp 的用户是作业所有者时才查看作业的历史记录

最新更新