Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


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関数で入力したブロックを更新目的で出力します。または更新要求を取り消します。ブロックを更新するタイミングを次に示します。

複数のブロックを一括して指定したときに,指定したブロックのうちで一つでもエラーになると,処理を中断してエラーリターンします。このとき更新はしません。

論理ファイルのブロックを更新するときは,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を正しくリンケージしていません。

  • DAMサービスの関数でTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。

  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。

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

更新データ長(更新ブロック長×更新ブロック数)が長過ぎます。

注※

詳細については,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランドを参照してください。

注意事項

リターン値DCDAMER_JNLOVでリターンした場合,次のどれかの方法で処置してください。

定義を変更する場合は,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランド,およびdam_update_block_overオペランドを参照し,注意事項を確認してください。