Hitachi

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


ee_dbq_clear

〈このページの構成〉

名称

DBキューの通番初期化

形式

ANSI C,C++の形式

#include <eedbq.h>
int ee_dbq_clear(char *dbque_name, EELONG flags)

機能

通番初期化属性があるDBキューの書き込み通番,読み出し通番を0で初期化します。未読み出しのメッセージがある場合は破棄します。初期化した通番を元に戻したり,破棄したメッセージを読み出したりはできません。

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

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

通番を初期化するには,次の条件をすべて満たす必要があります。満たさない場合は,エラーリターンします。( )内は条件を満たさない場合のリターン値です。

これらの条件に関係なく,強制的に通番を初期化することもできます。強制的に初期化する場合に,強制初期化と次のトランザクションが競合すると,次のトランザクションがロールバックすることがあります。

【TP1/FSP限定】TP1/FSP使用時は,最初に起動したサーバのJIトランザクションから,初期化属性があるすべてのDBキューを初期化できます。

UAPで値を設定する引数

●dbque_name

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

flagsにEEDBQ_MSGCLR_FLAGS_ALLを指定した場合は,NULL文字を設定してください。

●flags

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

EENOFLAGS

関数の呼び出し条件をすべて満たしているかチェックして初期化する場合に指定します。

EEDBQ_MSGCLR_FLAGS_FORCE

関数の呼び出し条件に関係なく強制初期化する場合に指定します。

EEDBQ_MSGCLR_FLAGS_ALL  【TP1/FSP限定】

定義されているすべてのDBキューの通番を初期化します。TP1/FSP使用時の最初に起動したサーバのJIトランザクションでだけ指定できます。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDBPP

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

EECOMER_CNDUOC

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

EECOMER_ENVIRON

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

EEDBQER_ARGUMENT

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

EEDBQER_CONDITION

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

  • トランザクション種別不正

EEDBQER_FUNC_OPT

DBキューの属性が対応していません。

  • DBキューに通番初期化属性が付与されていません。

  • DBキューのフォーマットタイプに1以上が指定されていません。

EEDBQER_MEMORY_SHORT

メモリが不足しました。

EEDBQER_NO_DBQUE

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

EEDBQER_NO_LIBRARY

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

EEDBQER_NO_OPTION

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

EEDBQER_QUE_TYPE

設定されたDBキューのタイプは機能対象外です。

  • 相手読み出しDBキュー

EEDBQER_RM_ACCESS

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

EEDBQER_RM_CONNECT

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

EEDBQER_ROLLBACK_RESERVE

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

EEDBQER_STOP

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

EEDBQER_TIMING

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

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

  • 書き込み抑止中ではありません。

  • 他スレッドでDBキューにアクセスしています。

EEDBQER_UNRESOLVABLE

その他のエラーが発生しました。

注※

flagsにEEDBQ_MSGCLR_FLAGS_ALLを設定した場合,エラーが発生したDBキューでエラーリターンします。一部のDBキューの通番初期化が実行されているおそれがあります。無効にしたい場合,ロールバックしてください。

注意事項

  1. 通番の初期化は,サービス関数のリターン,またはee_trn_chained_commit関数発行時に行われます。

  2. 同一グローバルトランザクションのトランザクションブランチ間で,同一DBキューに対してee_dbq_msgput関数の発行,または初期化を行うと,デッドロックが発生する場合があります。

  3. DBキューからメッセージを読み出したトランザクションで該当するDBキューをee_dbq_acsctl関数で読み出し停止にして,該当するDBキューに初期化要求を行っても受け付けません。初期化要求は,別トランザクションまたはコマンドで実行してください。

  4. flagsにEEDBQ_MSGCLR_FLAGS_ALLを設定する場合に,他プロセスでDBキューにアクセスしているとデッドロックするおそれがあります。EEDBQ_MSGCLR_FLAGS_ALLを指定する場合は,すべてのサーバで同じ共有情報表を使用するか,同じ共用情報表を使用していないプロセスからはDBキューにアクセスしないようにしてください。

  5. ee_dbq_clear関数の受け付け後に,eedbqchgrコマンドで読み出し先サーバを07-80より前のバージョンのサーバに変更した場合,ee_dbq_clear関数を受け付けたトランザクションがロールバックします。

  6. flagsにEENOFLAGSを設定したee_dbq_clear関数の受け付け後に,eedbqchgrコマンドで読み出し先サーバを変更した場合,ee_dbq_clear関数を受け付けたトランザクションがロールバックします。