分散トランザクション処理機能 OpenTP1 解説

[目次][用語][索引][前へ][次へ]

4.4.2 TAMファイル(TP1/FS/Table Access)

TAMファイルサービスを使うと,OpenTP1ファイルシステム上のOpenTP1ファイル(直接編成ファイル)のデータに,メモリ上のテーブルからアクセスできます。そのため,データへのアクセス処理を高速にできます。また,トランザクションと同期して,OpenTP1ファイルの状態を管理できます。OpenTP1でTAMファイルを使う場合には,TP1/FS/Table Accessが必要です。

TAMファイルは,ユーザデータを格納するファイルです。DAMファイルがディスクのデータに直接アクセスするのに対して,TAMファイルはデータを単純構造テーブルとしてメモリにロードして,メモリ上のテーブルにアクセスします。TAMサービスが提供するこの単純構造テーブルをTAMテーブルといい,TAMテーブルを格納するファイルの実体をTAMファイルといいます。

TAMファイルを使うときは,TAMサービス定義を作成し,TAMテーブルTAMファイルを対応づけます。TAMテーブルとTAMファイルは1対1に対応します。さらに,TAMサービス定義でTAMテーブルに任意の名称を指定します。このTAMテーブル名を使用して,TAMテーブルを運用します。

TAMテーブルとTAMファイルの関係を次の図に示します。

図4-18 TAMテーブルとTAMファイルの関係

[図データ]

<この項の構成>
(1) TAMテーブルの特長
(2) TAMテーブルの形式
(3) TAMファイルの作成方法
(4) TAMテーブルのアクセス形態
(5) TAMテーブルのロードとアンロード
(6) TAMテーブルの排他制御
(7) TAMテーブルとDAMファイルのデッドロックの対処方法
(8) TAMファイルのオンラインバックアップ
(9) 標準入出力を使ったTAMファイルのバックアップとリストア

(1) TAMテーブルの特長

TAMテーブルは,レコードのアドレスを管理する方式の違いで,ツリー形式ハッシュ形式に分けられます。TAMテーブルはレコードごとに,検索用のキー値で管理しています。ツリー形式とは,レコードごとに割り当てられたキー値の大小を基にアドレスを管理する形式です。ハッシュ形式とは,レコードごとに割り当てられたキー値をTAMサービス内部のハッシュ関数を用いて変換し,変換後の値を基にアドレスを管理する形式です。この変換後の値をハッシュ値といいます。

ハッシュ形式はメモリ効率が悪くなりますが,ツリー形式よりも高速にアクセスできます。メモリ量に余裕がある場合には,ハッシュ形式,余裕がない場合にはツリー形式でTAMテーブルを作成してください。ツリー形式とハッシュ形式については,「4.4.2(2) TAMテーブルの形式」を参照してください。

TAMテーブルおよびTAMファイルの概要を次の表に示します。

表4-11 TAMテーブルおよびTAMファイルの特長

説明する内容 特長
ファイル構成とレコード形式 TAMファイルは,直接編成ファイルです。事前にOpenTP1ファイルとして割り当てたファイルを使います。
レコード形式は固定長の非ブロック形式です。
アクセス形態 キー値を使ったテーブルアクセス法で,ブロックを参照または更新します。TAMファイルには,次に示す3種類があります。
  • 参照するだけの参照型ファイル
  • レコードを追加・削除できない更新型ファイル
  • レコードを追加・削除できる更新型ファイル
連続した複数のレコードを一括して入出力することもできます。
トランザクションとの関係 トランザクション処理中に仮更新したレコードの内容は,トランザクションがコミットした時点で,メモリ上で実更新されます。トランザクションがロールバックした場合は,仮更新した内容は廃棄されます。
メモリ上で実更新されたレコードは,TAMファイルに反映されます。TAMサービスは,メモリ上で実更新されたレコードだけを,一定の間隔でTAMファイルへ書き込みます。
ファイルのバックアップとリストア TAMファイルのバックアップとリストアには,次のコマンドを使います。
  • tambkupコマンド
  • tamrstrコマンド
バックアップファイルとバックアップ取得時点以降の回復用ジャーナルを基にTAMファイルの内容を最新の状態に回復できます。TAMファイルを回復する機能をTAM FRCTable Access Method File Recovery)といいます。
オンライン中のテーブルの追加 オンライン中にTAMテーブルを追加する場合は,追加する物理ファイルを作成してから,tamaddコマンドを使います。tamaddコマンドでファイルを追加したあとで,tamrlesコマンドを実行すると,オンラインで使えるようになります。
オンライン中のファイルの削除 オンラインで使っているファイルを切り離す場合はtamrmコマンドを,切り離したTAMファイルの物理ファイルを削除する場合はtamdelコマンドを使います。オンライン中にファイルを削除する場合は,tamrmコマンドで論理ファイルを切り離してから,物理ファイルをtamdelコマンドで削除します。

メモリが十分にある場合には,TAMファイルを使用すれば性能面で優れたシステムを構築できます。利用できるメモリ量が限られている場合には,DAMファイルを使用してください。

DAMファイルに入出力する関数で,TAMテーブルにアクセスできます。このため,使用できるメモリを増やした場合は,それまで使用していたUAPを変更しないで,ユーザデータをDAMファイルからTAMファイルに移せます。ユーザデータの一部をTAMファイルに移し,一部をDAMファイルに残すような場合にも有効です。

(2) TAMテーブルの形式

TAMサービスは,TAMテーブルのレコードとキー値の対応関係を基に,レコードのアドレスを管理します。通常,キー値はレコードの中にも含まれています。レコードにキー値を含めたくない場合は,tamcreコマンドで,レコードからキー値を削除できます。

ツリー形式では,中間の値を持つキー値をツリーのルートとして,それよりも大きな値を持つか小さな値を持つかによって,レコードをツリー構造で管理しています。ツリー形式は,ツリー構造に管理されたキー値の大小を順々に比較していくことでアドレスを求めるため,検索に時間が掛かります。

ハッシュ形式では,キー値をハッシュ値に変換し,ハッシュ値とレコードアドレスを対応づけることによって,レコードを管理しています。TAMテーブルの全レコードのうち,ハッシュ値とレコードアドレスを対応づけた領域をハッシュ域といいます。同じハッシュ値を持つレコードは,リスト構造で管理されます。リストで管理されたキー値を順々に比較していくことで,同じハッシュ値を持つレコードのアドレスを求めます。

ツリー形式とハッシュ形式で,アクセス時のキー値の指定方法が異なります。

TAMテーブルアクセス時のキー値の指定方法を次の表に示します。

表4-12 TAMテーブルアクセス時のキー値の指定方法

検索種別 ツリー形式 ハッシュ形式
キー値=n 指定されたキー値を持つレコードを検索します。指定されたキー値を持つレコードがない場合,エラーリターンします。
キー値<n
キー値>n
キー値≦n
キー値≧n
指定されたキー値に最も近いキー値を持つ最初のレコードを検索します。 エラーリターンします。
先頭検索 エラーリターンします。 キー値を無視して,TAMファイルの先頭レコードを検索します。
NEXT検索 エラーリターンします。 指定されたキー値を持つレコードの,次のレコードを検索します。
注※
ハッシュ形式の場合,ユーザは先頭検索とNEXT検索を組み合わせて,TAMテーブル上の全レコードを検索できます。ただし,レコードからキー値を削除した場合には,NEXT検索時に指定するキー値がユーザにわからないため,全レコードの検索ができません。

ハッシュ形式の場合,全レコードのうちどれだけハッシュ域として使用するかを,TAMファイル作成時,tamcreコマンドの引数で指定します。ハッシュ域を大きく取った場合,ハッシュ値の重複が発生する確率が小さくなり,リストの検索が不要になる割合が増すため,検索が速くなります。ただし,リストの領域が小さくなり,リストが満杯になったとき,それ以上ハッシュ値の重複が発生すると,ハッシュ域に空きがあってもレコードを追加できないので,メモリ効率が悪くなります。ハッシュ域を小さく取った場合,ハッシュ値の重複が起きる確率が高まります。このため,リストを検索する割合が増して,検索が遅くなります。その代わり,メモリ効率は良くなります。

ハッシュ域を大きく取った場合と,小さく取った場合を次の図に示します。

図4-19 ハッシュ域を大きく取った場合と小さく取った場合

[図データ]

(3) TAMファイルの作成方法

OpenTP1ファイルシステムを作成したあと,tamcreコマンドでTAMファイルを初期作成します。TAMファイルの作成と同時に初期データをTAMファイルに格納する場合には,まずファイルに初期データを格納しておきます。TAMファイルの初期作成時にtamcreコマンドの引数でファイルを指定すれば,OpenTP1が初期データをファイルからTAMファイルに複写します。TAMファイルの初期データを格納するこのファイルを,TAMデータファイルといいます。

(4) TAMテーブルのアクセス形態

TAMテーブルは,UAPからTAMテーブルのレコードにどのようにアクセスするかによって,参照型追加・削除できない更新型追加・削除できる更新型に分類できます。UAPからのレコードに対するアクセスを制限するために設定する,TAMテーブルの属性をアクセス形態といいます。アクセス形態を設定することで,TAMファイルを目的に応じて使い分けることができ,TAMテーブルのレコードを管理できます。

参照型は,レコードを参照することだけができるTAMテーブルです。オンライン中にレコードを追加したり,削除したり,更新したりすることはできません。

追加・削除できない更新型は,レコードを更新できますが,オンライン中にレコードを追加したり,レコードを削除したりすることはできません。追加・削除できる更新型は,オンライン中にレコードを追加したり,削除したり,更新したりできます。

OpenTP1の開始と同時にオンラインに組み込むTAMテーブルのアクセス形態は,TAMサービス定義で指定します。また,OpenTP1稼働中にオンラインに追加するTAMテーブルのアクセス形態は,tamaddコマンドの-aオプションで指定します。

(5) TAMテーブルのロードとアンロード

TAMサービスは,ユーザが指定したタイミングで,TAMファイルに格納されているTAMテーブルをメモリにロードします。TAMテーブルをメモリにロードするタイミングを,ローディング契機といいます。OpenTP1の開始と同時にオンラインに組み込むTAMテーブルは,ローディング契機をTAMサービス定義で指定します。また,OpenTP1の稼働中にオンラインに追加するTAMテーブルの場合には,ローディング契機をtamaddコマンドの-oオプションで指定します。

tamloadコマンドでローディングしたTAMテーブルは,tamunloadコマンドでアンロードします。OpenTP1の開始と同時,またはオンラインへの追加と同時にローディングしたTAMファイルは,OpenTP1の終了時点で自動的にアンロードします。また,UAPからdc_tam_open関数を使ってローディングしたTAMファイルは,dc_tam_close関数を使った時点で自動的にアンロードします。

TAMテーブルのローディング契機とアンロードの方法を次の表に示します。

表4-13 TAMテーブルのローディング契機とアンロードの方法

TAMテーブルをオンラインに登録する時期 ローディング契機(三つのローディング契機のうち一つを選択) アンロードの方法1
OpenTP1の開始と同時2 OpenTP1の開始に伴ってTAMサービスが開始したとき TAM終了時に自動
tamloadコマンドを入力したとき コマンド入力
dc_tam_open関数を使ってTAMテーブルをオープンしたとき クローズ時に自動
OpenTP1稼働中3 オンラインに登録されたとき TAM終了時に自動
tamloadコマンドを入力したとき コマンド入力
dc_tam_open関数でTAMテーブルをオープンしたとき クローズ時に自動
注※1
TAM終了時はローディング契機にかかわらずアンロードします。
注※2
TAMサービス定義でローディング契機を指定します。
注※3
TAMテーブルを追加するTAMテーブル管理コマンドの引数でローディング契機を指定します。

(6) TAMテーブルの排他制御

TAMテーブルの排他には,テーブル単位で排他をかけるテーブル排他と,レコード単位で排他をかけるレコード排他があります。

TAMテーブルやレコードがすでにほかのUAPから排他をかけられていた場合に,排他が解放されるのを待つかどうかを,dc_tam_open関数,dc_tam_read関数,dc_tam_write関数,dc_tam_delete関数の引数で指定します。排他の解除を待つ時間は,ロックサービス定義で指定します。この排他待ち限界経過時間が経過しても排他が解放されない場合には,エラーリターンします。

TAMテーブルは,グローバルトランザクション単位に排他をかけます。

(7) TAMテーブルとDAMファイルのデッドロックの対処方法

TAMテーブルとDAMファイルの両方にアクセスするUAPを複数作成した場合に,UAP間でデッドロックが起こることがあります。デッドロックが起こった場合には,ユーザサービス定義で指定した,デッドロックを解消するための優先順位に従ってデッドロックを解消します。

TAMテーブルとDAMファイルの両方にアクセスした場合のデッドロックの例を,次の図に示します。

図4-20 TAMテーブルとDAMファイルの両方にアクセスした場合のデッドロックの例

[図データ]

(8) TAMファイルのオンラインバックアップ

TAMファイルのバックアップを,OpenTP1の業務中に取得できます。これをオンラインバックアップといいます。TAMファイルのバックアップを取得するコマンド(tambkupコマンド)に-oオプション指定して実行すると,オンライン中にTAMファイルをバックアップできます。

オンラインバックアップしたファイルでTAMファイルを回復すると,回復に使うアンロードジャーナルファイルの量が少なくて済みます。そのため,-oオプションを指定しないでバックアップしたファイルを使ってTAMファイルを回復する場合と比べて,TAMファイルの回復処理に掛かる時間が少なくて済みます。

-oオプションを指定しない場合は,オフライン状態でバックアップすることになります。この場合,次の手順でバックアップしてください。

  1. tamholdコマンドを実行して,論理ファイルを論理閉塞します。
  2. tamrmコマンドを実行して,論理閉塞した論理ファイルをオンラインから切り離します。
  3. -oオプションを指定しないtambkupコマンドを実行して,TAMファイルをバックアップします。

(9) 標準入出力を使ったTAMファイルのバックアップとリストア

TAMファイルのバックアップ先に標準出力を,リストアの入力ファイルに標準入力を使うことができます。標準入出力を使うことで,コマンドのリダイレクトができるようになります。

標準入出力を使う場合には,tambkupコマンドおよびtamrstrコマンドに-sオプションを指定して実行します。