我的方法是创建一个包含理想方案的查找表 每个工作,每个状态,以及他们当天的计数。
请指导。
答案 0 :(得分:0)
日志表:
Create Table Log_for_Jobs
(
Date_time datetime not null,
Job_name varchar(20) not null,
Job_status varchar(10) null,
Log_message varchar(100) null
)
然后创建一个SP来检查作业,将结果放入此表中。
答案 1 :(得分:0)
你可以有两个你建议的表,一个用于记录你的工作历史,另一个用于存储可能的状态。
<强> JobState 强>
ID | Description
1 | Start
2 | Pre processing
3 | Processing
4 | Finished
5 | Error
我认为你在这里有两个结果,要么你的应用程序在给定状态下记录错误(例如在3 - 处理期间),或者它停止并且不再记录任何内容。我添加了5 - Error来表示应用程序错误状态。
接下来要考虑的是你需要记录每个州还是可以覆盖以前的州?记录每个状态的两个可能原因是知道每个步骤所花费的时间并记录额外信息以及每个步骤(例如,处理150行等)。但是如果不需要你可以只用下一个状态更新该作业的行,并且为了成功它应该以4结束 - 完成。
<强> JobHistory 强>
ID | JobID | JobTime | JobStateID | Message
1 | 55 | 1 Jan 2015 9:45am | 1 | Start file c:\test.txt
2 | 55 | 1 Jan 2015 9:47am | 2 | Preprocessing 117 rows...
3 | 55 | 1 Jan 2015 9:55am | 3 | Processing
4 | 55 | 1 Jan 2015 9:57am | 5 | ERROR: Unexpected character at line 321 - '@'
我假设它必须完成上一步才能进入下一步。如果是这种情况,那么您只需选择state = 4的所有作业即可成功完成所有作业(然后对它们执行某些操作)。
SELECT *
FROM JobHistory
WHERE State = 4
// AND JobTime is within the last day?
并选择所有作业,按作业ID分组,其中包含max(state)&lt;&gt; 4对于有错误的人。然后,您可以使用max状态执行某些操作,它可以是5 - 错误(使用表中记录的错误消息)或1,2,3,因此报告处理在此步骤停止。
SELECT JobID, Max(JobStateId) as EndJobStateId, Min(JobTime) as StartTime, Max(JobTime) as EndTime
FROM JobHistory
GROUP BY JobID
HAVING Max(JobStateId) <> 4