我想实现一个“作业超时报警”功能,如果某个job超过2小时,那就自动发送email给我,否则还需要人工去查
大家有没有经验?
谢谢!!
大家有没有经验?
谢谢!!
解决方案 »
- 为何无法“配置发布,订阅服务器和分发...”?(提示“sql server复制不支持昵称,例如使用‘.’或者‘(local)’作为服务器名”)
- 在线等:请问这个SQL语句该怎么写?
- 求一条SQL语句
- 请帮我解决SQL SERVER 连接问题,在线等待!
- 怎么在程序中实现在SQL Server2000中插入一个字段?在线等!
- 有什么办法可以快速的把Access数据库转换成SQL2005的
- 我想学数据库。
- 怎样得到一个数据库分配空间和实际所用空间的大小呀?????
- 空手道!
- 大力兄:对你的回复的几个问题
- 万年难遇的问题,大家帮忙看看这个TOP关键字的问题,非常奇怪。
- 文本文件导入SQL SERVER问题(50分)
可以通过master.dbo.xp_sqlagent_enum_jobs来知道当前某个job正在运行,但没办法知道这个job是什么时候开始的
现在的情况是一个job执行了太久(比如几天),这样的job不算失败,也没有事件可以触发通知
后面几栏上只有上次执行时间和下次执行时间,对于当前正在执行的job没有时间显示
where Running = 1 --当前正在运行的作业
--运行时间超过120分钟
and datediff(minute,ltrim([Next Run Date])+' '+ltrim([Next Run Time]/10000)+':'+ltrim([Next Run Time]%10000/100)+':'+ltrim([Next Run Time]%100),getdate())>120/*xp_sqlagent_enum_jobs 对正在运行的作业,即使跨越了调度间隔,也不会刷新 Next Run Date 和 Next Run Time,所以它们就是当前运行作业的开始日期和时间。这两个字段都是整型,Next Run Date比较好理解;
Next Run Time = hour * 10000 + minute * 100 + second*/
如果超过一定时间还没有读到完成的时间,就发邮件。
但 job 的状态会是正在运行(run_status=4, job 的状态是 stepid = 0 的那条记录)
所以如果你要保证时间最准确的话, 你可以为每个 job 多建立一个空步骤(即这个步骤什么都不做, 放在job的第一步)
由于第1步不花时间, 所以 job 一运行, 第1步就完成了, msdb.dbo.sysjobhistory 中就有 job 正在运行的记录, 并且可以查到开始时间这种方法应该算是最准确的, 但由于要求每个 job 第1步都是一个空步骤, 所以这要看你的公司的规范是否允许了