ヘッダーをスキップ

Oracle TimesTen In-Memory Databaseアーキテクチャ概要 リリース6.0 B25763-01 |
| 目次 | 索引

前へ | 次へ |

## トランザクション・ログAPI

TimesTenが提供するトランザクション・ログAPI（XLA）によって、アプリケーションではローカル・データ・ストアのトランザクション・ログを監視し、他のアプリケーションで実行された更新を検出できます。また、XLAが提供する関数によって、XLAアプリケーションでは、検出した変更を別のデータ・ストアに適用できます。XLAはC言語のAPIですが、TimesTenでは、個別のJavaラッパー・インタフェースと、TTClasses製品の一部としてXLAのC++ラッパー・インタフェースが提供されます。

アプリケーションでは主にXLAを使用して、変更通知スキームを実装します。このスキームでは、XLAアプリケーションがデータ・ストアに変更がないかどうかを監視し、変更に基づいて対処できます。たとえば、株式取引環境におけるTimesTenデータ・ストアは、株価のデータ・ストリームによって絶えず更新されます。自動取引アプリケーションではXLAを使用して、特定の株価の更新についてデータ・ストアを監視し、その情報に基づいて発注するかどうかを判断します。詳細は、「使用例2: リアルタイム取引価格サービス・アプリケーション」を参照してください。

また、XLAを使用してカスタム・データ・レプリケーション・ソリューションを構築し、TimesTenレプリケーション・サービス（『Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド』を参照）のかわりに使用することもできます。このようなXLA対応のレプリケーション・ソリューションには、TimesTen以外のデータベースによるレプリケーションや、別のTimesTenデータ・ストアへの更新の転送が含まれます。

## XLAの動作

XLAは次のいずれかのモードで動作します。

- 永続モード
- 非永続モード

永続モードの場合、XLAは、更新レコードをトランザクション・ログ・バッファまたはログ・ファイルから直接取得します。レコードがバッファ内に存在しない場合は、図8.1に示すように、ディスク上のログ・ファイルから更新レコードを取得します。

図8.1 永続モードのXLA

非永続モードの場合は、図8.2に示すように、XLAは、トランザクション・ログから更新レコードを取得し、それらをXLAステージング・バッファに移動します。

図8.2 非永続モードのXLA

それぞれのモードにはメリットもデメリットもあります。たとえば、通常、非永続モードは永続モードより高速ですが、ステージング・バッファは一度に1つの読取りアクセスのみが可能であり、バッファから読み込まれたレコードは削除され使用できなくなります。また、データ・ストアが停止されると、バッファ内のすべての更新レコードが失われます。一方、永続モードの場合は、トランザクション・ログの更新に対して同時に複数の読取りアクセスが可能であり、ログ・ファイルが使用可能であるかぎり、ログ・レコードも使用可能です。

永続モードで作業する場合、読取りアクセスはブックマークを使用して、ログ更新ストリームにおける位置を保持します。ブックマークはデータ・ストアに保存されるため、データ・ストアの接続、停止およびクラッシュが発生しても永続的に維持されます。XLAアプリケーションでは、ttXlaGetLSN関数を使用してブックマークの位置を取得できます。また、ttXlaSetLSN関数を使用してブックマークの位置を再設定することで、一連の更新レコードを再度読み取ることができます。

## ログ更新レコード

更新レコードを作成したトランザクションをコミットすると、その更新レコードをただちにログから読み取れます。ログ・スニファ・アプリケーションでは、ログに書き込まれた更新レコードのグループをXLA ttXlaNextUpdate関数を使用して取得できます。

返される各レコードには、固定長の更新ヘッダー（ttXlaUpdateDesc_t）と、内部書式に従って保存された1行または2行のデータが含まれます。更新ヘッダーには、更新行が適用される表、そのレコードがトランザクションの最初のレコードかまたは最後（コミット）のレコードか、レコードが表すトランザクション・タイプ、返される行データの長さ、および更新された列（存在する場合）が記述されます。

データの更新を反映するレコードの場合は、2行が返され、更新前と更新後の行データがレポートされます。各行のデータの最初の部分は固定長データで、その後ろに可変長データが続きます。アプリケーションからttXlaGetColumnInfo関数をコールすると、特定の表の列のオフセットとサイズを取得できます。XLAがその表のレコードを返すと、返された行の固定長部分の列は、ttXlaGetColumnInfoで返されたオフセットに格納されます。可変長データの場合、図8.3に示すように、行の固定長部分のオフセットにあるデータは、行の可変長部分の実データの位置の算出に使用されるアドレスです。

図8.3 更新レコードの内容

レコード内の行データは、TimesTenの内部書式に従っています。アプリケーションで列のアドレスを見つけたら、そのアドレスの値を対応するODBC Cデータ型に直接キャストできます。日付、時間、10進値などの複合データ型は、アプリケーションで、XLA変換関数を使用してそれらの対応するODBC C値に変換できます。詳細は、『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』のXLAとTimesTenイベント管理に関する章の複合データ型の変換の項を参照してください。