sql-server - 使用 RDS 检索 Agent 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 服务器上运行良好。但是现在我用的是 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 才允许查看作业历史

https://stackoverflow.com/questions/48065851/

相关文章:

shell - zsh 导出路径在直接输入终端时有效,但在输入/.zshrc 时无效

msbuild - msdeploy 错误 ERROR_USER_UNAUTHORIZED : We

android - 有时使用 AlarmManager 不会触发警报

javascript - 尝试在 javascript 中捕获未定义的检查

java - Spring AMQP - channel 交易与发布者确认

amazon-web-services - API 网关 - 请求过多异常 (429)

macos - 如何在 Mac 终端中使用 SoX 从文本文件中修剪特定时间的音频文件?

php - Discord API 错误 #40001 未经授权

android - 我如何从 firebase 实时数据库中获取所有数据

encryption - 如何在 CefPython 中添加 MP4(专有编解码器)支持