0

MQ を介して外部システムに送信される大量のレコードを含む DB2 テーブルがあります。テーブルには、レコードのステータス (送信済みまたは送信保留中) を示す列があります。

テーブルに「送信待ち」のレコードがあるかどうかを継続的にチェックするスケジューラプログラムを作成します。はいの場合、プログラムは保留中のレコードを送信し、それに応じてステータスを更新します

そのスケジュールは、複数のトランザクションで開始されます。したがって、同じプログラムの複数のインスタンスが同時に実行されると予想しています

私の質問は、同じレコードが複数のスケジューラによって同時に取得および送信されるのを防ぐ方法です。

行レベルのロックでカーソルを使用するように言われましたか? しかし、これがどのように機能するのかわかりません

備考: z/os 環境で CICS COBOL に取り組んでいます

4

3 に答える 3

0

これを行う 1 つの方法は次のとおりです。1) 大規模な DB2 テーブルのクラスタリング インデックスを決定します。2) 次に、プログラムの異なるインスタンスを実行して、このクラスタリング インデックスの異なる部分だけを調べます。たとえば、クラスタリング インデックスがアカウント ID のような一意の数値 ID フィールドにあり、ID サイズが Integer 9 の場合、インスタンス 1 はアカウント ID の範囲 0 ~ 099999999 を参照し、インスタンス 2 はアカウント ID の範囲 100000000 ~ 1999999999 を参照します。と .....

このようにして、必要に応じてホールドを使用して cusror を書き込み、更新とコミットを実行できます。

于 2015-04-14T20:08:13.223 に答える