XLAレプリケーション関数リファレンス

『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』TimesTenレプリケーションの概要で説明されているTimesTenレプリケーションは、お客様のほとんどの要件に対応しています。しかしながら、XLA関数を使用してデータベース間で更新をレプリケートすることもできます。この方法で独自のレプリケーション・スキームをXLAの上に実装することはかなり困難ですが、TimesTenのレプリケーションがなんらかの理由で実行できない場合には検討できます。

この項では、レプリケーション・メカニズムとしてXLAのみを使用する関数について説明します。関数は、アルファベット順に示されています。

ttXlaApply

この関数はXLAレプリケーション機能の一部であり、一般的なXLAアプリケーションでの使用には適していません。

説明

トランザクション・ログ・ハンドルに関連付けられているデータベースに更新を適用します。戻り値は、更新が成功したかどうかを示します。また、更新によって永続的な問題が発生したかどうかも示します。(更新で一時的な問題(デッドロック、タイムアウトなど)が発生したかどうかを確認するには、ttXlaErrorをコールし、エラー・コードを確認する必要があります。)

ttXlaUpdateDesc_tレコードがトランザクション・コミットの場合、基盤となるデータベース・トランザクションがコミットされます。ttXlaApplyで他のトランザクション・コミットは実行されません。パラメータtest (下の構文を参照)がtrueの場合は、レコードの更新および削除のために、更新記述内の古い値がデータベースの現在の内容と比較されます。更新記述内の古い値がデータベースの対応する行と一致しない場合、この関数は更新を拒否して、sb_ErrXlaTupleMismatchエラーを返します。

「レプリケーション・メカニズムとしてのXLAの使用」を参照してください。

ノート:

表定義が最初にトランザクション・ログに書き込まれてから変更された場合、ttXlaApplyは使用できません。文のレベルではなく、行のレベルで一意キー制約および外部キー制約がチェックされます。

必要な権限

ADMIN

ttXlaApply処理の対象となるターゲット・データベースでは、他の権限が必要になる場合があります。たとえば、ターゲット・データベースにCREATETAB(表の作成)レコードを適用するには、必要に応じて、CREATE TABLEまたはCREATE ANY TABLE権限を持つ必要があります。

構文

SQLRETURN ttXlaApply(ttXlaHandle_h handle,
                     ttXlaUpdateDesc_t* record,
                     SQLINTEGER test)

パラメータ

パラメータ 説明

handle

ttXlaHandle_h

データベースのトランザクション・ログ・ハンドル

record

ttXlaUpdateDesc_t*

SQL文を生成するトランザクション

test

SQLINTEGER

古い値のテスト:

  • 1: テストは有効

  • 0: テストは無効

結果

コールが成功した場合は、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。

testが1で、ttXlaApplyで更新の競合が検出されると、sb_ErrXlaTupleMismatchエラーが返されます。

この例では、既存のレコードの以前の値をテストせずに、更新をデータベースに適用します。

ttXlaUpdateDesc_t record;
rc = ttXlaApply(xlahandle, &record, 0);

ノート

ttXlaApplyをコールすると、更新が同時トランザクションでタイムアウトまたはデッドロックする可能性があります。この場合は、アプリケーションによって、トランザクションをロールバックし、更新を再適用してください。

ttXlaCommit

この関数はXLAレプリケーション機能の一部であり、一般的なXLAアプリケーションでの使用には適していません。

説明

トランザクション・ログ・ハンドルに対して適用中の現行のトランザクションをコミットします。トランザクションが完了しているかどうかに関係なく、このルーチンはトランザクションをコミットします。このルーチンをコールすると、ttXlaApplyによってレポートされた一時的なエラー(タイムアウトまたはデッドロック)に応答でき、ttXlaApplyは、エラーが発生しなければ現在のトランザクションを適用します。

「タイムアウトおよびデッドロックのエラーへの対処」を参照してください。

必要な権限

XLA

構文

SQLRETURN ttXlaCommit(ttXlaHandle_h handle)

パラメータ

パラメータ 説明

handle

ttXlaHandle_h

データベースのトランザクション・ログ・ハンドル

結果

コールが成功した場合は、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。

rc = ttXlaCommit(xlahandle);

ttXlaGenerateSQL

この関数はXLAレプリケーション機能の一部であり、一般的なXLAアプリケーションでの使用には適していません。

ノート:

この関数は、現在はLOBロケータでは動作しません。

説明

更新レコードの結果を示すSQL DMLまたはDDL文を生成します。生成された文は、データベースには適用されません。かわりに、文は、最大サイズがmaxLenパラメータによって指定されている、指定のバッファに返されます。そのバッファの実際のサイズは、actualLenによって返されます。更新および削除のレコードの場合、正しいSQLを生成するために、ttXlaGenerateSQLには、NULL値可能でない列に対する主キー索引または一意索引が必要です。

生成されたSQL文は、XLAハンドルのODBC接続に関係付けられている接続文字セットでエンコードされます。

「TimesTen以外のデータベースに対する更新のレプリケート」も参照してください。

必要な権限

XLA

構文

SQLRETURN ttXlaGenerateSQL(ttXlaHandle_h handle,
                           ttXlaUpdateDesc_t* record,
                           out char* buffer,
                           SQLINTEGER maxLen,
                           out SQLINTEGER* actualLen)

パラメータ

パラメータ 説明

handle

ttXlaHandle_h

データベースのトランザクション・ログ・ハンドル

record

ttXlaUpdateDesc_t*

SQLに変換されるレコード

buffer

char*

変換されたSQL文の場所

maxLen

SQLINTEGER

バッファの最大長(バイト)

actualLen

SQLINTEGER*

バッファの実際の長さ(バイト)

結果

コールが成功した場合は、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。

この例では、更新レコードによって表現されるUPDATEに相当するSQL文のテキストを生成します。

ttXlaUpdateDesc_t record;
char buffer[200];
/*
 * Get the desired update record into the varable record.
 */

SQLINTEGER actualLength;

rc = ttXlaGenerateSQL(xlahandle, &record, buffer, 200,
                      &actualLength);

ノート

ttXlaGenerateSQL関数は、削除された表、またはレコードが生成された後で変更された表に関連付けられている更新レコードに対してはSQL文を生成できません。

ttXlaLookup

この関数はXLAレプリケーション機能の一部であり、一般的なXLAアプリケーションでの使用には適していません。

説明

この関数は、keysパラメータで指定されているキー値がある、指定された表内のレコードを検索します。keysおよびresultレコードの書式は、通常の行の書式と同じです。この関数では、基礎となる表に主キーが必要です。

必要な権限

XLA

構文

SQLRETURN ttXlaLookup(ttXlaHandle_h handle,
                      ttXlaTableDesc_t* table,
                      void* keys,
                      out void* result,
                      SQLINTEGER maxsize,
                      out SQLINTEGER* retsize)

パラメータ

パラメータ 説明

handle

ttXlaHandle_h

データベースのトランザクション・ログ・ハンドル

table

ttXlaTblDesc_t*

検索する表

keys

void*

表に対して定義された構造内のレコード

表の主キーの一部であるキー・レコードの列のみが調べられます。

result

void*

検出されたレコードのコピー先

一致するキー列を持つレコードが存在しない場合は、エラーが返されます。

maxsize

SQLINTEGER

resultバッファに格納可能な最大レコードのサイズ

retsize

SQLINTEGER*

レコードの実際のサイズ

結果

コールが成功した場合は、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。

この例では、一組の整数キー値を指定してレコードを調べます。このコールの前に、目的の表がtableに記述され、キー列が設定されているレコードがkeybufferに含まれている必要があります。

char keybuffer[100];
char recbuffer[2000];
ttXlaTableDesc_t table;
SQLINTEGER recordSize;

rc = ttXlaLookup(xlahandle, &table, keybuffer, recbuffer,
                 sizeof (recbuffer), &recordSize);

ttXlaRollback

この関数はXLAレプリケーション機能の一部であり、一般的なXLAアプリケーションでの使用には適していません。

説明

トランザクション・ログ・ハンドルに対して適用中の現行のトランザクションをロールバックします。このルーチンをコールすると、ttXlaApplyによってレポートされた一時的なエラー(タイムアウトまたはデッドロック)に応答できます。

「タイムアウトおよびデッドロックのエラーへの対処」を参照してください。

必要な権限

XLA

構文

SQLRETURN ttXlaRollback(ttXlaHandle_h handle)

パラメータ

パラメータ 説明

handle

ttXlaHandle_h

データベースのトランザクション・ログ・ハンドル

結果

コールが成功した場合は、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。

rc = ttXlaRollback(xlahandle);

ttXlaTableCheck

この関数はXLAレプリケーション機能の一部であり、一般的なXLAアプリケーションでの使用には適していません。

説明

レプリケーション・メカニズムとしてXLAを使用する場合、この関数は、マスター・データベースから受信したttXlaTblDesc_t構造体内の名前付き表が、トランザクション・ログ・ハンドルに関連付けられているサブスクライバ・データベースまたはデータベースと互換性があることを検証します。compatパラメータは、表に互換性があるかどうかを示します。

「データベース間での表の互換性の確認」を参照してください。

必要な権限

XLA

構文

SQLRETURN ttXlaTableCheck(ttXlaHandle_h handle,
                          ttXlaTblDesc_t* table,
                          ttXlaColDesc_t* columns,
                          out SQLINTEGER* compat)

パラメータ

パラメータ 説明

handle

ttXlaHandle_h

データベースのトランザクション・ログ・ハンドル

table

ttXlaTblDesc_t*

表記述

columns

ttXlaColDesc_t*

表の列記述

compat

SQLINTEGER*

互換性情報:

  • 1: 表に互換性がある。

  • 0: 表に互換性がない。

結果

コールが成功した場合は、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。

この例では、表の互換性を確認します。

SQLINTEGER compat;
ttXlaTblDesc_t table;
ttXlaColDesc_t columns[20];
/*
 * Get the desired table and column definitions into
 * the variables "table" and "columns"
 */
rc = ttXlaTableCheck(xlahandle, &table, columns, &compat);
if (compat) {
    /* Compatible */
}
else {
    /*
     * Not compatible or some other error occurred
     */
}