dc_dam_rewrite
形式
ANSI C ,C++の形式
#include <dcdam.h> int dc_dam_rewrite(int damfd,struct DC_DAMKEY *keyptr, int keyno, char *bufadr,int bufsize,DCLONG flags)
K&R版 C の形式
#include <dcdam.h> int dc_dam_rewrite(damfd,keyptr,keyno,bufadr,bufsize,flags) int damfd; struct DC_DAMKEY *keyptr; int keyno; char *bufadr; int bufsize; DCLONG flags;
機能
dc_dam_read関数で入力したブロックを更新目的で出力します。または更新要求を取り消します。ブロックを更新するタイミングを次に示します。
-
回復対象のDAMファイルの場合
更新したデータはDAMサービス専用共用メモリ上に蓄えておき,トランザクションがコミットしたときに,実際にファイルを更新します。ただし,ディファード更新を指定したDAMファイルの場合は,トランザクションのコミットとは非同期に更新されます。
-
回復対象外のDAMファイルの場合
dc_dam_rewrite関数がリターンした時点で,DAMファイルが更新されます。
複数のブロックを一括して指定したときに,指定したブロックのうちで一つでもエラーになると,処理を中断してエラーリターンします。このとき更新はしません。
論理ファイルのブロックを更新するときは,dc_dam_open関数で返されたリターン値のファイル記述子を設定します。
UAPで値を設定する引数
●damfd
ブロックを更新するファイルの,ファイル記述子を設定します。
●keyptr
更新するブロックの範囲を示す構造体(DAMキー)のアドレスを設定します。構造体にはブロックの範囲を,先頭の相対ブロック番号と最後の相対ブロック番号で設定します。構造体の形式は次のとおりです。
struct DC_DAMKEY { int fstblkno; int endblkno; };
- ・fstblkno
-
更新するブロックの先頭の相対ブロック番号を設定します。
- ・endblkno
-
更新するブロックの,最後の相対ブロック番号を設定します。0を設定した場合は,fstblknoで設定した相対ブロック番号のブロックだけを更新します。
●keyno
keyptrで設定する構造体の数(構造体の配列数)を設定します。
●bufadr
更新データのアドレスを設定します。
●bufsize
更新データ長を(更新ブロック長×更新ブロック数)以上の値で設定します。設定できる範囲は504〜2147483647です。
●flags
更新要求か更新要求の取り消しかの更新種別を,次のどちらかで設定します。
- DCDAM_UPDATE
-
更新要求
- DCDAM_CANCEL
-
更新要求の取り消し
リターン値
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
DC_OK |
0 |
すべてのブロック更新は正常に終了しました。 |
DCDAMER_PROTO |
-1600 |
dc_rpc_open関数を呼び出していません。 |
トランザクションの範囲外で,dc_dam_rewrite関数を呼び出しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
||
ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
||
dc_dam_start関数を呼び出していません(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
||
次に示すように,UAPを正しくリンケージしていません。
|
||
DCDAMER_BADF |
-1603 |
damfdに設定したファイル記述子は正常にオープンして得られたファイル記述子ではありません。 |
DAMファイルをオープンしていません。 |
||
DCDAMER_BUFER |
-1604 |
更新データ長(更新ブロック長×更新ブロック数)が短過ぎます。 |
更新データ長に設定した値は,設定できる範囲を超えています。 |
||
DCDAMER_SEQER |
-1605 |
更新目的のdc_dam_read関数を呼び出していません。 |
DCDAMER_BNOER |
-1606 |
相対ブロック番号が間違っています。 |
DCDAMER_NOMEM |
-1607 |
メモリが不足しました。 |
DCDAMER_PARAM_KEYNO |
-1609 |
keynoに1より小さい値を設定しています。 |
DCDAMER_PARAM_FLAGS |
-1611 |
flagsに設定した値が間違っています。 |
DCDAMER_JNLOV |
-1613 |
ブロック更新した回数※が,DAMサービス定義の1トランザクションで更新できる最大ブロック数に指定した値を超えました(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
DCDAMER_IOER |
-1620 |
出力エラーが起こりました(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
DCDAMER_LHOLD |
-1621 |
damfdに設定したファイルが,論理閉塞されています。 |
DCDAMER_OHOLD |
-1622 |
damfdに設定したファイルが,障害閉塞されています。 |
DCDAMER_TMERR |
-1629 |
トランザクションサービスでエラーが起こりました。 |
DCDAMER_BUFOV |
-1641 |
更新データ長(更新ブロック長×更新ブロック数)が長過ぎます。 |
注意事項
リターン値DCDAMER_JNLOVでリターンした場合,次のどれかの方法で処置してください。
-
DAMサービス定義のdam_update_blockオペランドの指定値を大きくする。
-
DAMサービス定義のdam_update_block_overオペランドにerrorを指定してDCDAMER_JNLOVとなった場合,dam_update_block_overオペランドの指定をflushに変更する。
-
更新するブロック数をDAMサービス定義のdam_update_blockオペランドの指定値以下にする。
定義を変更する場合は,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランド,およびdam_update_block_overオペランドを参照し,注意事項を確認してください。