我有一个调度程序(用 c# 创建)在多台机器上运行,访问一个数据库。桌子上有要做的工作清单。如下所示:
ID JobDetail Flag
1 --- 1
2 --- 0
3 --- 0
Flag:
0: open, 1: inprogress, 2: completed
我的问题是我应该怎么做才能确保没有调度程序执行相同的工作。
对不起,这个问题应该很笼统,如果有欺骗请给我一个链接。
我有一个调度程序(用 c# 创建)在多台机器上运行,访问一个数据库。桌子上有要做的工作清单。如下所示:
ID JobDetail Flag
1 --- 1
2 --- 0
3 --- 0
Flag:
0: open, 1: inprogress, 2: completed
我的问题是我应该怎么做才能确保没有调度程序执行相同的工作。
对不起,这个问题应该很笼统,如果有欺骗请给我一个链接。
尝试这样的事情:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
DECLARE @CURR_JOBID int;
SELECT @CURR_JOBID=top 1 ID FROM JOB_TABLE WHERE Flag=0 and <other condtions>
BEGIN TRANSACTION
UPDATE JOB_TABLE set Flag=1 where ID=@CURR_JOBID
COMMIT
SET TRANSACTION ISOLATION LEVEL READ COMMITED;
GO
现在使用@CURR_JOBID 进行进一步处理
作业完成后,将 Flag 更新为 2