多年来,我一直使用此查询来监视作业的执行:
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 的用户是作业所有者时才查看作业的历史记录