Hitachi

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


CBLEEDBQ('CLEAR ')

〈このページの構成〉

名称

DBキューの通番初期化

形式

PROCEDURE DIVISIONの指定

CALL 'CBLEEDBQ' USING 一意名1 一意名2

DATA DIVISIONの指定

01 一意名1.
   02 データ名A  PIC X(8) VALUE 'CLEAR   '.
   02 データ名B  PIC X(5).
   02 FILLER    PIC X(3).
   02 データ名C  PIC S9(9) COMP.
01 一意名2.
   02 データ名D  PIC X(28).

機能

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

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

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

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

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

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

UAPで値を設定するデータ領域

●データ名A

DBキューの通番初期化要求を示す要求コードを「VALUE 'CLEAR△△△'」と設定します。

●データ名C

要求種別を設定します。

0

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

1

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

2  【TP1/FSP限定】

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

●データ名D

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

データ名Cに2を指定した場合は,空白を設定してください。

TP1/EEから値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

00001

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

00004

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

00005

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

05601

データ名に設定した値が間違っています。

05604

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

05602

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

05603

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

  • 読み出し停止中でない

  • 書き込み抑止中でない

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

05605

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

05607

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

05609

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

05615

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

05616

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

  • 相手読み出しDBキュー

05621

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

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

05608

メモリが不足しました。

05623

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

05639

HiRDBの暗黙的ロールバックが発生したため,CBLEETRN('ROLLMARK')を呼び出しました。

05651

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

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

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

注※

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

注意事項

  1. 通番の初期化は,サービス関数のリターン,またはCBLEETRN('C-COMMIT')の呼び出し時に行われます。

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

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

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

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

  6. データ名Cに0を設定したCBLEEDBQ('CLEAR ')の受け付け後に,eedbqchgrコマンドで読み出し先サーバを変更した場合,CBLEEDBQ('CLEAR ')を受け付けたトランザクションがロールバックします。