Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


CBLDCDAM('OPEN')

〈このページの構成〉

名称

論理ファイルのオープン

形式

PROCEDURE DIVISIONの指定

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

DATA DIVISIONの指定

01 一意名1.
   02 データ名A  PIC X(8) VALUE 'DCDAMSVC'.
   02 データ名B  PIC X(5).
   02 FILLER    PIC X(3).
   02 データ名C  PIC X(8).
   02 FILLER    PIC S9(9) COMP.
   02 FILLER    PIC S9(9) COMP.
   02 データ名H  PIC S9(9) COMP.
   02 FILLER    PIC X(28).
01 一意名2.
   02 データ名E  PIC X(4) VALUE 'OPEN'.
   02 データ名F  PIC X(1).
   02 データ名G  PIC X(1).
   02 FILLER    PIC X(1).
   02 FILLER    PIC X(1).
   02 データ名Z  PIC S9(9) COMP VALUE ZERO.

機能

論理ファイルをオープンします。

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

●データ名A

DAMファイルとのインタフェースコードを「VALUE 'DCDAMSVC'」と設定します。

●データ名C

論理ファイル名を8文字以内で設定します。8文字に満たない場合は,後ろを空白で埋めてください。

●データ名E

論理ファイルのオープンを示す要求コードを「VALUE 'OPEN'」と設定します。

●データ名F

ブロック排他をするかファイルの排他をするかを設定します。

VALUE 'B'…ブロック排他

VALUE 'F'…ファイル排他

ファイル排他を指定できるのは,次に示す場合です。

  • 回復対象のDAMファイルを,トランザクションの範囲内でオープンする場合

  • 回復対象外のDAMファイルをオープンする場合

●データ名G

論理ファイルへのアクセスで排他エラーが起こったとき,排他解除待ちをするかどうかを設定します。データ名Fに「VALUE 'F'」を設定した場合は,使うDAMファイルが回復対象かどうかで動作が異なります。

VALUE 'W'… 排他解除待ちをします。

VALUE 'N'… 待たないで,エラーリターンします。

どちらも設定しなかった場合は「VALUE 'N'」が仮定されます。

データ名F,データ名Gに設定できる値は,使うDAMファイルが回復対象かどうかで異なります。詳細は次のとおりです。

  • 回復対象のDAMファイルの場合

    データ名Gの排他解除待ちは,論理ファイルのオープン以降のアクセス(CBLDCDAM('READ')とCBLDCDAM('WRIT'))で排他エラーが起こった場合の設定となります。CBLDCDAM('OPEN')で排他エラーが起こった場合の設定ではありません。CBLDCDAM('OPEN')で排他エラーが起こった場合には,無条件に「01602」でエラーリターンします。

    回復対象のDAMファイルにアクセスする場合の,データ名F,データ名Gに設定した値と排他の設定内容を次に示します。

    データ名F

    データ名G

    排他の設定内容

    'F'

    ファイル排他

    'B'

    'W'

    ブロック排他,排他エラー時は解除待ち

    'N'

    ブロック排他,排他エラー時はエラーリターン

    (凡例)

    △:''(空白)を設定してください。

    注※

    データ名Fに'B'を設定し,データ名Gの設定を省略した場合は,'N'が仮定されます。

  • 回復対象外のDAMファイルの場合

    データ名Gの排他解除待ちは,排他エラーが起こった場合の設定となります。

    CBLDCDAM('OPEN'),CBLDCDAM('READ')およびCBLDCDAM('WRIT')で排他エラーが起こった場合に,データ名Gに設定した値に従って,排他の解除を待つかどうかが決まります。データ名Gに 'N' を設定,または省略した場合に排他エラーが起こったときは,「01602」でエラーリターンします。

    回復対象外のDAMファイルにアクセスする場合の,データ名F,データ名Gに設定した値と排他の設定内容を次に示します。

    データ名F

    データ名G

    排他の設定内容

    'F'

    'W'

    ファイル排他,排他エラー時は解除待ち

    'N'

    ファイル排他,排他エラー時はエラーリターン

    'B'

    'W'

    ブロック排他,排他エラー時は解除待ち

    'N'

    ブロック排他,排他エラー時はエラーリターン

    注※

    省略した場合は,'N'が仮定されます。

    回復対象か回復対象外かに関係なく,データ名Fにファイル排他を設定するとファイル全体に排他を掛けるため,CBLDCDAM('READ')およびCBLDCDAM('WRIT')で排他エラーは起こりません。そのため,排他解除待ちをするかどうかを設定できません。CBLDCDAM('READ')およびCBLDCDAM('WRIT')のデータ名に設定した排他解除待ち種別は無視されます。

●データ名Z

0を設定します。

OpenTP1から値が返されるデータ領域

●データ名B

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

●データ名H

ファイル記述子が返されます。

ステータスコード

ステータスコード

意味

00000

ファイル記述子がデータ名Hに正常に設定されました。

01600

CBLDCRPC('OPEN ')を呼び出していません。

ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています

(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

ユーザサービス定義のatomic_updateオペランドの指定が'N'の場合に,CBLDCDAM('STRT')を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

次に示すように,UAPを正しくリンケージしていません。

  • DAMサービスのAPIでTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。

  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。

DAMファイルの排他を,トランザクションの範囲外から指定しています

(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

グローバルトランザクション単位の排他制御で,DAMファイルにファイル排他を設定しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

01601

データ名Cに設定した論理ファイル名は定義されていません。

01602

排他エラーが起こりました。

01605

ユーザサービス定義のatomic_updateオペランドの指定が'Y'の場合に,CBLDCDAM('STRT')を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

01607

メモリが不足しました。

01608

データ名Cに設定した論理ファイルはオープン済みです。

01610

論理ファイル名として設定した値が間違っています。

01611

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

01621

データ名Cに設定した論理ファイルは,論理閉塞されています。

01622

データ名Cに設定した論理ファイルは,障害閉塞されています。

01627

キャラクタ型スペシャルファイルのオープン数が最大値を超えました。

01628

キャラクタ型スペシャルファイルのアクセス権がありません。

01629

トランザクションサービスでエラーが起こりました

(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

01642

デッドロックが起こりました

(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

01643

ロックサービス定義で指定した待ち時間のタイムアウトのため資源を確保できませんでした(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

01645

最大同時排他要求数を超えて,排他を要求しています。

01646

オープンしようとしたDAMファイルは,セキュリティ機能で保護されています。該当するファイルに対するACLがありません。

01690

インタフェースコード(データ名A)が間違っています。

01691

要求コード(データ名E)が間違っています。