トランザクションによる整合性の管理や障害時の回復を保証しないDAMファイルを作成できます。このようなDAMファイルを回復対象外のDAMファイルといいます。回復対象外のDAMファイルのブロックは,トランザクションの処理でなくても,dc_dam_write関数,dc_dam_rewrite関数で更新できます。
回復対象外にするDAMファイルを定義するときには,DAMサービス定義のdamfile定義コマンドに-nオプションを付けて指定します。
ファイルへアクセスをする前にdc_dam_start関数【CBLDCDAM('STRT')】を,アクセスを完了するときにはdc_dam_end関数【CBLDCDAM('END ')】を呼び出します。dc_dam_start関数を呼び出したときは,アクセス終了後,必ずdc_dam_end関数を呼び出してください。
回復対象外のDAMファイルへは,DAMサービスの関数を使ってアクセスします。回復対象のDAMファイルへアクセスする場合と同様に,アクセスできます。
ファイルをオープンしたときのファイル記述子は,次に示すことが起こるまで有効です。
回復対象外のDAMファイルへのアクセスでエラーが起こった場合でも,ファイルデータの障害は回復できません。
回復対象外のDAMファイルへのアクセス手順を次の図に示します。
図4-5 回復対象外の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(出力) | ○ |
回復対象のDAMファイルと同様に,回復対象外DAMファイルでも排他制御をします。ここでは,回復対象外のDAMファイルの排他制御について説明します。回復対象のDAMファイルと回復対象外のDAMファイルの比較については,「4.1.8(6) 回復対象のDAMファイルと回復対象外のDAMファイルとの比較」を参照してください。
回復対象外のDAMファイルの場合,トランザクションの範囲内かどうかに関係なく,DAMファイルへアクセスできます。
回復対象外のDAMファイルの排他制御モードは,回復対象のDAMファイルと同じです。排他制御モードについては,「4.1.7(1) 排他制御モード」を参照してください。
回復対象外のDAMファイルの排他の指定単位は,回復対象のDAMファイルと同じです。排他の指定単位については,「4.1.7(2) 排他の指定単位(回復対象のDAMファイルの場合)」を参照してください。
回復対象外のDAMファイルの資源の排他解除待ちの設定は,次に示す点を除いて,回復対象のDAMファイルと同じです。
資源の排他待ちの設定については,「4.1.7(3) 資源の排他解除待ちの設定(回復対象の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_open | EX |
|
|
ブロック 排他 | dc_dam_read (参照) | PR |
|
|
dc_dam_read (更新) | EX |
|
| |
dc_dam_write | EX |
|
|