4.1.8 回復対象外のDAMファイルへのアクセス
トランザクションによる整合性の管理や障害時の回復を保証しないDAMファイルを作成できます。このようなDAMファイルを回復対象外のDAMファイルといいます。回復対象外のDAMファイルのブロックは,トランザクションの処理でなくても,dc_dam_write関数,dc_dam_rewrite関数で更新できます。
- 〈この項の構成〉
(1) 回復対象外のDAMファイルの定義
回復対象外にするDAMファイルを定義するときには,DAMサービス定義のdamfile定義コマンドに-nオプションを付けて指定します。
(2) 回復対象外のDAMファイルへのアクセス
ファイルへアクセスをする前にdc_dam_start関数【CBLDCDAM('STRT')】を,アクセスを完了するときにはdc_dam_end関数【CBLDCDAM('END ')】を呼び出します。dc_dam_start関数を呼び出したときは,アクセス終了後,必ずdc_dam_end関数を呼び出してください。
回復対象外のDAMファイルへは,DAMサービスの関数を使ってアクセスします。回復対象のDAMファイルへアクセスする場合と同様に,アクセスできます。
ファイルをオープンしたときのファイル記述子は,次に示すことが起こるまで有効です。
-
論理ファイルのクローズ
-
回復対象外のDAMファイルの使用終了(dc_dam_end関数の呼び出し)
-
UAPのプロセスの終了
(3) ファイルアクセスでエラーが起こった場合の処置
回復対象外のDAMファイルへのアクセスでエラーが起こった場合でも,ファイルデータの障害は回復できません。
回復対象外のDAMファイルへのアクセス手順を次の図に示します。
|
(4) 回復対象外のDAMファイルへアクセスする関数の関係
以前にアクセスした関数によっては,同じUAPの処理からでも,一つのブロックに対するアクセスがエラーリターンすることがあります。エラーリターンするかどうかは,一つのUAPから呼び出したときと異なるUAPから呼び出したときで異なります。以前に呼び出した関数とDAMファイルのブロックにアクセスできる関数を表4-3と表4-4に示します。
前回呼び出した関数 |
今回呼び出した関数 |
結果またはエラーリターンする値 |
---|---|---|
dc_dam_start関数を呼び出したあと,まだDAMファイルにアクセスする関数を呼び出していない |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_read (参照目的の入力) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_read (参照目的の入力 排他を指定) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_read (更新目的の入力) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
○ |
|
dc_dam_rewrite(更新の取り消し) |
○ |
|
dc_dam_write(出力) |
○ |
|
dc_dam_rewrite (更新) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_rewrite (更新の取り消し) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_write (出力) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
- (凡例)
-
○:エラーになりません。
前回呼び出した関数 |
今回呼び出した関数 |
結果またはエラーリターンする値 |
---|---|---|
dc_dam_start関数を呼び出したあと,まだDAMファイルにアクセスする関数を呼び出していない |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_read (参照目的の入力) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_read (参照目的の入力 排他を指定) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_read (更新目的の入力) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
DCDAMER_EXCER(01602)※ |
|
dc_dam_read(更新目的の入力) |
DCDAMER_EXCER(01602)※ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
DCDAMER_EXCER(01602)※ |
|
dc_dam_rewrite (更新) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_rewrite (更新の取り消し) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
|
dc_dam_write (出力) |
dc_dam_read(参照目的の入力) |
○ |
dc_dam_read(参照目的の入力 排他を指定) |
○ |
|
dc_dam_read(更新目的の入力) |
○ |
|
dc_dam_rewrite(更新) |
DCDAMER_SEQER(01605) |
|
dc_dam_rewrite(更新の取り消し) |
DCDAMER_SEQER(01605) |
|
dc_dam_write(出力) |
○ |
- (凡例)
-
○:エラーになりません。
- 注※
-
flagsにDCDAM_WAITを設定した場合は,排他解除待ちになります。
(5) 回復対象外のDAMファイルの排他制御
回復対象のDAMファイルと同様に,回復対象外DAMファイルでも排他制御をします。ここでは,回復対象外のDAMファイルの排他制御について説明します。回復対象のDAMファイルと回復対象外のDAMファイルの比較については,「4.1.8(6) 回復対象のDAMファイルと回復対象外のDAMファイルとの比較」を参照してください。
(b) 排他制御モード
回復対象外のDAMファイルの排他制御モードは,回復対象のDAMファイルと同じです。排他制御モードについては,「4.1.7(1) 排他制御モード」を参照してください。
(c) 排他の指定単位
回復対象外のDAMファイルの排他の指定単位は,回復対象のDAMファイルと同じです。排他の指定単位については,「4.1.7(2) 排他の指定単位(回復対象のDAMファイルの場合)」を参照してください。
(d) 資源の排他解除待ちの設定
回復対象外のDAMファイルの資源の排他解除待ちの設定は,次に示す点を除いて,回復対象のDAMファイルと同じです。
-
dc_dam_open関数に設定する排他解除待ちの種別は,dc_dam_open関数自体の指定を含みます。回復対象のDAMファイルの場合は,dc_dam_open関数で排他エラーが起こると無条件にエラーリターンしましたが,回復対象外のDAMファイルでは,引数に設定した排他待ち種別に従って処理できます。
資源の排他待ちの設定については,「4.1.7(3) 資源の排他解除待ちの設定(回復対象のDAMファイルの場合)」を参照してください。
(6) 回復対象のDAMファイルと回復対象外のDAMファイルとの比較
回復対象のDAMファイルと回復対象外のDAMファイルとの比較について説明します。アクセスの違いを表4-5に,アクセス時に排他制御する範囲の違いを表4-6に示します。
DAMサービスの関数 |
関数を呼び出す条件 |
DAMファイルの種類とアクセスする位置 |
||
---|---|---|---|---|
回復対象DAMファイル |
回復対象外 DAMファイル |
|||
トランザクション範囲外 |
トランザクション範囲 |
|||
dc_dam_open |
ファイル排他,排他解除待ち |
× |
○ |
○ |
ファイル排他,即時リターン |
× |
○ |
○ |
|
ブロック排他,排他解除待ち |
○ |
○ |
○ |
|
ブロック排他,即時リターン |
○ |
○ |
○ |
|
dc_dam_close |
トランザクションの範囲でファイルをオープン |
○ |
○ |
○ |
トランザクションの範囲外でファイルをオープン |
− |
× |
○ |
|
dc_dam_read |
参照目的の入力,排他なし |
○ |
○ |
○ |
参照目的の入力,排他を指定 |
× |
○ |
○ |
|
更新目的の入力,排他を指定 |
× |
○ |
○ |
|
dc_dam_rewrite |
更新目的の出力 |
× |
○ |
○ |
更新の取り消し |
× |
○ |
○ |
|
dc_dam_write |
(条件なし) |
× |
○ |
○ |
- (凡例)
-
○:該当する条件で,関数を呼び出せます。
×:該当する条件で,関数を呼び出すとエラーリターンします。
−:該当する条件では,関数を呼び出せません。
排他の指定単位※と呼び出す関数 |
排他制御モード |
回復対象DAMファイルの場合 |
回復対象外DAMファイルの場合 |
|
---|---|---|---|---|
ファイル 排他 |
dc_dam_open |
EX |
|
|
ブロック 排他 |
dc_dam_read (参照) |
PR |
|
|
dc_dam_read (更新) |
EX |
|
|
|
dc_dam_write |
EX |
|
|
- 注※
-
ここで示す排他の指定単位は,dc_dam_open関数に設定した場合です。dc_dam_open関数にファイル排他を指定した場合,dc_dam_read関数,dc_dam_write関数に設定した排他の指定単位は無効です。