Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


ee_dbq_skip

〈このページの構成〉

名称

メッセージの読み出しスキップ

形式

ANSI C,C++の形式

#include <eedbq.h>
int ee_dbq_skip(EEULONG skip_flg, EEULONG read_num, 
                char *dbque_name, EELONG flags)

機能

DBキューのメッセージを読み出し済みにして,読み出しをスキップします。

メッセージを読み出し済みに更新するためのSQLの実行は,トランザクションの同期点処理内で行います。1トランザクションで複数のDBキューに対してこの関数を実行した場合は,API関数の実行順序に関係なく,DBキュー名の昇順にSQLを実行します。そのため,複数のDBキューに対してこの関数を実行するトランザクション間でこの関数の実行順序が異なっても,実行順序が原因でデッドロックすることはありません。

同一グローバルトランザクションのトランザクションブランチ間でこのAPI関数を実行すると,デッドロックが発生する場合があります。詳細は「注意事項」を参照してください。

UAPで値を設定する引数

●skip_flg

次のフラグを設定します。

EEDBQ_SKIP_ALL

読み出し通番が書き込み通番と同じになるまで,すべてのメッセージを読み出し済みにします。

EEDBQ_SKIP_ONE

未読み出しの先頭にある1メッセージだけを読み出し済みにします。

EEDBQ_SKIP_NUM

read_numで設定された読み出し通番まで,メッセージを読み出し済みにします。

●read_num

メッセージ読み出し通番を設定します。

skip_flgでEEDBQ_SKIP_NUMを設定した場合に,この引数が有効になります。

●dbque_name

DBキュー名を27バイト以内のアスキー文字列で設定します。文字列の末尾にはNULL文字を付けてください。このNULL文字は文字列の長さに数えません。

●flags

EENOFLAGSを設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,この機能は使用できません。

EECOMER_CNDUOC

UOCから発行しているため,この機能は使用できません。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EEDBQER_ARGUMENT

引数に設定した値が間違っています。

EEDBQER_CONDITION

関数の呼び出し条件が不正です。

EEDBQER_MEMORY_SHORT

メモリが不足しました。

EEDBQER_NO_DBQUE

引数に設定したDBキュー名は存在しません。

EEDBQER_NO_LIBRARY

DBキュー機能のライブラリがリンケージされていません。

EEDBQER_NO_OPTION

DBキュー機能は使用できません。

EEDBQER_QUE_TYPE

設定されたDBキューのタイプはDBキュー機能で使用できません。

  • 相手読み出しDBキュー

EEDBQER_READ_NUM

引数read_numに指定した値は不当な値です。

EEDBQER_RM_ACCESS

リソースマネジャへのアクセス時にエラーが発生しました。

EEDBQER_RM_CONNECT

該当するスレッドではリソースマネジャに接続されていません。

EEDBQER_ROLLBACK_RESERVE

HiRDBの暗黙的ロールバックが発生したため,ee_trn_rollback_mark関数を呼び出しました。

EEDBQER_SKIPMSG_NOTHING

この要求で読み出し済みにするメッセージはありません。

EEDBQER_STOP

DBキューが使用できない状態です。

EEDBQER_TIMING

このAPI関数を呼び出せる状態ではありません。

  • 読み出し停止中ではありません。

  • 通番の初期化中です。

注意事項

  1. スキップの対象になるのは,トランザクションのコミットによって書き込みが完了したメッセージです。コミットしていない場合は,メッセージをスキップできません。

  2. メッセージ読み出し通番は,トランザクションのコミット時に更新されます。

  3. メッセージをスキップしたあと,トランザクションのコミットまでは,さらにスキップすることはできません。

  4. 該当するDBキューが読み出し停止の状態(コマンド,TP1/EEサービス定義,API関数で指定するか,または障害発生による)にある場合だけ,メッセージをスキップできます。

  5. 同一グローバルトランザクションのトランザクションブランチ間で,同一DBキューに対してメッセージを書き込んだりスキップしたりすると,デッドロックが発生する場合があります。

  6. DBキューの読み出しトランザクションで,該当するDBキューを読み出し停止状態にしている場合,メッセージをスキップできません。別のトランザクションでee_dbq_skip関数を呼び出すか,またはコマンドを実行してメッセージをスキップしてください。