Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


4.2.5 トランザクションとTAMアクセスの関係

トランザクションブランチで,TAMアクセスのエラーが起こった場合は,UAPからabort()を呼び出して,そのグローバルトランザクションのプロセスを異常終了させてください。

同じグローバルトランザクション内でも,以前にアクセスした関数によっては,一つのレコードに対するアクセスがエラーリターンする場合があります。また,同じレコードへのアクセスでも,同じグローバルトランザクションに属するときと,異なるグローバルトランザクションからの場合では,結果が異なります。

同じレコードに対して関数を複数回呼び出したときの処理結果を表4-7表4-8に示します。

表4‒7 同じレコードに対して関数を複数回呼び出したときの処理結果(一つのグローバルトランザクション)

前回呼び出した関数

今回呼び出した関数

結果またはエラーリターンする値

トランザクション内で,まだTAMテーブルにアクセスする関数を呼び出していない

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

DCTAMER_SEQENCE(01732)

dc_tam_rewrite(入力前提の更新)

DCTAMER_SEQENCE(01732)

dc_tam_write(更新)

dc_tam_write(追加)

dc_tam_delete(削除)

dc_tam_read

(参照目的の入力)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

DCTAMER_SEQENCE(01732)

dc_tam_rewrite(入力前提の更新)

DCTAMER_SEQENCE(01732)

dc_tam_write(更新)

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

dc_tam_read

(参照目的の入力 排他を指定)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

DCTAMER_SEQENCE(01732)

dc_tam_write(更新)

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

dc_tam_read

(更新目的の入力)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

dc_tam_rewrite(入力前提の更新)

dc_tam_write(更新)

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

dc_tam_read_cancel

(入力の取り消し)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

DCTAMER_SEQENCE(01732)※2

dc_tam_rewrite(入力前提の更新)

DCTAMER_SEQENCE(01732)

dc_tam_write(更新)

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

dc_tam_rewrite

(入力前提の更新)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

DCTAMER_EXREWRT(01734)

dc_tam_rewrite(入力前提の更新)

dc_tam_write(更新)

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

dc_tam_write

(更新,または追加)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

DCTAMER_SEQENCE(01732)

dc_tam_rewrite(入力前提の更新)

DCTAMER_SEQENCE(01732)

dc_tam_write(更新)

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

dc_tam_delete

(削除)

dc_tam_read(参照目的の入力)

DCTAMER_NOREC(01731)

dc_tam_read(参照目的の入力 排他を指定)

DCTAMER_NOREC(01731)

dc_tam_read(更新目的の入力)

DCTAMER_NOREC(01731)

dc_tam_read_cancel(入力の取り消し)

DCTAMER_NOREC(01731)

dc_tam_rewrite(入力前提の更新)

DCTAMER_NOREC(01731)※3

dc_tam_write(更新)

DCTAMER_NOREC(01731)

dc_tam_write(追加)

dc_tam_delete(削除)

DCTAMER_NOREC(01731)

(凡例)

○:エラーになりません。

DCTAMER_NOREC(01731):指定されたレコードはありません。

DCTAMER_SEQENCE(01732):dc_tam_read関数を呼び出していません。

DCTAMER_EXKEY(01735):関数に設定したキー値のレコードがあるので,追加できません。

注※1

dc_tam_read関数(参照目的の入力,排他を指定)の前に,dc_tam_rewrite関数,dc_tam_write関数を呼び出して,レコードを更新または追加されている場合は,DCTAMER_EXREWRT,またはDCTAMER_EXWRITEがリターンされます。

注※2

dc_tam_read_cancel関数(入力の取り消し)の前にdc_tam_rewrite関数,dc_tam_write関数を呼び出して,レコードを更新または追加されている場合は,DCTAMER_EXWRITEがリターンされます。

注※3

dc_tam_delete関数(削除)の前にdc_tam_write関数を呼び出して,レコードが追加されている場合は,DCTAMER_SEQENCEがリターンされます。

表4‒8 同じレコードに対して関数を複数回呼び出したときの処理結果(異なるグローバルトランザクション)

前回呼び出した関数

今回呼び出した関数

結果またはエラーリターンする値

トランザクション内で,まだTAMテーブルにアクセスする関数を呼び出していない

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

dc_tam_read(更新目的の入力)

dc_tam_read_cancel(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

dc_tam_write(追加)

dc_tam_delete(削除)

dc_tam_read

(参照目的の入力)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

※2

dc_tam_read(更新目的の入力)

※2

dc_tam_read_cancel(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

※2

dc_tam_write(追加)

DCTAMER_EXKEY(01735)

dc_tam_delete(削除)

※2

dc_tam_read

(参照目的の入力 排他を指定)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

※2

dc_tam_read(更新目的の入力)

DCTAMER_LOCK(01736)※3

dc_tam_read_cancel(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

DCTAMER_LOCK(01736)※3

dc_tam_write(追加)

DCTAMER_LOCK(01736)※3

dc_tam_delete(削除)

DCTAMER_LOCK(01736)※3

dc_tam_read

(更新目的の入力)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

DCTAMER_LOCK(01736)※3

dc_tam_read(更新目的の入力)

DCTAMER_LOCK(01736)※3

dc_tam_read_cancel

(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

DCTAMER_LOCK(01736)※3

dc_tam_write(追加)

DCTAMER_LOCK(01736)※3

dc_tam_delete(削除)

DCTAMER_LOCK(01736)※3

dc_tam_read_cancel

(入力の取り消し)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

※4,※5

dc_tam_read(更新目的の入力)

※4,※5

dc_tam_read_cancel

(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

※4,※5

dc_tam_write(追加)

DCTAMER_LOCK(01736)※3

dc_tam_delete(削除)

DCTAMER_LOCK(01736)※3

dc_tam_rewrite

(入力前提の更新)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

DCTAMER_LOCK(01736)※3

dc_tam_read(更新目的の入力)

DCTAMER_LOCK(01736)※3

dc_tam_read_cancel

(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

DCTAMER_LOCK(01736)※3

dc_tam_write(追加)

DCTAMER_LOCK(01736)※3

dc_tam_delete(削除)

DCTAMER_LOCK(01736)※3

dc_tam_write

(更新,または追加)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

DCTAMER_LOCK(01736)※3

dc_tam_read(更新目的の入力)

DCTAMER_LOCK(01736)※3

dc_tam_read_cancel

(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

DCTAMER_LOCK(01736)※3

dc_tam_write(追加)

DCTAMER_LOCK(01736)※3

dc_tam_delete(削除)

DCTAMER_LOCK(01736)※3

dc_tam_delete

(削除)

dc_tam_read(参照目的の入力)

dc_tam_read(参照目的の入力 排他を指定)

DCTAMER_LOCK(01736)※3

dc_tam_read(更新目的の入力)

DCTAMER_LOCK(01736)※3

dc_tam_read_cancel(入力の取り消し)

※1

dc_tam_rewrite(入力前提の更新)

※1

dc_tam_write(更新)

DCTAMER_LOCK(01736)※3

dc_tam_write(追加)

DCTAMER_LOCK(01736)※3

dc_tam_delete(削除)

DCTAMER_LOCK(01736)※3

(凡例)

○:エラーになりません。

−:該当しません。

DCTAMER_EXKEY(01735):関数に設定したキー値のレコードがあるので,追加できません。

DCTAMER_LOCK(01736):排他エラーが起こりました。

注※1

異なるトランザクションでは,別の処理になります。

注※2

別グローバルトランザクションで,同じTAMテーブルに対してレコードの追加/削除している場合は,DCTAMER_LOCK(01736)がリターンされます。ただし,排他待ち種別にDCTAM_WAITを設定した場合は,排他解除待ちとなります。

注※3

排他待ち種別にDCTAM_WAITを設定した場合は,排他待ちとなります。

注※4

別グローバルトランザクションでレコードの追加/削除している場合は,DCTAMER_LOCK(01736)がリターンされます。ただし,排他待ち種別にDCTAM_WAITを設定した場合は,排他解除待ちとなります。

注※5

dc_tam_read_cancel関数の前に,別グローバルトランザクションで,dc_tam_rewrite関数,dc_tam_write関数を呼び出して,レコードの更新または追加している場合は,DCTAMER_LOCK(01736)がリターンされます。ただし,排他待ち種別にDCTAM_WAITを設定した場合は,排他解除待ちとなります。