4.1.8 回復対象外のDAMファイルへのアクセス

トランザクションによる整合性の管理や障害時の回復を保証しないDAMファイルを作成できます。このようなDAMファイルを回復対象外のDAMファイルといいます。回復対象外のDAMファイルのブロックは,トランザクションの処理でなくても,dc_dam_write関数,dc_dam_rewrite関数で更新できます。

<この項の構成>
(1) 回復対象外のDAMファイルの定義
(2) 回復対象外のDAMファイルへのアクセス
(3) ファイルアクセスでエラーが起こった場合の処置
(4) 回復対象外のDAMファイルへアクセスする関数の関係
(5) 回復対象外のDAMファイルの排他制御
(6) 回復対象のDAMファイルと回復対象外のDAMファイルとの比較

(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ファイルへアクセスする場合と同様に,アクセスできます。

ファイルをオープンしたときのファイル記述子は,次に示すことが起こるまで有効です。

(3) ファイルアクセスでエラーが起こった場合の処置

回復対象外のDAMファイルへのアクセスでエラーが起こった場合でも,ファイルデータの障害は回復できません。

回復対象外のDAMファイルへのアクセス手順を次の図に示します。

図4-5 回復対象外のDAMファイルへのアクセス手順

[図データ]

(4) 回復対象外のDAMファイルへアクセスする関数の関係

以前にアクセスした関数によっては,同じUAPの処理からでも,一つのブロックに対するアクセスがエラーリターンすることがあります。エラーリターンするかどうかは,一つのUAPから呼び出したときと異なるUAPから呼び出したときで異なります。以前に呼び出した関数とDAMファイルのブロックにアクセスできる関数を表4-3と表4-4に示します。

表4-3 一つのUAP内で,同じブロックにアクセスできる関数(回復対象外のDAMファイルの場合)

前回呼び出した関数今回呼び出した関数結果またはエラーリターンする値
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(出力)
(凡例)
○:エラーになりません。

表4-4 異なるUAP内で,同じブロックにアクセスできる関数(回復対象外のDAMファイルの場合)

前回呼び出した関数今回呼び出した関数結果またはエラーリターンする値
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ファイルとの比較」を参照してください。

(a) 回復対象外のDAMファイルの排他範囲

回復対象外のDAMファイルの場合,トランザクションの範囲内かどうかに関係なく,DAMファイルへアクセスできます。

(b) 排他制御モード

回復対象外のDAMファイルの排他制御モードは,回復対象のDAMファイルと同じです。排他制御モードについては,「4.1.7(1) 排他制御モード」を参照してください。

(c) 排他の指定単位

回復対象外のDAMファイルの排他の指定単位は,回復対象のDAMファイルと同じです。排他の指定単位については,「4.1.7(2) 排他の指定単位(回復対象のDAMファイルの場合)」を参照してください。

(d) 資源の排他解除待ちの設定

回復対象外のDAMファイルの資源の排他解除待ちの設定は,次に示す点を除いて,回復対象のDAMファイルと同じです。

資源の排他待ちの設定については,「4.1.7(3) 資源の排他解除待ちの設定(回復対象のDAMファイルの場合)」を参照してください。

(6) 回復対象のDAMファイルと回復対象外のDAMファイルとの比較

回復対象のDAMファイルと回復対象外のDAMファイルとの比較について説明します。アクセスの違いを表4-5に,アクセス時に排他制御する範囲の違いを表4-6に示します。

表4-5 回復対象のDAMファイルと回復対象外のDAMファイルとのアクセスの違い

DAMサービスの関数関数を呼び出す条件DAMファイルの種類とアクセスする位置
回復対象DAMファイル回復対象外
DAMファイル
トランザクション範囲外トランザクション範囲
dc_dam_openファイル排他,排他解除待ち×
ファイル排他,即時リターン×
ブロック排他,排他解除待ち
ブロック排他,即時リターン
dc_dam_closeトランザクションの範囲でファイルをオープン
トランザクションの範囲外でファイルをオープン×
dc_dam_read参照目的の入力,排他なし
参照目的の入力,排他を指定×
更新目的の入力,排他を指定×
dc_dam_rewrite更新目的の出力×
更新の取り消し×
dc_dam_write(条件なし)×
(凡例)
○:該当する条件で,関数を呼び出せます。
×:該当する条件で,関数を呼び出すとエラーリターンします。
-:該当する条件では,関数を呼び出せません。

表4-6 回復対象のDAMファイルと回復対象外のDAMファイルとのアクセス時に排他制御する範囲の違い

排他の指定単位と呼び出す関数排他制御モード回復対象DAMファイルの場合回復対象外DAMファイルの場合
ファイル
排他
dc_dam_openEX
  • 同期点処理の終了まで排他
  • dc_dam_closeまたはdc_dam_endの理が終了するまで排他
ブロック
排他
dc_dam_read
(参照)
PR
  • 同期点処理の終了まで排他
  • dc_dam_readの処理が終了するまで排他
dc_dam_read
(更新)
EX
  • 同期点処理の終了まで排他
  • dc_dam_rewrite(取り消し)の処理が終了するまで排他
  • dc_dam_rewrite(更新または取り消し)の処理が終了するまで排他
dc_dam_writeEX
  • 同期点処理の終了まで排他
  • dc_dam_writeの処理が終了するまで排他
注※
ここで示す排他の指定単位は,dc_dam_open関数に設定した場合です。dc_dam_open関数にファイル排他を指定した場合,dc_dam_read関数,dc_dam_write関数に設定した排他の指定単位は無効です。