ee_dbq_clear
形式
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関数を実行すると,デッドロックが発生する場合があります。詳細は「注意事項」を参照してください。
通番を初期化するには,次の条件をすべて満たす必要があります。満たさない場合は,エラーリターンします。( )内は条件を満たさない場合のリターン値です。
-
自プロセスが対象のDBキューから読み出す(EEDBQER_QUE_TYPE)
-
読み出し停止中(EEDBQER_TIMING)
-
書き込み抑止中(EEDBQER_TIMING)
-
他スレッドでメッセージの読み出し,スキップ,初期化を実行していない(EEDBQER_TIMING)
これらの条件に関係なく,強制的に通番を初期化することもできます。強制的に初期化する場合に,強制初期化と次のトランザクションが競合すると,次のトランザクションがロールバックすることがあります。
-
DBキューからメッセージを読み出し中のトランザクション
-
DBキューのメッセージをスキップ中のトランザクション
【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キューの属性が対応していません。
|
EEDBQER_MEMORY_SHORT※ |
メモリが不足しました。 |
EEDBQER_NO_DBQUE |
引数に設定したDBキュー名は存在しません。 |
EEDBQER_NO_LIBRARY |
DBキュー機能のライブラリがリンケージされていません。 |
EEDBQER_NO_OPTION |
DBキュー機能は使用できません。 |
EEDBQER_QUE_TYPE |
設定されたDBキューのタイプは機能対象外です。
|
EEDBQER_RM_ACCESS※ |
リソースマネジャアクセス時にエラーが発生しました。 |
EEDBQER_RM_CONNECT※ |
該当するスレッドではリソースマネジャに接続されていません。 |
EEDBQER_ROLLBACK_RESERVE |
HiRDBの暗黙的ロールバックが発生したため,ee_trn_rollback_mark関数を呼び出しました。 |
EEDBQER_STOP※ |
DBキューが使用できない状態です。 |
EEDBQER_TIMING※ |
このAPI関数を呼び出せる状態ではありません。
|
EEDBQER_UNRESOLVABLE※ |
その他のエラーが発生しました。 |
注意事項
-
通番の初期化は,サービス関数のリターン,またはee_trn_chained_commit関数発行時に行われます。
-
同一グローバルトランザクションのトランザクションブランチ間で,同一DBキューに対してee_dbq_msgput関数の発行,または初期化を行うと,デッドロックが発生する場合があります。
-
DBキューからメッセージを読み出したトランザクションで該当するDBキューをee_dbq_acsctl関数で読み出し停止にして,該当するDBキューに初期化要求を行っても受け付けません。初期化要求は,別トランザクションまたはコマンドで実行してください。
-
flagsにEEDBQ_MSGCLR_FLAGS_ALLを設定する場合に,他プロセスでDBキューにアクセスしているとデッドロックするおそれがあります。EEDBQ_MSGCLR_FLAGS_ALLを指定する場合は,すべてのサーバで同じ共有情報表を使用するか,同じ共用情報表を使用していないプロセスからはDBキューにアクセスしないようにしてください。
-
ee_dbq_clear関数の受け付け後に,eedbqchgrコマンドで読み出し先サーバを07-80より前のバージョンのサーバに変更した場合,ee_dbq_clear関数を受け付けたトランザクションがロールバックします。
-
flagsにEENOFLAGSを設定したee_dbq_clear関数の受け付け後に,eedbqchgrコマンドで読み出し先サーバを変更した場合,ee_dbq_clear関数を受け付けたトランザクションがロールバックします。