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.
機能
論理ファイルをオープンします。
-
回復対象のDAMファイルの場合
論理ファイルに対して,ファイル排他をするかブロック排他をするかを設定します。ファイル排他を指定できるのは次の場合です。
-
トランザクションブランチ単位で排他制御する指定で,トランザクションの範囲内で論理ファイルをオープンした場合
次に示す場合は,ファイル排他を指定できません。ブロック排他で排他制御をしてください。
-
トランザクションの範囲外で論理ファイルをオープンした場合
-
グローバルトランザクション単位で排他制御する指定をした場合
同じトランザクションブランチ内では,いったんクローズした論理ファイルを再びオープンした場合,クローズ前の状態を引き継ぎます。
-
-
回復対象外のDAMファイルの場合
トランザクション処理とは同期しないため,排他に関する制限はありません。
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ファイルの排他を,トランザクションの範囲外から指定しています (回復対象の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)が間違っています。 |