0

複数のマシンで実行されているスケジューラー(c#で作成)があり、単一のデータベースにアクセスしています。テーブルにはやるべき仕事のリストがあります。以下のように:

ID  JobDetail Flag
1   ---       1
2   ---       0
3   ---       0

Flag: 
0: open, 1: inprogress, 2: completed

私の質問は、スケジューラーが同じジョブを実行しないようにするために何をすべきかです。

申し訳ありませんが、この質問は非常に一般的なものである必要があります。重複がある場合は、リンクを教えてください。

4

1 に答える 1

2

このようなことを試してください:

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 を使用します

ジョブが完了したら、フラグを 2 に更新します。

于 2012-09-10T09:02:45.003 に答える