gpt4 book ai didi

sql-server - 使用 RDS 检索 Agent SQL 作业的当前执行状态

转载 作者:行者123 更新时间:2023-12-05 07:38:16 24 4
gpt4 key购买 nike

多年来我一直使用这个查询来监控作业的执行:

    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 服务器上运行良好。但是现在我用的是 Amazon 的 RDS,安全性太差了。我什至无法执行

select * FROM msdb.dbo.sysjobactivity 

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

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

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

‘设置 fmtonly 关闭 exec msdb.dbo.sp_help_job’)

...)

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

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

最佳答案

假设在 SQL Server RDS 实例中有一个只有公共(public)服务器角色的登录名。

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

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

EXEC sp_addrolemember [SQLAgentUserRole], [你的用户名];

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

可以找到有关程序的详细信息here

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

关于sql-server - 使用 RDS 检索 Agent SQL 作业的当前执行状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com