PassThrough

これは、キャッシュ・データベースでのみ実行されるSQL文、およびOracle Databaseに渡されるSQL文を指定します。詳細は、『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』「パススルー・レベルの設定」『Oracle TimesTen In-Memory Database SQLリファレンス』「CREATE CACHE GROUP」を参照してください。

準備されたPassThroughコマンドを実行する場合、Oracle Databaseの依存オブジェクトのスキーマが準備後に変更されていないと想定しています。スキーマが変更されている場合は、PassThroughコマンドによってOracle Databaseで予期せぬ結果が発生する可能性があります。

SQL文をOracle Databaseに渡す場合、TimesTenでサポートされるデータ型のみを列定義で使用してください。指定されたデータ型がTimesTenでサポートされていない場合、パススルー文は失敗します。

この属性を使用したOracle Database接続時の分離レベルの変更については、「Isolation」を参照してください。

必要な権限

この属性の値の変更に権限は必要ありません。

TimesTen ScaleoutおよびTimesTen Classicでの使用

この属性は、TimesTen ClassicとTimesTen Scaleoutの両方でサポートされています。

設定

PassThroughは次のように設定します。

属性の設定場所 属性の表示 設定

CまたはJavaプログラム、あるいはUNIXおよびLinuxシステムのTimesTen Classicのodbc.iniファイル

PassThrough

0(デフォルト) - SQL文はTimesTenに対してのみ実行されます。

1: TimesTen以外の1つ以上の表を参照していないかぎり、INSERTUPDATEおよびDELETE文はTimesTenに対して実行されます。TimesTen以外の1つ以上の表を参照している場合は、Oracle Databaseに渡されます。DDL文はTimesTenに対して実行されます。その他の文がTimesTenで構文エラーを生成する場合、またはその他の文で参照されている1つ以上の表がTimesTenに存在しない場合に、その他の文はOracle Databaseに渡されます。

2 - 読取り専用キャッシュ・グループまたはREADONLYキャッシュ表属性を持つユーザー管理キャッシュ・グループ表に対して実行されたINSERTUPDATEおよびDELETE文は、Oracle Databaseに渡されます。その他のキャッシュ・グループ・タイプに対するパススルー動作は、PassThrough=1と同じです。

3 - すべての文が実行のためにOracleデータベースにパススルーされます。

Windows ODBCデータソース・アドミニストレータ

該当なし

制限事項

PassThrough機能を使用する場合、いくつかの制限を考慮する必要があります。これには次のものがあります:

  • 問合せがOracle Databaseで実行される必要があるようにPassThrough属性が設定されている場合は、その問合せは変更されずにOracle Databaseに送信されます。問合せがキャッシュ・グループの表に対してシノニムを使用する場合、問合せが成功するためには、同じ名前のシノニムが対応するOracle Database表に定義されている必要があります。

  • TimesTen独自の構文を使用するSQL文がOracle Databaseに渡される場合、TimesTenはその構文がOracle Databaseでサポートされていないことを示すエラー・メッセージを返します。

  • 準備されたPassThroughコマンドを実行する場合、Oracle Databaseの依存オブジェクトのスキーマが準備後に変更されていないと想定しています。スキーマが変更されている場合は、予期せぬ結果が発生する可能性があります。

  • TimesTenはキャッシュを無効にする機能を備えていません。TimesTenはキャッシュされた表が最新の状態であるかを検証しません。TimesTenで問合せの構文が正しく、問合せで参照されるすべての表がキャッシュに存在する場合、キャッシュが最新であるかどうかにかかわらず問合せはTimesTenで実行されます。

  • OracleのINSERTUPDATEまたはDELETE処理のパススルーは、前述の表で説明するPassThrough属性の設定によって異なります。TimesTen Cacheは、トリガーやストアド・プロシージャの中に隠されたINSERTUPDATEおよびDELETE処理を検出できません。このため、TimesTenは隠された処理に対してPassThroughルールを適用できません。

  • PL/SQLブロックをOracle Databaseに渡すことはできません。

  • 読取り専用キャッシュ・グループに対するパススルーのINSERTUPDATEまたはDELETE処理の結果は、トランザクションがコミットされた後、および次の自動リフレッシュ処理が完了した後にのみ反映されます。

  • TimesTenの同期ライトスルー・キャッシュ・グループにキャッシュされるOracle Database表に対する更新を検出またはブロックするメカニズムはありません。更新がキャッシュ経由で渡された文によって実行されたものであるか、その他のOracle Databaseアプリケーションからのものであるかにかかわらず、変更内容はTimesTenには反映されません。

  • Oracle Call Interface(OCI)では、入力パラメータのバインド型を表すメカニズムがサポートされていません。アプリケーションでPassThrough文に正しいSQLのデータ型が指定されているかを確認してください。ODBCドライバにより、CおよびSQLのデータ型がTimesTenに変換され、変換後のデータとSQLのデータ型のコードが表示されます。TimesTenはその情報をOCIに示します。LONG型およびLONG RAW型の入力バインド値の長さは4000に制限されます。

  • すべてのパススルー・レベルにおいて、DDL文のパススルーの実行はTimesTen側ではコミットされません。

  • RETURN TWOSAFEを使用してレプリケートされる処理を含むトランザクションでは、PassThrough0より大きい値を設定できません。PassThrough0よりも大きい値が指定されている場合は、エラーが返され、トランザクションをロールバックする必要があります。

  • PassThrough01、または 2に設定した場合、動的ロード条件が存在するときには次の動作が発生します。

    • 動的ロードは、すべての動的キャッシュ・グループ・タイプのキャッシュ表に対するSELECT操作で発生可能です。

    • INSERT操作、UPDATE操作またはDELETE操作に対する動的ロードは、動的非同期ライトスルーまたは動的同期ライトスルー・キャッシュ・グループのキャッシュされた表に対してのみ実行できます。

INSERTUPDATEDELETEおよびSELECT文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』「SQL文」を参照してください。