多年来我一直使用这个查询来监控作业的执行:
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 未经授权