Oracle® TimesTen Application-Tier Database Cache

概要

11gリリース2(11.2.2)

B66721-03(原本部品番号:E21631-06)

2014年6月

Oracle TimesTen Application-Tier Database Cache概要, 11gリリース2 (11.2.2)

B66721-03

Copyright © 2012, 2014, Oracle and/or its affiliates.All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があり、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- 関連ドキュメント

- 表記規則

- ドキュメントのアクセシビリティについて

新機能

- リリース11.2.2.7.0の新機能

- リリース11.2.2.5.0の新機能

- リリース11.2.2.4.0の新機能

- リリース11.2.2.2.0の新機能

- リリース11.2.2.1.0の新機能

- リリース11.2.2.0.0の新機能

1 Oracle TimesTen In-Memory DatabaseおよびTimesTen Application-Tier Database Cache

- Oracle TimesTen In-Memory Databaseが高速である理由

- TimesTenおよびTimesTen Cacheの機能の概要

- TimesTenのAPIサポート

- ODBCおよびJDBCインタフェース

- SQLおよびPL/SQLの機能

- OCIおよびPro*C/C++プリコンパイラのサポート

- ODP.NETサポート

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

- TTClasses

- 分散トランザクション処理API

- アクセス制御

- データベースの接続

- 永続性

- 問合せの最適化によるパフォーマンス

- 同時実行性

- データベース・キャラクタ・セットおよびグローバリゼーション・サポート

- インメモリー列圧縮

- サーバー間のデータ・レプリケーション

- TimesTen Cacheによるキャッシュ・データ

- Oracle DatabaseからTimesTen表へのデータのロード

- ビジネス・インテリジェンスおよびオンライン分析処理

- ラージ・オブジェクト

- 自動データ・エージング

- システムの監視

- 管理とユーティリティ

2 TimesTenおよびTimesTen Cacheの使用

- TimesTenの使用

- TimesTen Cacheの使用

- TimesTenアプリケーション使用例

- リアルタイム取引価格サービス・アプリケーション

- TimesTen Cacheアプリケーション使用例

- コール・センター・アプリケーション

- 携帯利用者の利用状況計測アプリケーション

3 TimesTen Cacheのアーキテクチャとコンポーネント

- アーキテクチャの概要

- 共有ライブラリ

- メモリー常駐データ構造

- データベース・プロセス

- 管理プログラム

- チェックポイント・ファイルおよびトランザクション・ログ・ファイル

- キャッシュ・データ

- レプリケーション

- TimesTen接続オプション

- ダイレクト・ドライバ接続

- クライアント/サーバー接続

- ドライバ・マネージャ接続

- 詳細情報

4 同時操作

- トランザクションの独立性

- コミット読取り分離レベル

- シリアライズ可能分離レベル

- ロック・レベル

- データベース・レベル・ロック

- 表レベル・ロック

- 行レベル・ロック

- 詳細情報

5 問合せの最適化

- 最適化時間とメモリーの使用

- 統計

- オプティマイザ・ヒント

- 索引

- スキャン方法

- 結合方法

- ネステッド・ループ結合

- マージ結合

- オプティマイザ計画

- 詳細情報

6 データの可用性と整合性

- トランザクション・ロギング

- ディスクへのログ・バッファの書込み

- トランザクション・ログ・ファイルが削除される状況

- TimesTenコミット

- チェックポイント

- 非ブロッキング・チェックポイント

- ブロッキング・チェックポイント

- ログおよびチェックポイント・ファイルからのリカバリ

- レプリケーション

- アクティブ・スタンバイ・ペア

- クラシック・レプリケーション構成

- 単方向レプリケーション

- 双方向レプリケーション

- 非同期およびRETURNサービス・レプリケーション

- レプリケーションのフェイルオーバーおよびリカバリ

- アクティブ・スタンバイ・ペアのレプリケーションの自動クライアント・フェイルオーバー

- 詳細情報

7 イベント通知

- トランザクション・ログAPIによるトランザクション変更の検出

- XLAの動作

- ログ更新レコード

- マテリアライズド・ビューとXLAによる表の監視

- SNMPトラップによる問題の監視

- 詳細情報

8 TimesTen Cache

- キャッシュ・グループ

- 動的キャッシュ・グループおよび明示的にロードされるキャッシュ・グループ

- グローバル・キャッシュ・グループおよびローカル・キャッシュ・グループ

- キャッシュ・グリッド

- TimesTen CacheとOracle Database間のデータの転送

- Oracle Database表からのキャッシュ・グループの更新

- キャッシュ・グループからのOracle Database表の更新

- エージング機能

- パススルー機能

- キャッシュ・グループのレプリケーション

- キャッシュ・アドバイザの使用

- 詳細情報

9 TimesTenおよびTimesTen Cacheの管理

- TimesTenおよびTimesTen Cacheのインストール

- アクセス制御

- コマンドラインによる管理

- SQLによる管理

- SQL Developer

- ODBC Administrator

- TimesTenおよびTimesTen Cacheのアップグレード

- インプレース・アップグレード

- オフライン・アップグレード

- オンライン・アップグレード

- 詳細情報

索引

はじめに

Oracle TimesTen In-Memory Database (TimesTen)は、高速なレスポンスとスループットのためのメモリーが最適化されたリレーショナル・データベースです。このデータベースは、実行時にメモリー内に完全に格納され、ディスク記憶域にデータを記録することでリカバリおよび再起動が可能です。レプリケーション機能によって、高可用性が実現されます。TimesTenは、OracleインタフェースのPL/SQL、OCIおよびPro*C/C++に加え、標準アプリケーション・インタフェースのJDBC、ODBCおよびODP.NETをサポートしています。TimesTenは、単独で利用することも、Oracle Databaseのキャッシュとしても利用できます。

このマニュアルでは、TimesTen Application-Tier Database Cacheの概要についても説明します。

対象読者

このドキュメントは、データベース・システムの基本的な理解を持つ読者を対象としています。

関連ドキュメント

TimesTenのドキュメントは、次のURLのOracle Technology Networkで入手できます。

http://www.oracle.com/technetwork/database/database-technologies/timesten/documentation/index.html

Oracle DatabaseのドキュメントもOracle Technology Networkで入手できます。これは、TimesTenでサポートされているが、説明されていないOracle Databaseの機能の場合に役立ちます。

http://www.oracle.com/pls/db112/homepage/

表記規則

TimesTenは複数のプラットフォームをサポートしています。このマニュアルに記述されている内容は、特に表記しないかぎり、サポートされるすべてのプラットフォームに適用されます。Windowsという用語は、サポートされるすべてのWindowsプラットフォームを表します。UNIXという用語は、サポートされるすべてのUNIXおよびLinuxプラットフォームを表します。TimesTenでサポートされるプラットフォームの具体的なバージョンについては、『Oracle TimesTen In-Memory Databaseリリース・ノート』のプラットフォームに関する説明を参照してください。

注意:
TimesTenドキュメントでは、用語としての「データ・ストア」と「データベース」は同じです。どちらの用語もTimesTenデータベースを指します。

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

固定幅フォントのイタリック

固定幅フォントのイタリック体は、置き換える必要があるコード例の変数です。例:
Driver=install_dir/lib/libtten.sl

install_dirをご使用のTimesTenインストール・ディレクトリに置き換えます。

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します(大カッコは入力しないでください)。

{ }

中カッコは、カッコ内の項目のうち、1つが必須であることを表します(中カッコは、入力しないでください)。

|

選択項目の引数を区切る縦線(パイプ)。

. . .

引数の後の水平の省略記号は、1行のコマンドラインで複数の引数を使用できることを表します。

%

%は、UNIXのシェル・プロンプトを表します。

#

#は、UNIXのルート・プロンプトを表します。

このマニュアルでは、次の変数を使用して、パス、ファイルおよびユーザー名を表します。

規則

意味

install_dir

TimesTenの現在のリリースがインストールされているディレクトリのパスです。

TTinstance

TimesTenのインストールで指定するインスタンス名です。インストール時に、英数字の一意のインスタンス名でTimesTenの各インストールを識別する必要があります。この名前はインストール・パスに表示されます。

bitsまたはbb

32または64の2桁の数字は、32-bitまたは64-bitのオペレーティング・システムを表します。

releaseまたはrr

リリース番号の最初の3つの部分(ドットが付く場合と付かない場合があります)。リリース番号の最初の3つの部分は、TimesTenのメジャー・リリースを表します。たとえば、1122または11.2.2はTimesTen 11gリリース2(11.2.2)を表します。

jdk_version

2桁の数字は、JDKのメジャー・リリースのバージョン番号を表します。たとえば、14はJDK 1.4を、5はJDK 5を表します。

DSN

データソースの名前です。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

新機能

この項では、このマニュアルで説明するOracle TimesTen In-Memory Databaseリリース11.2.2の新機能を説明します。また、詳細情報へのリンクを示します。

リリース11.2.2.7.0の新機能

Oracle In-Memory Database Cacheは、Oracle TimesTen Application-Tier Database Cacheという名前になりました。以前のIMDB Cacheへの参照は、現在はTimesTen Cacheとして参照されます。

リリース11.2.2.5.0の新機能

- データベース統計の収集と表示のために、新しいttStatsユーティリティが使用されます。収集された統計を評価して、TimesTenデータベースのパフォーマンスを評価できます。「管理とユーティリティ」を参照してください。

- ヒントを適用して、TimesTen問合せオプティマイザに指示を渡すことができます。問合せに対して最適な実行計画を選択するとき、オプティマイザではこれらのヒントが考慮されます。今回のリリースでは、特定のSQL文に対して文レベルのオプティマイザ・ヒントを適用できます。詳細は、「オプティマイザ・ヒント」を参照してください。

- SQL操作の実行時統計を測定して表示することでSQL文のパフォーマンスを判断できる新しい組込みプロシージャを使用できます。「システムの監視」を参照してください。

リリース11.2.2.4.0の新機能

- 新しいツールである索引アドバイザを使用して、特定のSQLワークロードのパフォーマンス向上が可能な一連の索引をお薦めできます。詳細は、「索引」を参照してください。

- SQL問合せの結果をバックエンドOracle DatabaseからTimesTenの単一の表にロードできる新しいツールが追加されています。詳細は、「Oracle DatabaseからTimesTen表へのデータのロード」を参照してください。

- 新しいツールであるTimesTenキャッシュ・アドバイザを使用することで、Oracle Databaseの顧客が、TimesTen Cacheを使用した場合にその既存のOracle Databaseアプリケーションのパフォーマンスを向上できるかどうかを判断できます。詳細は、「キャッシュ・アドバイザの使用」を参照してください。

リリース11.2.2.2.0の新機能

- データベースの作成時にパラレル・レプリケーションを構成することで、レプリケーションのスループットを向上できます。詳細は、「レプリケーション」を参照してください。

リリース11.2.2.1.0の新機能

- データベースの作成時にパラレル伝播を構成することで、非同期のWRITETHROUGH(AWT)キャッシュ・グループからOracle Databaseへのスループットを向上できます。「キャッシュ・グループからのOracle Database表の更新」を参照してください。

リリース11.2.2.0.0の新機能

- TimesTenには、表を列レベルで圧縮する機能があるため、データをより効率的に格納できます。「インメモリー列圧縮」を参照してください。

- TimesTenには、SQL分析関数、SQL集計関数およびOLAP演算子が用意されています。「ビジネス・インテリジェンスおよびオンライン分析処理」を参照してください。

- TimesTenでは、TimesTen Cacheにキャッシュされていない表のラージ・オブジェクト(LOB)がサポートされます。「ラージ・オブジェクト」を参照してください。

1 Oracle TimesTen In-Memory DatabaseおよびTimesTen Application-Tier Database Cache

Oracle TimesTen In-Memory Database(TimesTen)は、メモリーが最適化されたリレーショナル・データベースです。今日のリアルタイム・エンタープライズおよび電子通信、資本市場、防衛などの業界で必要とされている応答性および高いスループットをアプリケーションに提供します。TimesTen Application-Tier Database Cache (TimesTen Cache)で、Oracle TimesTen In-Memory DatabaseはRDBMSエンジンとして使用されます。Oracle TimesTen In-Memory Databaseは、埋込みデータベースとしてアプリケーション層にデプロイされ、標準SQLインタフェースを使用して物理メモリーに完全に対応するデータベース上で動作します。トランザクションのリアルタイム・レプリケーションによって、インメモリー・データベースの高可用性が実現されます。

TimesTen Application-Tier Database Cache(TimesTen Cache)は、Oracle Databaseの製品オプションであり、アプリケーション層におけるレスポンス時間を向上させる目的で、パフォーマンス重視のOracle Databaseのサブセットをキャッシュするのに役立ちます。キャッシュ表は、読取り専用または更新可能にすることができます。アプリケーションでは、標準SQLを使用してキャッシュ表の読取りおよび更新を行い、キャッシュとOracle Database間でデータの同期が自動的に実行されます。TimesTen Application-Tier Database Cacheによって、リレーショナル・データベースの完全な汎用性と機能性、Oracle Databaseとのキャッシュ一貫性の透過的な保持およびインメモリー・データベースのリアルタイム・パフォーマンスがアプリケーションに提供されます。

Oracle TimesTen In-Memory DatabaseおよびTimesTen Cacheでは、実行時にデータが存在する場所に関する前提を変更することによってリアルタイム・パフォーマンスが実現されます。メモリー内でデータを管理し、それに応じてデータ構造およびアクセス・アルゴリズムを最適化することによって、データベース操作の効率が最大限になり、完全にキャッシュされるディスク・ベースのリレーショナル・データベース管理システム(RDBMS)と比較しても、応答性およびスループットの大幅な向上が実現されます。TimesTenおよびTimesTen Cacheのライブラリもアプリケーション内に埋め込まれるため、コンテキスト・スイッチおよび不要なネットワーク操作が行われなくなり、パフォーマンスがさらに向上します。

標準リレーショナル・データ・モデルに従って、TimesTenおよびTimesTen Cacheデータベースへのアクセスには、SQL、JDBC、ODBC、PL/SQLおよびOracle Call Interface (OCI)を使用できます。SQLを使用してアプリケーションをシステム内部から遮断すると、既存のアプリケーションに影響を及ぼさずにデータベースを変更または拡張できます。アプリケーション・モジュール、表および列を追加するだけで、新しいサービスを本番環境に簡単に追加できます。主流のRDBMSの場合と同様に、コスト・ベースのオプティマイザによって、問合せおよびトランザクションを最も高速に処理する方法が自動的に判別されます。Oracle DatabaseまたはSQLインタフェースをよく理解している開発者は、TimesTenおよびTimesTen Cacheによるリアルタイム・アプリケーションの開発において、すぐに生産性を高めることができます。

Oracle TimesTen In-Memory Databaseが高速である理由

従来のディスク最適化RDBMSによって行われる作業の多くは、データが主にディスクに常駐するという前提に基づいて行われます。この基本的な前提に基づいて、最適化アルゴリズム、バッファ・プール管理、および索引検索技法が設計されています。

ディスク・ベースのRDBMSがそのすべてのデータをメイン・メモリー内に保持するように構成されている場合でも、ディスク・ベース・データの常駐という前提がパフォーマンスの足かせになります。これらの前提は、処理ロジック、索引付けスキーム、データ・アクセス・メカニズムなどについてハードコードされているため、簡単に変更できません。

TimesTenは、データがメイン・メモリーに常駐するという認識で設計されているため、データへのより直接的な経路を選択し、コード・パスの長さを短縮してアルゴリズムおよび構造を簡素化できます。

ディスク常駐という前提がなくなると、複雑さは大幅に緩和されます。マシンのコマンド数は減少し、バッファ・プール管理や余分なコピーは不要となり、索引ページも縮小し、これらの構造は簡素化されます。設計はより単純かつ縮小され、リクエストは高速に実行されます。図1-1に、TimesTenの設計の簡素さを示します。

図1-1 ディスク・ベースのRDBMSとTimesTenの比較

従来のディスク・ベースのRDBMSでは、クライアント・アプリケーションは、なんらかの種類のIPC接続を介してデータベース・サーバー・プロセスと通信を行います。これによって、すべてのSQL操作に対してパフォーマンス・オーバーヘッドが追加されます。アプリケーションでは、TimesTenをそのアドレス空間に直接リンクすることによって、IPCオーバーヘッドを排除し、問合せ処理を簡素化できます。これはTimesTenに直接接続することで実現されます。従来のクライアント/サーバー・アクセスも、レポートなどの機能に対して、または多数のアプリケーション層プラットフォームで共通のインメモリー・データベースへのアクセスを共有する必要がある場合にはサポートされます。アプリケーションから見ると、直接接続またはクライアント/サーバー接続かにかかわらず、TimesTen APIは同じです。

TimesTenおよびTimesTen Cacheの機能の概要

TimesTenおよびTimesTen Cacheには、多くのよく知られているデータベース機能およびいくつかの独自の機能が含まれています。この項では説明する内容は、次のとおりです。

- TimesTenのAPIサポート

- アクセス制御

- データベースの接続

- 永続性

- 問合せの最適化によるパフォーマンス

- 同時実行性

- データベース・キャラクタ・セットおよびグローバリゼーション・サポート

- インメモリー列圧縮

- サーバー間のデータ・レプリケーション

- TimesTen Cacheによるキャッシュ・データ

- Oracle DatabaseからTimesTen表へのデータのロード

- ビジネス・インテリジェンスおよびオンライン分析処理

- ラージ・オブジェクト

- 自動データ・エージング

- システムの監視

- 管理とユーティリティ

TimesTenのAPIサポート

TimesTenのランタイム・アーキテクチャでは、ODBC、JDBC、OCI、Pro*C/C++プリコンパイラおよびODP.NET APIを介した接続がサポートされています。また、TimesTenでは、TimesTen固有の処理に対してODBC、JDBCおよびOCI機能を拡張し、かつPL/SQLをサポートする組込みプロシージャ、ユーティリティおよびTTClasses API(C++)も提供されています。APIサポートについては、後続の項を参照してください。

ODBCおよびJDBCインタフェース

TimesTenおよびTimesTen Cacheでは、ODBCおよびJDBCがサポートされています。他の多くのデータベース・システムでは、ODBCまたはJDBC APIのサポートが独自のインタフェースよりも大幅に遅くなる場合があるのに対して、ODBCおよびJDBCは、データベース・エンジンで直接動作するTimesTen固有のインタフェースです。TimesTenでは、完全に標準に準拠し、TimesTen環境で最大のパフォーマンスが得られるように調整されたAPIのバージョンがサポートされています。

詳細は、『Oracle TimesTen In-Memory Database C開発者ガイド』および『Oracle TimesTen In-Memory Database Java開発者ガイド』を参照してください。

SQLおよびPL/SQLの機能

TimesTenおよびTimesTen Cacheでは、広範なSQL機能およびSQL拡張機能がサポートされているため、レプリケーションやTimesTen Cacheなどの特別な機能の構成と管理が簡単になります。

TimesTenおよびTimesTen Cacheでは、PL/SQL(Procedural Language Extension to SQL)がサポートされ、このプログラミング言語を使用すると、TimesTenまたはTimesTen CacheデータベースでSQLにプロシージャ構造を統合できます。PL/SQLは、サポートされるすべてのAPIから実行できます。

詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』および『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』を参照してください。

OCIおよびPro*C/C++プリコンパイラのサポート

TimesTenおよびTimesTen Cacheでは、TimesTenの機能に対してOracle Call Interface(OCI)およびPro*C/C++プリコンパイラがサポートされています。

TimesTen OCIサポートによって、既存の多くのOCIアプリケーションを、TimesTenでダイレクト・モードまたはクライアント/サーバー・モードで実行できます。また、TimesTen OCIでは、OCIをデータベース・インタフェースとして使用する他のOracle Database製品を使用することもできます。OCIアプリケーションからPL/SQLをコールできます。

詳細は、『Oracle TimesTen In-Memory Database C開発者ガイド』を参照してください。

ODP.NETサポート

Oracle Data Provider for .NET(ODP.NET)は、Microsoft ADO.NETインタフェースの実装です。TimesTenおよびTimesTen Cacheに対するODP.NETサポートによって、.NETおよびC#クライアント・アプリケーションからTimesTenデータベースへの高速で効率的なADO.NETデータ・アクセスが提供されます。

詳細は、Oracle Data Provider for .NET Oracle TimesTen In-Memory Databaseサポートのユーザーズ・ガイドを参照してください。

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

TimesTenおよびTimesTen Cacheには、データベース外の動作に連動させるために、アプリケーションで更新アクティビティを監視できるAPIが用意されています。TimesTenおよびTimesTen Cacheでは、この機能がトランザクション・ログAPI(XLA)によって提供され、アプリケーションで、コミットされる更新レコードを監視し、検出された更新に基づいて様々な動作を起動できます。たとえば、XLAアプリケーションでは、検出した更新を別のデータベース(TimesTenまたはディスク・ベースのRDBMS)に適用できます。別のタイプのXLAアプリケーションでは、重要な更新が行われたことをサブスクライバに通知できます。このAPIは、C、Java (JMS/XLA)およびC++ (TTClasses)でサポートされています。

TimesTenおよびTimesTen Cacheで提供されるマテリアライズド・ビューをXLAとともに使用することによって、SQL問合せで記述されたイベントの通知を有効にできます。XLAの主な目的は、トリガーにかわる高パフォーマンスで非同期の機能を提供することです。

詳細は、「トランザクション・ログAPIによるトランザクション変更の検出」および『Oracle TimesTen In-Memory Database C 開発者ガイド』を参照してください。

TTClasses

TimesTen C++ Interface Classes(TTClasses)は、パフォーマンス速度が高速に維持されたままでODBCより便利です。このC++クラス・ライブラリでは、最も一般的なODBC機能が含まれているラッパーが提供されます。また、TTClassesライブラリは、アプリケーション・ソフトウェアの作成時に最良の方法を推奨するためにも使用されます。

詳細は、『Oracle TimesTen In-Memory Database TTClassesガイド』を参照してください。

分散トランザクション処理API

TimesTen では、X/Open XA仕様とそのJava派生機能であるJavaトランザクションAPI(JTA)を実装しています。

TimesTenのXAインタフェースは、分散トランザクション処理(DTP)環境でトランザクション・マネージャが使用するために実装されています。これらのインタフェースを使用することで、新しいトランザクション・マネージャを作成して、あるいは既存のトランザクション・マネージャを適用して、TimesTenリソース・マネージャと連携した処理を実現できます。

TimesTenのJTAインタフェースは、Javaアプリケーション、アプリケーション・サーバー、トランザクション・マネージャを有効にして、TimesTenリソース・マネージャをDTP環境で使用するために実装されています。

詳細は、『Oracle TimesTen In-Memory Database C開発者ガイド』および『Oracle TimesTen In-Memory Database Java開発者ガイド』を参照してください。

アクセス制御

アクセス制御を使用してTimesTenおよびTimesTen Cacheをインストールすると、特定の権限を持つユーザーのみが特定のTimesTen機能にアクセスできるように設定できます。TimesTenアクセス制御では、標準SQL操作を使用して、特定の権限を持つTimesTenユーザー・アカウントを設定します。TimesTenには、オブジェクト・レベルのアクセス制御およびデータベース・レベルのアクセス制御が備えられています。

詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』を参照してください。

データベースの接続

TimesTenおよびTimesTen Cacheでは、ドライバ・マネージャを介した接続に加えて、高パフォーマンスを実現するためにダイレクト・ドライバ接続がサポートされています。また、クライアント/サーバー接続もサポートされています。

これらの接続オプションによって、ユーザーはアプリケーションに対して、最高のパフォーマンスおよび機能性のトレードオフを選択できます。ダイレクト・ドライバ接続は最速です。クライアント/サーバー接続では柔軟性が向上します。ドライバ・マネージャ接続では、異なるバージョンのODBC用に作成されたODBCアプリケーション、またはODBCインタフェースを使用する複数のRDBMS製品のサポートが可能です。

詳細は、「TimesTen接続オプション」を参照してください。

永続性

TimesTenおよびTimesTen Cacheでは、永続性は、ディスク・ベース・バージョンのデータベースのトランザクション・ロギングと定期的リフレッシュを組み合せることによって実現されます。ログ・レコードは、トランザクションに対して非同期または同期でディスクに書き込まれ、アプリケーションによってトランザクション・レベルで制御されます。ネットワーク・システム内での非金銭的トランザクションなどの最大スループットが優れたシステムでは、非同期ロギングによって、発生の可能性がある障害を最小限に抑えて非常に高いスループットを実現できます。データ整合性を保持する必要がある場合(証券取引の場合など)、TimesTenおよびTimesTen Cacheを使用すると、データを失うことなく、完全な永続性が保証されます。

TimesTenでは、次の場合にトランザクション・ログが使用されます。

- アプリケーションまたはデータベースで障害が発生した場合にトランザクションを記録する。

- ロールバックされるトランザクションを取り消す。

- 他のTimesTenデータベースに変更をレプリケートする。

- Oracle Database表にTimesTenの変更をレプリケートする。

- アプリケーションで表への変更を検出(XLA APIを使用)できるようにする。

TimesTenおよびTimesTen Cacheでは、バックグラウンドで処理され、データベース・アプリケーションにほとんど影響を与えないチェックポイント処理で、ディスク・ベース・バージョンのデータベースが保持されます。この処理は、ファジー・チェックポイントと呼ばれ、自動的に実行されます。また、TimesTenおよびTimesTen Cacheには、リカバリでトランザクション・ログ・ファイルを必要としない、ブロッキング・チェックポイントもあります。ブロッキング・チェックポイントは、アプリケーションで開始する必要があります。TimesTenおよびTimesTen Cacheでは、チェックポイントの途中で障害が発生した場合に備えて2つのチェックポイント・ファイルが保持されます。アプリケーションのアクティビティに対するチェックポイントの影響を最小限に抑えるために、チェックポイント・ファイルはトランザクション・ログとは別のディスクに存在している必要があります。

詳細は、次の項を参照してください。

- 「トランザクション・ロギング」

- 「トランザクション・ログ・ファイルが削除される状況」

- 「チェックポイント」

問合せの最適化によるパフォーマンス

TimesTenおよびTimesTen Cacheには、索引の存在、表のカーディナリティ、問合せ内のORDER BY句の存在などの要素に基づいて最適な問合せ実行計画を選択する、コスト・ベースの問合せオプティマイザが備えられています。

メイン・メモリー・システムのコスト構造は、ディスク・アクセスが主要なコスト要素であるディスク・ベース・システムとは異なるため、TimesTenおよびTimesTen Cacheのオプティマイザがパフォーマンス・コストを最小化するためにSQL文を分析する方法は、従来のディスク・ベース・システムの場合とは異なります。TimesTenおよびTimesTen Cacheではディスク・アクセスが要素とならないため、ディスク・ベース・システムのオプティマイザでは通常考慮されない要素(条件を評価するコストなど)が、最適化コスト・モデルに含まれます。

TimesTenおよびTimesTen Cacheでは、範囲索引、ハッシュ索引およびビットマップ索引が提供されます。また、問合せオプティマイザでは2種類の結合方法(ネステッド・ループおよびマージ結合)が使用されます。オプティマイザによって、必要に応じて一時索引を作成できます。オプティマイザが受け入れるヒントによって、一時領域の使用とパフォーマンスのような要因間でバランスを取るかどうかの決定権が、アプリケーションに与えられます。

問合せオプティマイザと索引付けテクニックの詳細は、第5章「問合せの最適化」を参照してください。

同時実行性

TimesTenおよびTimesTen Cacheでは、共有データベースが完全にサポートされています。アプリケーションのレスポンス時間、スループットおよびトランザクション・セマンティクス間の最適なバランスを選択できるオプションが提供されています。

コミット読取り分離レベルは、非ブロッキング処理を実現します。これがデフォルトの分離レベルです。きわめて厳密なトランザクション・セマンティクスを持つデータベースに対しては、シリアライズ可能分離レベルを使用できます。これらの分離レベルは、ODBC標準に準拠し、最適なパフォーマンスを考慮して実装されています。ODBC標準で定義されているように、デフォルトの分離レベルをTimesTenまたはTimesTen Cacheデータベースに対して設定でき、このデフォルトの分離レベルは、実行時に各接続に対して動的に変更できます。

TimesTenおよびTimesTen Cacheにおける同時操作の管理の詳細は、第4章「同時操作」を参照してください。

データベース・キャラクタ・セットおよびグローバリゼーション・サポート

TimesTenおよびTimesTen Cacheでは、ネイティブ言語でのデータの保存、取得および処理に対してグローバリゼーション・サポートが提供されています。最もよく使用されるシングルバイト・エンコーディング、マルチバイト・エンコーディングおよびUnicodeを含む、50を超える様々な各国語キャラクタ・セット、各国間共通キャラクタ・セットおよびベンダー固有のキャラクタ・セットがサポートされています。TimesTen Cacheは、Oracle Databaseと互換性があるいくつかのデータベース・キャラクタ・セットをサポートしています。接続キャラクタ・セットは、別のエンコーディングで実行されているアプリケーションでTimesTenおよびTimesTen Cacheデータベースと通信できるように定義できます。アプリケーションとデータベース間のキャラクタ・セットの変換は、透過的に自動で実行されます。

TimesTenおよびTimesTen Cacheでは、異なる言語および文化に関する複雑なソート要件を処理する言語ソート機能が提供されています。80を超える言語ソート機能が提供されています。これらの言語ソート機能は、大/小文字を区別せず、アクセント記号の有無を区別しないソートおよび検索をアプリケーションで実行できるように拡張できます。

詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のグローバリゼーション・サポートに関する説明を参照してください。

インメモリー列圧縮

TimesTenには、表を列レベルで圧縮する機能があるため、データをより効率的に格納できます。このメカニズムによって、列内で重複値による冗長な格納が排除されるため、表の領域が削減され、全表スキャンを実行するSQL問合せのパフォーマンスが向上します。

詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』のCREATE TABLEに関する説明を参照してください。

サーバー間のデータ・レプリケーション

TimesTenおよびTimesTen Cacheのレプリケーションによって、サーバー間のリアルタイム・データ・レプリケーションが可能になり、高可用性および負荷分散が実現します。データ・レプリケーション構成は、非同期送信または同期送信を使用して、競合の検出と解決および障害が発生したサーバーのリストア後の自動再同期化が行われるように、アクティブ/スタンバイまたはアクティブ/アクティブにできます。

詳細は、「レプリケーション」を参照してください。

TimesTen Cacheによるキャッシュ・データ

TimesTen Application-Tier Database Cache (TimesTen Cache)では、Oracle Databaseのデータに対して、更新可能なリアルタイム・キャッシュが作成されます。また、Oracle Databaseから計算サイクルをオフロードし、応答性に優れたスケーラブルなリアルタイム・アプリケーションを使用可能にします。TimesTen Cacheによって、Oracle Database表のサブセットがキャッシュ・データベースにロードされます。更新を双方向で伝播し、キャッシュされないデータに対するSQLリクエストのパススルーを自動化するように構成できます。また、障害が発生すると、データの再同期化を自動的に実行します。

第8章「TimesTen Cache」を参照してください。

Oracle DatabaseからTimesTen表へのデータのロード

SQL問合せの結果をバックエンドOracle DatabaseからTimesTenの単一の表にロードできます。TimesTenでは、Oracle Databaseでユーザーが指定したSELECT文を実行し、その結果セットをTimesTenの表にロードするツールが提供されます。

TimesTenではこのタスクを実行するための2つの方法が提供されています。

- 対話形式のSQLユーティリティのttIsqlユーティリティで提供されているcreateandloadfromoraqueryコマンドでTimesTen表名とSELECT文を指定することで、TimesTen表が自動的に作成され、Oracle DatabaseでSELECT文が実行されてTimesTen表に結果セットがロードされます。

- ttTableSchemaFromOraQueryGet組込みプロシージャは、ユーザーが指定したSELECT文を評価することで、SELECT文の結果セットを適切に受け取ることができる表をTimesTenで作成するCREATE TABLE文を生成します。ttLoadFromOracle組込みプロシージャは、Oracle DatabaseでSELECT文を実行し、結果セットをTimesTen表にロードします。

ビジネス・インテリジェンスおよびオンライン分析処理

TimesTenおよびTimesTen Cacheには、ビジネス・インテリジェンスなどのアプリケーション用のSQL分析関数およびSQL集計関数が含まれています。アナリストや意思決定者は、分析関数を使用して比較を行い、傾向を把握することができます。ここには、ランク付け、累積、移動、集中およびレポートの関数が含まれます。

GROUP BY SQL句には、オンライン分析処理(OLAP)演算子(GROUPING SETS、CUBE、ROLLUPなど)が含まれます。

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

ラージ・オブジェクト

TimesTenでは、TimesTen Cacheにキャッシュされていない表のラージ・オブジェクト(LOB)がサポートされます。TimesTenでは、BLOB、CLOBおよびNCLOBデータ型がサポートされています。

詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』のデータ型に関する説明を参照してください。

自動データ・エージング

データ・エージングは、不要となったデータを削除する処理です。通常、データ・エージングには、特定の時間値に基づいた古いデータの削除と最低使用頻度(LRU)に基づいたデータの削除の2つのタイプがあります。たとえば、昨日の物価リストの削除、システムからログアウトしているユーザーのプロファイルとプリファレンスの削除、2年以上前の詳細記録の削除などを実行できます。

TimesTenのデータベース表およびTimesTen Cacheデータに対して、次の2つのタイプの自動データ・エージング機能を使用できます。

- タイムスタンプ値に基づいた時間ベースのデータ・エージング

- LRUアルゴリズムに基づいた使用率ベースのデータ・エージング

詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明と、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する説明を参照してください。

システムの監視

ユーザーは、次のオプションを使用してシステムの監視とレポートを行うことができます。

- ttStatsユーティリティで、データベース・パフォーマンス・メトリックをリアルタイムに監視して表示できます。ユーザーが指定した間隔で、パフォーマンス・スナップショットからHTMLレポートが生成されます。

注意:
システム統計は収集されてSYS.SYSTEMSTATS表に格納され、この情報は様々なTimesTenのユーティリティおよび監視機能によって使用されます。

- Oracle TimesTen In-Memory Database用Oracle Enterprise Managerシステム監視プラグインでは、データベース・メトリックおよびパフォーマンスの監視に使用できるグラフィカル・ユーザー・インタフェースが提供されます。また、データベース・パフォーマンスの問題の診断とトラブルシューティングに役立つ、収集されたメトリック情報に関するレポートを参照できます。

- TimesTenでは、SQL操作の実行時統計を測定して表示することでSQL文のパフォーマンスを判断できる、ttStatsConfig、ttSQLCmdCacheInfoおよびttSQLExecutionTimeHistogram組込みプロシージャが提供されます。

管理とユーティリティ

TimesTenおよびTimesTen Cacheは、次のような一般的なデータベース・ユーティリティをサポートしています。

- 対話形式のSQL (ttIsql)。

- バックアップおよびリストア(ttBackupおよびttRestore)。

- 異なるデータベース・システム間のデータ・コピー。

- 移行(ttMigrate)では、異なるバージョンのTimesTenまたはTimesTen Cacheの間でデータを移動する高速コピーが提供されます。

SQL拡張機能を使用することによって、多くの管理作業を実行できます。また、TimesTenおよびTimesTen Cacheでは、レプリケーション、Oracle Databaseからのキャッシュおよびマテリアライズド・ビューを設定する場合にもSQL拡張機能が使用されます。

TimesTen組込みプロシージャとC言語関数は、TimesTenの操作と設定に対してプログラム制御を可能にします。TimesTenコマンドライン・ユーティリティによって、ユーザーは接続、ロック、レプリケーションなどの状態を監視できます。また、TimesTenスキーマのシステム表に対してSQL SELECT問合せを使用することによって、それらの状態を取得することもできます。

TimesTenの管理の詳細は、第9章「TimesTenおよびTimesTen Cacheの管理」を参照してください。

2 TimesTenおよびTimesTen Cacheの使用

この章では、TimesTenおよびTimesTen Cacheを使用して、データにリアルタイムでアクセスする必要があるアプリケーションを使用可能にする方法について説明します。内容は次のとおりです。

- TimesTenの使用

- TimesTen Cacheの使用

- TimesTenアプリケーション使用例

- TimesTen Cacheアプリケーション使用例

TimesTenの使用

TimesTenは、次の目的で使用できます。

- リアルタイム・アプリケーションのプライマリ・データベース。TimesTenデータベースには、アプリケーションが必要とするすべてのデータが存在します。

- アーキテクチャのパフォーマンスを重視するポイントを促進するためのデータ・ユーティリティ。たとえば、TimesTenをメッセージのリポジトリとして使用することで、メッセージ・キューイング・システムに永続性とトランザクション機能を提供できます。

- 新規アプリケーション作成時の基盤となる、複数のデータソースのデータ統合ポイント。たとえば、ある組織で大量の情報を複数のデータソースに保存していたとしても、日常業務にかかわる情報は一部のみの場合があります。適切なアーキテクチャとは、関連情報を複数の異なるデータソースから1つのTimesTenデータベースに移動して、アプリケーションでただちに必要になるデータの中央リポジトリが用意されたアーキテクチャです。

TimesTen Cacheの使用

TimesTen Cacheは、次の目的で使用できます。

- 読取り専用キャッシュ。Oracle Databaseのデータは、TimesTen Cacheの読取り専用キャッシュ・グループにキャッシュできます。読取りキャッシュ・グループは、Oracle Database表を更新すると、自動的にリフレッシュされます。読取り専用キャッシュ・グループによって、参照表やサブスクライバ・プロファイルなどの参照データへの高速アクセスが実現します。

- 更新可能なキャッシュ。Oracle Databaseのデータは、TimesTen Cacheの更新可能なキャッシュ・グループにキャッシュできます。キャッシュ・グループでのトランザクションは、関連Oracle Database表に同期または非同期でコミットできます。

- Oracle Databaseのようなディスク・ベースのRDBMSと連携した総合的なワークフローでの特定のタスク用のリアルタイム・データ・マネージャ。たとえば、通話料請求アプリケーションでは、顧客、請求書の送付先住所、クレジット情報などはOracle Databaseに保存し、最新の通話記録はTimesTen Cacheデータベースに収集および保存することが可能です。また、すべての通話記録のアーカイブをOracle Databaseに保管することもできます。このように、リアルタイム・アクセスが必要な情報はTimesTen Cacheデータベースに保存し、長期の分析、監査、アーカイブに必要な情報はOracle Databaseに保存します。

- 分散キャッシュ。Oracle Databaseのデータは、スケーラビリティを保持するために、異なるマシンで実行されているTimesTen Cacheの複数のインストールにキャッシュできます。レコードのロードおよびエージングが自動的に実行される動的分散キャッシュを構成できます。

TimesTenアプリケーション使用例

この項では、データ管理ソリューションの一部としてTimesTenを統合する方法を示す、アプリケーションの使用例について説明します。

アプリケーションの使用例は、リアルタイム取引価格サービス・アプリケーションです。これは、TimesTenを使用して、プログラム売買アプリケーションがアクセスするデータ・フィードの株式取引価格を保存します。取引価格データはデータ・フィードから収集し、リアルタイム・メッセージ・バスで発行されます。データはメッセージ・バスから読み取られると、TimesTenに保存され、プログラム売買アプリケーションによってアクセスされます。

リアルタイム取引価格サービス・アプリケーション

金融サービス会社が、リアルタイムの取引価格とニュースのサービスを自社のオンライン取引設備に追加します。リアルタイム取引価格サービスは、大手マーケット・データ・ベンダーから入電するニュースを読み取り、会社の自動株式取引処理を管理する取引アプリケーションに対して、データのサブセットを使用可能にします。この会社は、将来の拡張に適応できるインフラストラクチャを構築して、リアルタイムの取引価格、ニュース、およびその他の取引サービスを顧客に提供していく予定です。

リアルタイム取引価格サービスには、NewsReaderの処理が含まれ、ニュース・ワイヤーから絶えずデータが供給されるリアルタイム・メッセージ・バスから入電するデータを読み取ります。各NewsReaderは、独立してバスからデータを読み取って別のTimesTenデータベースにデータを挿入する、バックアップのNewsReaderと対になっています。この方法では、メッセージ・バスを使用して、冗長性のために入電データを2つのTimesTenデータベースに分岐させています。この使用例では、メッセージ・バスのデータを分岐させる方が、TimesTenレプリケーションを使用するより効率的です。

一方のNewsReaderは取引アプリケーションで株式データを使用可能にし、もう一方はホットスタンバイ・バックアップとして動作して、障害発生時にアプリケーションで使用されます。現在のロードでは、4組のNewsReaderのペアが必要ですが、将来的にはさらにNewsReaderのペアを追加して、Webや携帯電話を介してリアルタイム取引価格を他のタイプの顧客に配信できます。

図2-1に、メッセージ・バスからデータを取得してNewsReadersに入力するための構成を示します。

図2-1 メッセージ・バスからのフィード・データの収集

図2-2に示すように、NewsReaderは、TimesTenデータベースのQUOTES表の株価データを更新します。それよりも動的でない利益データは、EARNINGS表で更新されます。QUOTES表およびEARNINGS表のSTOCK列は、外部キー関係を介してリンクされています。

取引アプリケーションの目的は、50未満の株価収益率を持つ株式のみ追跡し、内部ロジックを使用して、現在の株価と取引量を分析し、取引機能の別の部分を使用して取引を行うかどうか判断することです。取引アプリケーションでは、最大のパフォーマンスを得るために、関心のある株式の更新について、TimesTenのトランザクション・ログAPI (XLA)によるトランザクション変更の検出を使用してTimesTenトランザクション・ログを監視する、イベント機能を実装します。

こうした更新に対して、できるかぎり高速なアクセスを実現するために、マテリアライズド・ビューPE_ALERTSを作成します(このマテリアライズド・ビューには、QUOTES表のPRICE列とEARNINGS表のEARNS列から株価収益率を計算するWHERE句があります)。XLAイベント機能を使用して、マテリアライズド・ビューの価格更新についてトランザクション・ログを監視することによって、取引アプリケーションは取引基準に一致する株式のアラートのみを受信します。

図2-2 マテリアライズド・ビューとXLAの使用

TimesTen Cacheアプリケーション使用例

この項では、TimesTen Cacheの使用方法を示す使用例について説明します。

- コール・センター・アプリケーション: TimesTen Cacheをアプリケーション層のキャッシュとして使用して、Oracle Databaseで保持されている顧客プロファイルを保持します。

- 携帯利用者の利用状況計測アプリケーション: TimesTen Cacheを使用して、携帯利用者の利用状況の計測データを保存します。計測データは、サービス・エリア全体に分散した複数のTimesTenデータベースから収集され、中央の通話料金請求アプリケーションが使用する、中央のOracle Databaseで保管されます。

コール・センター・アプリケーション

Advance Call Centerでは、Wireless Communications用の顧客サービスを提供しています。

図2-3は、バックエンド・アプリケーションをホスティングする中央サーバーおよび顧客プロファイルを格納するOracle Databaseがコール・センター・システムに含まれることを示しています。

図2-3 TimesTen CacheノードへのOracle Databaseのデータの動的なロード

大量の同時顧客セッションを管理するために、コール・センターではすでに複数のアプリケーション・サーバー・ノードをデプロイしており、顧客ベースの増加に応じて定期的に追加のノードをデプロイします。各ノードに、TimesTen Cacheデータベースが含まれます。顧客がコール・センターに連絡すると、顧客は利用可能なアプリケーション・サーバー・ノードに自動的にルーティングされ、適切な顧客プロファイルがOracle Databaseからキャッシュ・データベースに動的にロードされます。

顧客がコールを完了すると、顧客プロファイルへの変更がTimesTen CacheデータベースからOracle Databaseにフラッシュされます。最低使用頻度(LRU)に基づいたエージングは、アクティブでない顧客プロファイルをTimesTen Cacheデータベースから削除するように構成されています。

同じ顧客が最初のコール後すぐにコール・センターに再び連絡し、別のアプリケーション・サーバー・ノードに接続された場合、顧客プロファイルは最新のコピーの保存場所に応じて、Oracle Databaseまたは最初のTimesTen Cacheノードから新しいノードに動的にロードされます。TimesTen Cacheでは、最新のコピーの保存場所が特定され、peer-to-peer通信を使用してグリッドの他のTimesTen Cacheデータベースとの間で情報が交換されます。また、ここでは、グリッド内の同じデータに対する同時更新が管理されます。

すべての顧客データがOracle Databaseに格納されています。Oracle Databaseは、TimesTen Cacheデータベースを組み合せたものよりもはるかに大規模であるため、TimesTen Cacheのリアルタイム・パフォーマンスが必要でなく、大容量のデータにアクセスする必要があるアプリケーションでアクセスすることをお薦めします。このようなアプリケーションには、請求書発行アプリケーションやデータ・マイニング・アプリケーションなどがあります。

顧客ベースが増加し、同時にサービスを提供できる顧客数を増やす必要性が高まると、コール・センターでは、追加のアプリケーション・サーバー・ノードをデプロイすることになります。TimesTen Cacheグリッド内の実行中のリクエストを中断することなく、グリッドに新しいTimesTen Cacheメンバーを追加できます。また、個々のノードで障害が発生したり、個々のノードを除外した場合でも、グリッドの他のノードで処理が中断されることはありません。

携帯利用者の利用状況計測アプリケーション

Wireless Communicationsには、携帯の各通話時間と使用されたサービスの記録を保管する、利用状況計測アプリケーションがあります。たとえば、携帯利用者が通常の通話を行うと、通話時間に対して基本料金が適用されます。携帯利用者がローミングなどの特別な機能を利用すると、特別料金が追加されます。

利用状況計測アプリケーションでは、最大100,000の同時通話を効率的に監視し、各通話の利用データを収集し、請求書、報告書、監査などを生成する他のアプリケーションが使用する、中央データベースにデータを保存する必要があります。

この会社は、TimesTen Cacheデータベースを使用して、利用状況計測アプリケーションでただちに必要となる携帯利用者のデータを保存し、その他のデータをOracle Databaseに保存します。また、利用状況計測アプリケーションおよびTimesTen Cacheの複数のインストールを、サービス・エリア全域の個々のノードに分散させます。各利用状況計測アプリケーションが、ODBCダイレクト・ドライバ接続を使用してそのローカルTimesTen Cacheデータベースに接続することで、最大のパフォーマンスが得られます。

図2-4に構成を示します。

図2-4 利用状況データの分散キャッシュ

市外局番で区別される、地理的に異なる位置で開始および終了する通話のリアルタイム処理を行うため、利用状況計測アプリケーションおよびTimesTen Cacheを各ノードにデプロイします。ローカル・ノードでは、通話ごとに通話の開始と終了について個別の記録を保存します。これは、あるノードで開始を検出した携帯の通話が、別のノードで終了を検出されることがあるためです。

収益に影響するトランザクション(挿入および更新)には、永続性が必要となります。データの可用性を確保するには、各TimesTen Cacheデータベースをスタンバイ・データベースにレプリケートします。

顧客が携帯の通話を開始、受信および終了するたびに、アプリケーションはアクティビティの記録をTimesTen CacheデータベースのCalls表に挿入します。各通話記録には、タイムスタンプ、一意識別子、開始ホストのIPアドレスおよび使用されたサービスに関する情報が含まれます。

TimesTen Cacheプロセスによって、Calls表の行が定期的にOracle Databaseにアーカイブされます。通話記録は、Oracle Databaseに正常に保管されると、時間ベースのエージング処理によってTimesTen Cacheデータベースから削除されます。

3 TimesTen Cacheのアーキテクチャとコンポーネント

この章の内容は次のとおりです。

- アーキテクチャの概要

- 共有ライブラリ

- メモリー常駐データ構造

- データベース・プロセス

- 管理プログラム

- チェックポイント・ファイルおよびトランザクション・ログ・ファイル

- キャッシュ・データ

- レプリケーション

- TimesTen接続オプション

アーキテクチャの概要

この項では、TimesTen Application-Tier Database Cache (TimesTen Cache)のアーキテクチャについて説明します。Oracle TimesTen In-Memory Databaseのアーキテクチャは、Oracle Databaseおよびキャッシュ・エージェントが含まれないことを除いて、TimesTen Cacheのアーキテクチャと同じです。図3-1に、TimesTen Cacheのアーキテクチャを示します。

図3-1 TimesTen Application-Tier Database Cacheのアーキテクチャ

アーキテクチャを構成するコンポーネントには、共有ライブラリ、メモリー常駐データ構造、データベース・プロセス、管理プログラムなどがあります。メモリー常駐データ構造には、表、索引、システム表、ロック、カーソル、コンパイルされたコマンド、一時索引などがあります。アプリケーションからTimesTen CacheまたはTimesTenデータベースに接続するには、直接リンクまたはクライアント/サーバー接続を使用します。

レプリケーション・エージェントは、マスター・データベースから情報を受信し、サブスクライバ・データベースに送信します。キャッシュ・エージェントは、TimesTen Cache内のキャッシュ・グループとOracle Databaseのキャッシュ・グループ間のすべての非同期データ転送を実行します。

ここでは、これらのコンポーネントについて説明します。

共有ライブラリ

TimesTen機能を実装するルーチンは、開発者がアプリケーションとリンクし、アプリケーションのプロセスの一部として実行する一連の 共有ライブラリで実現されます。共有ライブラリを使用するこの方法は、アプリケーションが通常クライアント/サーバー・ネットワークを介して接続するデーモン・プロセスのコレクションとして実行される従来のRDBMSとは対照的です。アプリケーションでは、クライアント/サーバー接続を使用してTimesTen CacheまたはTimesTenデータベースにアクセスすることもできますが、ほとんどの場合、直接リンクされたアプリケーションを使用した場合に最高のパフォーマンスを実現できます。詳細は、「TimesTen接続オプション」を参照してください。

メモリー常駐データ構造

実行時には、TimesTen CacheまたはTimesTenデータベース全体がメイン・メモリーに常駐します。これは、オペレーティング・システムによって提供される共有メモリー・セグメントに保持され、すべてのユーザー・データ、索引、システム・カタログ、ログ・バッファおよび一時領域を含みます。複数のアプリケーションで1つのデータベースを共有したり、1つのアプリケーションで同じシステムの複数のデータベースにアクセスすることができます。

データベース・プロセス

TimesTenでは、次のタスクを実行するために各データベースに個別のバックグラウンド・プロセスが割り当てられます。

- ディスク上のチェックポイント・ファイルからメモリーへのデータベースのロード

- データベースのリカバリ(データベースをメモリーにロードした後にリカバリする必要がある場合)

- アクティブなデータベースに対するバックグラウンドでの定期的なチェックポイントの実行

- デッドロックの検出および処理

- データ・エージングの実行

- ファイルへのログ・レコードの書込み

管理プログラム

アクティブでないSQL、バルク・コピー、バックアップとリストア、データベースの移行およびシステムの監視などのサービスを実行するユーティリティ・プログラムは、ユーザー、スクリプトまたはアプリケーションによって明示的に起動されます。

チェックポイント・ファイルおよびトランザクション・ログ・ファイル

チェックポイント・ファイルには、ディスク上の永続記憶域にデータベースのイメージが含まれます。TimesTenでは、チェックポイントの処理中にシステムで障害が発生した場合に備えて、セキュリティの強化のために2つのチェックポイント・ファイルが使用されます。データベースへの変更は、ディスク上の永続記憶域に定期的に書き込まれるトランザクション・ログに記録されます。TimesTenでは、データベースをリカバリする必要がある場合、トランザクション・ログ・ファイルに存続している実行済トランザクションとディスク上の最新のデータベース・チェックポイント・ファイルがマージされます。チェックポイント・ファイルおよびトランザクション・ログ・ファイルには、通常のファイル・システムが使用されます。

詳細は、「データの可用性と整合性」を参照してください。

キャッシュ・データ

TimesTen Cacheを使用して、Oracle Databaseの一部をTimesTenのインメモリー・データベースにキャッシュする場合は、キャッシュ・データを保持するためにキャッシュ・グループが作成されます。

キャッシュ・グループは、主キーと外部キーの関係を使用して論理階層に配置された1つ以上の表の集合です。キャッシュ・グループの各表は、Oracle Database表に関連付けられています。1つのキャッシュ表に、関連付けられているOracle Database表のすべての行と列または行と列のサブセットを格納できます。キャッシュ・グループを作成または変更するには、SQL文またはOracle SQL Developerを使用します。キャッシュ・グループでは、次の機能がサポートされています。

- アプリケーションでは、キャッシュ・グループの読取りおよびキャッシュ・グループへの書込みを行えます。

- キャッシュ・グループをOracle Databaseから自動または手動でリフレッシュできます。

- キャッシュ・グループへの更新をOracle Database表に自動または手動で伝播できます。

- Oracle Database表またはキャッシュ・グループのいずれかへの変更を自動的に追跡できます。

キャッシュ・グループ内の行がアプリケーションによって更新された場合、キャッシュ・グループのタイプに応じて、Oracle Database表内の対応する行を同じトランザクションの一部として同期して更新するか、または直後に非同期で更新することができます。非同期構成を使用すると、スループットが大幅に向上し、アプリケーションのレスポンス時間が非常に短くなります。

最初にOracle Database表で行われた変更は、キャッシュ・エージェントによってキャッシュにリフレッシュされます。

詳細は、「TimesTen Cache」を参照してください。

レプリケーション

TimesTenのレプリケーションでは、2つ以上のホスト間で更新を送信することによって、ほぼ間断なく可用性またはワークロード分散を実現できます。マスター・ホストは更新を送信するように構成され、サブスクライバ・ホストはそれらの更新を受信するように構成されます。双方向レプリケーション・スキームでは、ホストをマスターとサブスクライバの両方にすることができます。時間ベースの競合の検出および解決を実行して、同じデータが同時に複数の場所で更新される場合に備えて優先順位を決定します。

TimesTenで可用性を最大限に高めるには、アクティブ・スタンバイ・ペア構成をお薦めします。これは、TimesTen Cacheのレプリケートに使用できる唯一のレプリケーション構成です。アクティブ・スタンバイ・ペアには、アクティブ・データベース、スタンバイ・データベース、オプションの読取り専用サブスクライバ・データベース、データベースを構成する表およびキャッシュ・グループが含まれます。

レプリケーションを構成すると、同じホスト上に複数のデータベースが存在する場合でも、各データベースに対してレプリケーション・エージェントが起動されます。各レプリケーション・エージェントで、1つ以上のサブスクライバに更新を送信し、1つ以上のマスターから更新を受信することができます。これらの接続は、レプリケーション・エージェント・プロセス内で実行される個別のスレッドとしてそれぞれ実装されます。レプリケーション・エージェントは、TCP/IPストリーム・ソケットを介して通信します。

最高のパフォーマンスを実現するために、レプリケーション・エージェントでは、既存のトランザクション・ログを監視することによってデータベースへの更新が検出されます。また、可能な場合は、サブスクライバへの更新がバッチで送信されます。コミット済のトランザクションのみがレプリケートされます。サブスクライバ・ホストの場合、レプリケーション・エージェントでは、SQLレイヤーのオーバーヘッドが発生しないように効率的な低レベルのインタフェースを介してデータベースが更新されます。

レプリケーションの構成の詳細は、「レプリケーション」を参照してください。

TimesTen接続オプション

アプリケーションは、次のいずれかの方法でTimesTenデータベースに接続できます。

- ダイレクト・ドライバ接続

- クライアント/サーバー接続

- ドライバ・マネージャ接続

ダイレクト・ドライバ接続

従来のデータベース・システムでは、クライアント・アプリケーションではTCP/IPまたは別のIPCメカニズムを使用して、データベース・サーバー・プロセスと通信します。クライアントとサーバー間のすべての送受信は、TCP/IP接続で行われます。このIPCオーバーヘッドにより、すべてのSQL操作でかなりのコストがかかりますが、TimesTenでは、アプリケーションを直接TimesTen ODBCダイレクト・ドライバに接続することで、これを回避できます。

ODBCダイレクト・ドライバは、ODBCおよびTimesTenルーチンのライブラリであり、データベース管理に使用されるデータベース・エンジンを実装します。Javaアプリケーションは、JDBCライブラリを介してODBCダイレクト・ドライバにアクセスします。OCIアプリケーションは、OCIライブラリを介してODBCダイレクト・ドライバにアクセスします。

アプリケーションでは、TimesTen CacheまたはTimesTenデータベースと同じマシン上で実行する場合に、ダイレクト・ドライバ接続を作成できます。ダイレクト・ドライバ接続では、ODBCドライバは、共有メモリー・セグメントにTimesTen CacheまたはTimesTenデータベースを直接ロードします。次に、アプリケーションはダイレクト・ドライバを使用して、データベースのメモリー・イメージにアクセスします。どのような種類のプロセス間通信(IPC)も必要ないため、ダイレクト・ドライバ接続は非常に高速なパフォーマンスを実現し、TimesTen CacheまたはTimesTenデータベースにアクセスするアプリケーションにとって適した接続方法です。

クライアント/サーバー接続

TimesTen ClientドライバおよびServerデーモン・プロセスは、ネットワーク上のリモート・クライアント・マシンからデータベースへの接続を調整します。各クライアントがデータベースに接続するたびに、Serverデーモンはサーバー子プロセスを生成します。

クライアント・マシン上のアプリケーションは、ODBCコール、JDBCコールまたはOCIコールを発行します。これらのコールは、TimesTen Serverマシン上のサーバー子プロセスと通信するローカルODBCクライアント・ドライバにアクセスします。次に、サーバー子プロセスがODBCダイレクト・ドライバにODBC固有のリクエストを発行して、TimesTen CacheまたはTimesTenデータベースにアクセスします。

クライアントとサーバーがネットワーク上の個別のホストに存在する場合は、ソケットとTCP/IPを使用して通信します。クライアントとサーバーの両方が同一マシン上に存在する場合は、共有メモリー・セグメントをIPCとして使用して、より効率的に通信できます。

アプリケーションとデータベースが同一システム上に存在していても、通常、従来のデータベース・システムはこのクライアント/サーバー・モデルで構築されています。クライアント/サーバー通信では、すべてのデータベース処理で追加のコストがかかります。

ドライバ・マネージャ接続

アプリケーションは、ODBCドライバ・マネージャを介してTimesTen CacheまたはTimesTenデータベースに接続できます(このドライバ・マネージャは、アプリケーションとTimesTenデータベース間に抽象レイヤーを追加する、データベースに依存しないインタフェースです)。このため、ドライバ・マネージャを使用すると、アプリケーションをデータベースから独立して動作するように作成したり、TimesTenで直接サポートされないインタフェースを使用するように作成することができます。また、ドライバ・マネージャを使用すると、単一のプロセスではデータベースへのダイレクト接続とクライアント接続の両方が可能となります。

Windows Systemsの場合、アプリケーションでMS ODBCドライバ・マネージャに接続して、他のベンダーのデータソースとともにTimesTen CacheまたはTimesTenデータベースを使用できます。UNIX Systems用のドライバ・マネージャは、オープン・ソース・ソフトウェアとして使用でき、サード・パーティ・ベンダーから入手できます。

詳細情報

TimesTenデータベースの詳細は、『Oracle TimesTen In-Memory Database C開発者ガイド』のODBCでのTimesTenデータベースの使用に関する説明と、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースのデータの使用に関する説明を参照してください。

データベースへの接続の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースの管理に関する説明と、TimesTen ClientおよびServerの使用に関する説明を参照してください。

4 同時操作

データベースが複数のトランザクションによってアクセスされる場合、データベースの同一データの読取りを処理するために、同時に行う変更を調整する方法が必要となります。TimesTenおよびTimesTen Cacheでは、トランザクションの独立性およびロックを使用して、データへの同時アクセスが調整されます。

この章の内容は次のとおりです。

- トランザクションの独立性

- ロック・レベル

トランザクションの独立性

トランザクションの独立性により、データベースへの同時接続が複数あったとしても、システムでは一度に1つのトランザクションを処理するように見えるアプリケーションを実現できます。アプリケーションは、Isolation一般接続属性を使用して、接続の分離レベルを設定できます。同時接続では、異なる分離レベルを使用できます。

分離レベルと同時実行性は反比例します。分離レベルが低いほど、同時実行性は高まりますが、データの非一貫性のリスクが増大します。分離レベルが高いほど、データ一貫性の度合いは高まりますが、同時実行性は損なわれます。

TimesTenでは、次の2つの分離レベルがサポートされています。

- コミット読取り分離レベル

- シリアライズ可能分離レベル

コミット読取り分離レベル

アプリケーションでコミット読取り分離レベルを使用する場合、読取りアクセスで書込みデータの個別のコピーが使用されるため、ロックは必要ありません。コミット読取り分離レベルでは、問合せをブロックせずにシリアライズ可能分離レベルまたはコミット読取り分離レベルとの連携処理が可能です。書込みアクセスは、コミット読取り分離レベルが使用されている読取りアクセスはブロックしません。コミット読取り分離レベルがデフォルトの分離レベルです。コミット読取り分離レベルがデフォルトの分離レベルです。

TimesTenおよびTimesTen Cacheでは、コミット読取り分離レベルの実装にバージョニングが使用されます。TimesTenおよびTimesTen Cacheの更新処理では、待機せずに、更新する行に対してシリアライズ可能でない読取りを続行できるように、それらの行の新しいコピーが作成されます。

図4-1は、あるアプリケーションでデータのコミット済コピーの読取りが行われ、別のアプリケーションでコミットされていないコピーに対して書込みおよび読取りが行われていることを示しています。

図4-1 コミット読取り分離レベル

読取りアクセスは書込みアクセスをブロックせず、書込みアクセスは読取りアクセスをブロックしないため、コミット読取り分離レベルは同時実行性を高めることができます。この分離レベルは、スキャン中の行にアクセスする必要がある他の処理と競合する可能性がある、スキャンの実行時間が長いアプリケーションにとって有効です。ただし、この分離レベルを使用する場合のデメリットは、トランザクション内で、あるいは単一の文(たとえば、ネステッド結合の内部ループ)であっても、複数の非リピータブル・リードが可能であることです。

この分離レベルを使用している場合、表を操作するDDL文は、その表に対する読取りアクセスと書込みアクセスをブロックできます。たとえば、アプリケーションで表の行を読み取ろうとしても、別のアプリケーションにその表に対してコミットしていないDROP TABLE、CREATE INDEX、またはALTER TABLE操作が存在すると、読取りを実行できません。さらに、ブロッキング・チェックポイントによって、読取りアクセスと書込みアクセスがブロックされます。

コミット読取り分離レベルでは、マテリアライズド・ビューとそれらのディテール表との一貫性を保証するために、マテリアライズド・ビューのメンテナンス中に必要となる読取りロックを設定します。これらのロックは、トランザクションの終了まで保持されませんが、かわりにメンテナンスが完了した時点で解放されます。

シリアライズ可能分離レベル

アプリケーションでシリアライズ可能分離レベルを使用する場合、ロックはトランザクション内で取得され、読取りおよび書込みの両方のトランザクションのコミットまたはロールバックまで保持されます。そのため、あるトランザクションで読み取られた行は、そのトランザクションが完了するまで、別のトランザクションから更新または削除することはできません。同様に、あるトランザクションによって挿入、更新または削除された行は、そのトランザクションが完了するまで、別のトランザクションからはアクセスできません。

この分離レベルは、同時実行性を低下させて、トランザクション内のリピータブル・リードと独立性の向上を実現します。データベース・レベル・ロックが選択されている場合、トランザクションでは、シリアライズ可能分離レベルが使用されます。

図4-2は、トランザクションがコミットされるまでロックが保持されることを示しています。

図4-2 シリアライズ可能分離レベル

シリアライズ可能分離レベルは、最強の分離レベルを必要とするトランザクションに有効です。読取りロックはトランザクションがコミットするまで保持されるため、トランザクションによって読み取られるデータを変更する必要がある同時実行アプリケーションでは、ロック・タイムアウトが発生する可能性があります。

ロック・レベル

ロックは、リソースへのアクセスをシリアライズして、あるユーザーによって参照中または変更中の要素が別のユーザーによって同時に変更されるのを防ぐために使用されます。TimesTenおよびTimesTen Cacheでは、すべてのデータベース・アクセスに対してロックが自動的に実行されます。

- 共有ロックでは、操作の種類に応じて、関連するリソースの共有が可能です(そのため、共有されている行、表またはビューを変更したり削除する必要はありません)。複数のトランザクションが同じリソースについて共有ロックを取得できます。

- 排他ロックでは、データベースでアクティブなトランザクションが常に1つしか存在しないようにします。このロックは、リソースがデータ変更のために共有されて取得されることを防止します。リソースを排他的にロックした最初のトランザクションは、トランザクションが完了してその排他ロックが解除されるまで、そのリソースを変更できる唯一のトランザクションになります。

シリアライズ可能トランザクションは、これらのトランザクションで読み取るアイテムに対して共有ロックを、これらのトランザクションで書き込むアイテムに対して排他ロックを取得します。これらのロックは、トランザクションがコミットまたはロールバックされるまで保持されます。コミット読取りトランザクションは、これらのトランザクションで書込みアイテムに対して排他ロックを取得し、トランザクションがコミットされるまでこれらのロックを保持します。コミット読取りトランザクションは、これらのトランザクションで読み取るアイテムに対してロックを取得しません。トランザクションをコミットまたはロールバックすると、すべてのカーソルが閉じられ、トランザクションによって保持されていたすべてのロックが解除されます。

TimesTenおよびTimesTen Cacheはデッドロック検出を行って、デッドロックの状況をレポートし、削除します。デッドロックのエラーが原因でロックを拒否された場合、アプリケーションはトランザクション全体をロールバックして再試行する必要があります。

アプリケーションでは、次の3つのロック・レベルから選択できます。

- データベース・レベル・ロック

- 表レベル・ロック

- 行レベル・ロック

データベース・レベル・ロック

データベース・レベル・ロックは、トランザクションによるアクセス時にデータベース全体をロックします。すべてのデータベース・レベル・ロックは排他的です。データベース・レベル・ロックを必要とするトランザクションは、データベースにアクティブなトランザクションがなくなるまで開始できません。トランザクションでデータベース・レベル・ロックが取得されると、そのトランザクションがコミットまたはロールバックされるまで、他のすべてのトランザクションはブロックされます。

データベース・レベル・ロックは、表レベル・ロックより同時実行性を制限されるため、同時実行性が不要な場合にバルク・ロードなどの初期化処理でのみ有効です。データベース・レベル・ロックを使用すると、同時実行性およびスループットは低下しますが、行レベル・ロックまたは表レベル・ロックよりレスポンス時間が向上します。

異なるトランザクションは、異なるレベルのロックと共存できますが、データベース・レベル・ロックを使用しているトランザクションが1つでも存在すると、同時実行性が低下します。

データベース・レベル・ロックを実装するには、LockLevel一般接続属性またはttLockLevel組込みプロシージャを使用します。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttLockLevelに関する説明を参照してください。

表レベル・ロック

表レベル・ロックは、トランザクションによってアクセスされている表をロックします。文が表内のほとんどの行にアクセスする場合に有効です。アプリケーションで、ttOptSetFlag組込みプロシージャをコールして、オプティマイザで表ロックが使用されるようにリクエストできます。オプティマイザによって、表ロックが使用されるタイミングが決定されます。

注意:
詳細は、『Oracle TimesTen In-Memory Databaseリファレンス・ガイド』のttOptSetFlagに関する説明を参照してください。

表ロックは、スループットを低下させる可能性があるため、表の大部分をロックする必要がある場合または同時実行性が不要な場合にのみ使用します。たとえば、バルク更新などの処理では、表をロックできます。コミット読取り分離レベルの場合、TimesTenおよびTimesTen Cacheでは、アプリケーションによって明示的にリクエストされていないかぎり、読取り操作に対して表レベル・ロックは使用されません。

行レベル・ロック

行レベル・ロックは、トランザクションによってアクセス中の行のみをロックします。同時実行トランザクションが同一表の行にアクセスできるようにすることで、最高の同時実行性を実現できます。行レベル・ロックは、同時実行トランザクションが多数あり、それぞれが同一表の異なる行で処理中の場合に最適です。

アプリケーションでは、LockLevel一般接続属性、ttLockLevel組込みプロシージャおよびttOptSetFlag組込みプロシージャを使用して、行レベル・ロックを管理できます。

注意:
詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttLockLevelに関する説明とttOptSetFlagに関する説明を参照してください。

詳細情報

ロックおよびトランザクションの独立性の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクション管理に関する説明を参照してください。

5 問合せの最適化

TimesTenおよびTimesTen Cacheはコスト・ベースの問合せオプティマイザを備えています。オプティマイザは、最適な方法を自動的に検索して問合せに応答することで、効率的なデータ・アクセスを保証します。最適化はコンパイル・プロセスの第3段階目で行われます。図5-1に、コンパイルの段階を示します。

図5-1 コンパイルの段階

オプティマイザの役割は、問合せの実行に対して最も低コストの計画を判断することです。最も低コストの計画とは、データへの到達時間が最短となるアクセス・パスを意味します。複数の実行計画が可能な場合、TimesTenによってSQL文用のオプティマイザが起動されます。オプティマイザは、最適と判断した計画を選択します。この計画は、文がアプリケーションによって無効にされるか削除されるまで保持されます。

オプティマイザでは、次の情報に基づいて計画のコストを判断します。

- 表と列の統計情報

- メタデータ情報(参照整合性、主キーなど)

- 索引の選択(一時索引の自動作成を含む)

- スキャン方法(全表スキャン、ROWID参照、範囲索引スキャン、ビットマップ索引参照、ハッシュ索引参照)

- 結合アルゴリズムの選択(ネステッド・ループ結合、索引付きネステッド・ループ結合、マージ結合)

この章の内容は次のとおりです。

- 最適化時間とメモリーの使用

- 統計

- オプティマイザ・ヒント

- 索引

- スキャン方法

- 結合方法

- オプティマイザ計画

最適化時間とメモリーの使用

オプティマイザは、適切な時間とメモリー制約内で実現可能な最高の計画の生成を目的に設計されています。すべての問合せに対して最適な計画を常に選択するオプティマイザは存在しませ。オプティマイザの目的は、計画の検索領域内で最も有効な可能性が高い領域を検出する方法を使用して、生成された一連の計画から最適な計画を選択することです。最適化は通常、問合せごとに1回のみであるのに対して、問合せ自体は何度も実行されることがあるため、オプティマイザは最適化時間よりも実行時間を優先するように設計されています。

オプティマイザの生成する計画では、メモリーの使用よりパフォーマンスが重視されます。オプティマイザによって、実行を高速化するために、大量の一時メモリー空間を使用するように指示される可能性があります。メモリー制約のある環境では、「オプティマイザ・ヒント」で説明するオプティマイザ・ヒントをアプリケーションで使用して、一時索引と一時表の使用を禁止し、パフォーマンスを最大化せずにメモリーの使用を節約する計画を作成することもできます。

統計

問合せの実行パスを判断する際に、オプティマイザは表の行数などの問合せで参照されるデータ、条件で使用される列の間隔の統計における最小値、最大値および一意の値の数、表内の主キーの有無、既存の索引のサイズと構成などに関する統計を調べます。これらの統計は、アプリケーションがttIsql statsupdateコマンド、ttOptUpdateStatsまたはttOptEstimateStats組込みプロシージャを呼び出したときに移入されるSYS.TBL_STATSおよびSYS.COL_STATS表に格納されます。

オプティマイザは各表の統計を使用して、t1.a=4のような条件、またはt1.a=4 AND t1.b<10のような条件の組合せの選択性を計算します。選択性とは、表に含まれる行数を測定したものです。割合の小さい行を選択する条件は選択性が高く、割合の大きい行を選択する条件は選択性が低いと言えます。

オプティマイザ・ヒント

ヒントを適用して、TimesTen問合せオプティマイザに指示を渡すことができます。問合せに対して最適な実行計画を選択するとき、オプティマイザではこれらのヒントが考慮されます。次のようにヒントを適用できます。

- 特定のSQL文のみにヒントを適用するには、文レベルのオプティマイザ・ヒントを使用します。

- トランザクション全体にヒントを適用するには、適切なTimesTen組込みプロシージャとともにトランザクション・レベルのオプティマイザ・ヒントを使用します。

索引

問合せオプティマイザは、索引を使用して問合せの実行を高速化します。オプティマイザは、既存の索引を使用するか、一時索引を作成して、実行計画を生成します。索引とは、表の行の位置を示すキーのマップです。TimesTenシステムから最大のパフォーマンスを引き出すには、索引を戦略的に使用することが必須になります。

TimesTenでは、次のタイプの索引を使用します。

- ハッシュ索引: ハッシュ索引は、1つ以上の列で完全一致する行を検索する場合に有効です。範囲索引は、一意の索引または一意でない索引として指定できます。通常、完全一致参照と等価結合については、ハッシュ索引の方が範囲索引より高速です。ただし、範囲またはキーの接頭辞を含む参照ではハッシュ索引を使用できません。また、ハッシュ索引では範囲索引およびビットマップ索引より多くの領域が必要になる可能性があります。

- 範囲索引: 範囲索引は、列の値が等価または非等価として指定された範囲内にある行を検出する場合に有効です。範囲索引は、表の1つ以上の列にわたって作成できます。範囲索引は、一意の索引または一意でない索引として指定できます。CREATE INDEX SQL文を使用して索引を作成する際に索引タイプを指定しないと、範囲索引が作成されます。

- ビットマップ索引: ビットマップ索引では、行内の一意の値に関する情報がビットマップにエンコードされます。ビットマップの各ビットが表の行に対応します。ビットマップ索引は、一意の値がそれほど多くない列に使用します。このような列の例として、性別を2つの値のいずれかとして記録する列があげられます。ビットマップ索引は、データ・ウェアハウス環境で広く使用されています。この環境では、通常、データおよび非定型の問合せは大量にありますが、同時DMLトランザクションは低いレベルです。ビットマップ索引は圧縮され、必要な記憶域が他の索引付けテクニックよりも少なくなります。

索引アドバイザ・ツールを使用して、特定のSQLワークロードのパフォーマンスを向上できる一連の索引を推奨できます。詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の索引アドバイザを使用した索引の推奨に関する説明を参照してください。

スキャン方法

オプティマイザは複数のタイプのスキャン方法から選択できます。最も一般的なスキャン方法は次のとおりです。

- 全表スキャン

- ROWID参照

- 範囲索引スキャン(永続索引または一時索引のいずれか)

- ハッシュ索引参照(永続索引または一時索引のいずれか)

- ビットマップ索引参照(永続索引)

TimesTenおよびTimesTen Cacheでは、ハッシュ索引、ビットマップ索引およびROWID参照を介して高速に完全一致処理が実行されます。また、範囲索引を介して範囲一致処理が実行されます。問合せ計画の選択時にオプティマイザによる特定のスキャン方法についての検討を実行可能または実行不可にするには、オプティマイザ・ヒントを使用します。

全表スキャンでは、表内のすべての行が調べられます。全体スキャンは、問合せ条件を評価する最も非効率的な方法であるため、他の方法を使用できない場合にのみ使用されます。

TimesTenでは、表に保存される各行にROWIDという名前の一意IDを割り当てます。たとえば、アプリケーションで以前にROWIDを選択し、次にWHERE ROWID=句を使用して同じ行をフェッチする場合に、ROWID参照が適用可能です。ROWID参照は索引参照より高速です。

範囲索引スキャンでは、範囲索引を使用して表にアクセスします。このようなスキャンは、条件に使用する列に範囲索引が定義されている場合にのみ、t1.a=2などの完全一致条件またはt1.a>2やt1.a<10などの範囲条件に適用できます。範囲索引が複数の列にわたって定義されている場合は、複数の列条件にその範囲索引を使用できます。たとえば、列t1.bおよびt1.cに範囲索引が定義されている場合、条件t1.b=100およびt1.c>'ABC'は範囲索引スキャンになります。索引は、複数の列にわたって定義されている場合でも使用できます。たとえば、t1.b、t1.cおよびt1.dに範囲索引が定義されている場合、オプティマイザでは、列bおよびcの索引の接頭辞を使用し、列bおよびcに指定された条件に一致する列dのすべての値が返されます。

ハッシュ索引参照では、ハッシュ索引を使用して1つ以上の列で完全一致する行が検出されます。このような参照は、指定した1つ以上の列における等価検索に適用されます。

ビットマップ索引参照では、ビットマップ索引を使用して、customer.gender='male'などの等価条件を満たす行が検出されます。ビットマップ索引は、一意の値がほとんどない列に適しています。特に、それぞれがビットマップ索引参照を使用できる複数の条件を評価する場合に有効です。これは、組み合せられた条件が、索引自体に対するビット演算を介して効率的に評価できるためです。たとえば、表customerで列genderにビットマップ索引が定義され、表sweaterで列colorにビットマップ索引が定義されている場合、条件customer.gender='male'およびsweater.color='pink'を指定すると、この2つのビットマップ索引に対して論理積演算が実行され、ピンクのセーターを購入したすべての男性客が迅速に検出されます。

結合方法

オプティマイザは複数の結合方法のいずれかを選択できます。2つの表の行を結合する場合は、一方の表を外部表、他方の表を内部表に指定します。オプティマイザは、どちらの表を外部表にしてどちらを内部表にするかを決定します。結合中に、オプティマイザは外部表と内部表の行をスキャンして、結合条件に一致する行を検索します。

オプティマイザは各表の統計を分析します。たとえば、オプティマイザは、最小の表、または問合せについて最高の選択性を持つ表を外部表として識別します。結合する1つ以上の表に索引が存在する場合、オプティマイザでは外部表と内部表を選択する際にそれらを考慮します。

3つ以上の表を結合する場合、オプティマイザは表のペアについて様々な結合の組合せを分析し、最初に結合するペア、次にその結合の結果によって結合する表など、最適な結合の順序を判断します。

結合のコストは、内部表と外部表にアクセスして、結合条件に一致する行を検索する方法に大きく影響されます。オプティマイザは、問合せオプティマイザ計画を決定する際に2つの結合方法から選択します。

- ネステッド・ループ結合

- マージ結合

ネステッド・ループ結合

索引のないネステッド・ループ結合では、外部表の行が一度に1行ずつ選択され、内部表のすべての行と一致するか確認されます。内部表のすべての行が、外部表の行数と同じ回数スキャンされます。内部表の結合列に索引がある場合、その索引は結合条件を満たす行の選択に使用されます。各表から結合条件を満たす行が返されます。処理中に、索引がネステッド・ループの内部表に対して作成され、内部スキャンの結果が結合の前にマテリアライズされる可能性があります。

図5-2に、ネステッド・ループ結合の例を示します。結条件は次のとおりです。

WHERE t1.a=t2.a

この例では、オプティマイザはt1が外部表、t2が内部表と決定しています。表t2内の列aの値と一致している表t1内の列aの値は1および7です。結合の結果、t1およびt2の行が連結されます。たとえば、最初の結合結果は次の行になります。

7 50 43.54 21 13.69

次のt1の行が連結されます。

7 50 43.54

列aの値が一致しているt2の最初の行を次に示します。

7 21 13.69

図5-2 ネステッド・ループ結合

マージ結合

マージ結合は、結合列が範囲索引でソートされる場合にのみ使用されます。マージ結合では、カーソルが各索引を一度に1行ずつ進みます。行はすでに各索引の結合列でソートされているため、簡単な式を適用することにより、単一のスキャンでカーソルが各行を効率的に進みます。式は次のようになります。

- 内部.結合列 < 外部.結合列の場合、内部カーソルを進める

- 内部.結合列 = 外部.結合列の場合、一致を読み取る

- 内部.結合列 > 外部.結合列の場合、外部カーソルを進める

ネステッド・ループ結合と異なり、外部表の各行について内部表全体をスキャンする必要はありません。マージ結合が使用できるのは、問合せを準備する前に表に範囲索引が作成されている場合です。問合せを準備する前に、結合する表に範囲索引が存在しない場合、状況によっては、オプティマイザがマージ結合を使用するために、一時範囲索引を作成する可能性もあります。

図5-3に、マージ結合の例を示します。結条件は次のとおりです。

WHERE t1.a=t2.a

x1は、表t1の索引を列aでソートしたものです。x2は、表t2の索引を列aでソートしたものです。マージ結合の結果、x1の行は、列aの値が一致するx2の行と連結されます。たとえば、最初のマージ結合の結果は次のようになります。たとえば、最初のマージ結合の結果は次のようになります。

1 20 23.09 20 43.59

次のx1の行が連結されます。

1 20 23.09

列aの値が一致しているx2の最初の行を次に示します。

1 20 43.59

図5-3 マージ結合

オプティマイザ計画

多くのデータベース・オプティマイザと同様に、問合せオプティマイザは最も効率的なSQL処理方法の詳細を問合せ実行計画に保存し、アプリケーション開発者と管理者は、これを確認してカスタマイズできます。

実行計画のデータは、TimesTenのSYS.PLAN表に保存され、アクセスする表とその順序、結合する表、使用する索引に関する情報を含みます。ttSqlCmdQueryPlan組込みプロシージャまたはttIsql explainコマンドのいずれかを使用して、最近実行されたSQL文の問合せ計画を表示できます。ユーザーは計画生成オプティマイザ・ヒントを使用して、SYS.PLAN表での実行計画の作成を有効または無効にするように問合せオプティマイザに指示できます。(トランザクション・レベルのヒントの場合は、ttOptSetFlag組込みプロシージャでGenPlanオプティマイザ・フラグを使用し、文レベルのヒントの場合は、SQL文でTT_GenPlanヒントを使用します。)

実行計画は、実行するデータベース処理ごとに個別の手順を指定して、問合せを実行します。計画内の手順は複数のレベルに編成されます。レベルでは、次のレベルの1つ以上の手順で必要となる結果を生成するために完了する必要がある手順を指定します。

次の問合せについて考えてみます。

SELECT COUNT(*)
FROM t1, t2, t3
WHERE t3.b/t1.b > 1
AND t2.b <> 0
AND t1.a = -t2.a
AND t2.a = t3.a;

この例では、図5-4に示すように、オプティマイザは問合せを個別の操作に分解し、3つのレベルで実行される5つの手順を生成します。

図5-4 実行計画の例

詳細情報

問合せオプティマイザの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenの問合せオプティマイザに関する説明を参照してください。

索引の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の索引の理解に関する説明を参照してください。

『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の"CREATE TABLE"文および"CREATE INDEX"文の説明も参照してください。

6 データの可用性と整合性

TimesTenおよびTimesTen Cacheでは、次の仕組みを使用することによって、データの可用性、永続性および整合性を保証しています。

- トランザクション・ロギング

- チェックポイント

- レプリケーション

トランザクション・ロギング

TimesTenまたはTimesTen Cacheのトランザクション・ログは次の目的で使用されます。

- システム障害が発生した場合に、トランザクションを再実行する。

- ロールバックされるトランザクションを取り消す。

- 他のTimesTenデータベースまたはTimesTen Cacheデータベースに変更をレプリケートする。

- Oracle Databaseに変更をレプリケートする。

- アプリケーションでXLAインタフェースを介した表への変更を監視できるようにする。

トランザクション・ログはディスク上のファイルに保存されます。トランザクション・ログの末尾はインメモリー・バッファに存在します。

ディスクへのログ・バッファの書込み

TimesTenおよびTimesTen Cacheでは、永続コミットごと、チェックポイントごとおよび実装によって定義されているタイミングで、インメモリーのログ・バッファの内容がディスク上のトランザクション・ログ・ファイルに書き込まれます。障害の発生時にコミット済のトランザクションの損失が許容されないアプリケーションでは、読取り専用でないすべてのトランザクションに対して、永続コミットをリクエストする必要があります。この場合、データベースに接続するときに、DurableCommits一般接続属性を1に設定します。

最近コミットした一部のトランザクションの損失が許容されるアプリケーションでは、トランザクションの一部または全部を非永続的にコミットすることによって、パフォーマンスを大幅に向上させることができます。この場合、DurableCommits一般接続属性を0(デフォルト)に設定し、通常、定期的な時間間隔またはアプリケーション・ロジックの特定の時点で明示的に永続コミットをリクエストします。永続コミットをリクエストするには、アプリケーションでttDurableCommit組込みプロシージャをコールします。

トランザクション・ログ・ファイルが削除される状況

トランザクション・ログ・ファイルは、TimesTenまたはTimesTen Cacheで消去可能と宣言されるまで保持されます。トランザクション・ログ・ファイルは、次のすべての処理が完了するまで消去できません。

- トランザクション・ログ・ファイル(または前のトランザクション・ログ・ファイル)にログ・レコードを書き込むすべてのトランザクションが、コミットまたはロールバックされる。

- トランザクション・ログ・ファイルに記録されたすべての変更が、チェックポイント・ファイルに書き込まれる。

- トランザクション・ログ・ファイルに記録されたすべての変更が、レプリケートされる(レプリケーションが使用されている場合)。

- トランザクション・ログ・ファイルに記録されたすべての変更が、Oracle Databaseに伝播される(TimesTen Cacheの動作がこのように構成されている場合)。

- トランザクション・ログ・ファイルに記録されたすべての変更が、XLAアプリケーションにレポートされる(XLAが使用されている場合)。

TimesTenコミット

ODBCでは、各文の後にコミットを強制する 自動コミット・モードが提供されます。デフォルトでは自動コミットが有効になり、文の実行に成功した直後に暗黙的コミットが発行されます。コミットを意図的に行うように自動コミットを無効にすることをお薦めします。

TimesTenでは、デフォルトで、データ定義言語(DDL)文の前後に暗黙的コミットが発行されます。この動作は、DDLCommitBehavior一般接続属性によって制御されます。この属性を使用すると、DDL文を現在のトランザクションの一部として実行し、トランザクションの残りの部分とともにコミットまたはロールバックできます。

チェックポイント

チェックポイントは、データベースのスナップショットを保持するために使用されます。システム障害が発生した場合、TimesTenおよびTimesTen Cacheでは、トランザクション・ログ・ファイルとともにチェックポイント・ファイルを使用して、トランザクションの一貫性が保たれていた最後の状態にデータベースをリストアできます。

最後のチェックポイント処理以降に変更されたデータのみが、チェックポイント・ファイルに書き込まれます。チェックポイント処理では、最後のチェックポイント以降に変更されたブロックのデータベースをスキャンします。次に、それらの変更についてチェックポイント・ファイルを更新し、不要なトランザクション・ログ・ファイルを削除します。

TimesTenおよびTimesTen Cacheでは、次の2種類のチェックポイントが提供されます。

- 非ブロッキング・チェックポイント

- ブロッキング・チェックポイント

TimesTenおよびTimesTen Cacheでは、非ブロッキング・チェックポイントが自動的に作成されます。

非ブロッキング・チェックポイント

TimesTenおよびTimesTen Cacheでは、非ブロッキング・チェックポイントがバックグラウンドで自動的に開始されます。非ブロッキング・チェックポイントはファジー・チェックポイントと呼ばれることもあります。このチェックポイントの頻度はアプリケーションで調整できます。非ブロッキング・チェックポイントでは、データベースのロックが必要ないため、チェックポイントの処理中に、複数のアプリケーションが同じデータベースでトランザクションを非同期にコミットまたはロールバックできます。

ブロッキング・チェックポイント

トランザクション一貫性チェックポイントを構成するために、アプリケーションでttCkptBlocking組込みプロシージャをコールして、ブロッキング・チェックポイントを開始できます。ブロッキング・チェックポイントの処理中、他の新しいトランザクションはチェックポイント・トランザクションの後のキューに入れられます。長時間実行するトランザクションがあると、他の多数のトランザクションを待機させることとなります。チェックポイントの記録にはリカバリに必要な情報が含まれているため、ブロッキング・チェックポイントからのリカバリにログは必要ありません。

ログおよびチェックポイント・ファイルからのリカバリ

システム障害やプロセス障害によって、データベースが無効になったり破損したりすると、データベースへのすべての接続が無効になります。アプリケーションが障害のあったデータベースに再接続すると、サブデーモンがデータベースに新しいメモリー・セグメントを割り当て、チェックポイント・ファイルおよびトランザクション・ログ・ファイルからそのデータをリカバリします。

リカバリ中に、最新のチェックポイント・ファイルがメモリーに読み込まれます。最後のチェックポイント以降にコミットされ、ログ・レコードがディスク上に存在するすべてのトランザクションが、適切なトランザクション・ログ・ファイルからロールフォワードされます。ただし、このようなトランザクションには、永続的にコミットされたすべてのトランザクションのみでなく、ログ・レコードが/インメモリー・ログ・バッファからエージ・アウトされたすべてのトランザクションも含まれることに注意してください。コミットされていないトランザクション、またはロールバックされたトランザクションはリカバリされません。

障害発生時も絶えずTimesTenデータにアクセスする必要のあるアプリケーションについては、「レプリケーション」を参照してください。

レプリケーション

レプリケーションの重要な目的は、パフォーマンスへの影響を最小限に抑えて、アプリケーションのデータの可用性を高めることにあります。障害リカバリにおける役割の他に、レプリケーションは、アプリケーション・ワークロードを複数のデータベースに分散してパフォーマンスを最大化させたり、オンライン・アップグレードとメンテナンスを容易にする場合にも有効です。

レプリケーションとは、データをマスター・データベースからサブスクライバ・データベースにコピーするプロセスのことです。マスターおよびサブスクライバの各データベースのレプリケーションは、TCP/IPストリーム・ソケットを介して通信するレプリケーション・エージェントによって制御されます。マスター・データベースのレプリケーション・エージェントは、マスター・データベースのトランザクション・ログからレコードを読み取ります。レプリケートされた要素への変更をサブスクライバ・データベースのレプリケーション・エージェントに転送します。その後、サブスクライバ・データベースのレプリケーション・エージェントが、それらの更新をサブスクライバ・データベースに適用します。マスター・エージェントは、更新転送時にサブスクライバ・エージェントが稼働していない場合、サブスクライバで適用可能になるまでそれらの更新をトランザクション・ログに保持します。

データベースの作成時にパラレル・レプリケーションを構成することで、レプリケーションのスループットを向上できます。パラレル・レプリケーションはデフォルトで有効になっています。サブスクライバに更新を適用するためのスレッド数を構成します。更新はコミット順に転送されます。

TimesTenで可用性を最大限に高めるには、アクティブ・スタンバイ・ペア構成をお薦めします。これは、TimesTen Cacheのレプリケートに使用できる唯一のレプリケーション構成です。

この項の後半の内容は次のとおりです。

- アクティブ・スタンバイ・ペア

- クラシック・レプリケーション構成

- 非同期およびRETURNサービス・レプリケーション

- レプリケーションのフェイルオーバーおよびリカバリ

- アクティブ・スタンバイ・ペアのレプリケーションの自動クライアント・フェイルオーバー

アクティブ・スタンバイ・ペア

アクティブ・スタンバイ・ペアには、アクティブ・データベース、スタンバイ・データベース、オプションの読取り専用サブスクライバ・データベース、データベースを構成する表およびキャッシュ・グループが含まれます。図6-1に、アクティブ・スタンバイ・ペアを示します。

図6-1 アクティブ・スタンバイ・ペア

アクティブ・スタンバイ・ペアでは、2つのデータベースがマスターとして定義されます。1つは、アクティブ・データベースで、もう1つはスタンバイ・データベースです。アクティブ・データベースは直接更新されます。スタンバイ・データベースは、直接更新できません。これは、アクティブ・データベースからの更新を受信し、それらの変更を読取り専用サブスクライバに伝播します。この構成では、スタンバイ・データベースが読取り専用サブスクライバより常に先行し、アクティブ・データベースで障害が発生した場合は、スタンバイ・データベースに即時にフェイルオーバーできます。

1つのマスター・データベースのみが、特定の時間にアクティブ・データベースとして機能できます。アクティブ・データベースで障害が発生した場合は、障害が発生したデータベースをスタンバイ・データベースとしてリカバリする前に、スタンバイ・データベースのロールをアクティブに変更する必要があります。新しいスタンバイ・データベースで、レプリケーション・エージェントを起動する必要があります。

スタンバイ・データベースで障害が発生した場合は、アクティブ・データベースから読取り専用サブスクライバに変更を直接レプリケートします。スタンバイ・データベースは、リカバリ後、アクティブ・データベースに接続し、スタンバイ・データベースの停止またはリカバリ中に読取り専用サブスクライバに送信された更新を受信します。アクティブ・データベースとスタンバイ・データベースで同期が取られている場合、スタンバイ・データベースは、サブスクライバへの変更の伝播を再開します。

アクティブ・スタンバイ・レプリケーションをTimesTen Cacheとともに使用すると、層をまたいだ高可用性を実現できます。アクティブ・スタンバイ・レプリケーションは、読取り専用キャッシュ・グループおよび非同期のWRITETHROUGHキャッシュ・グループの両方で使用可能です。読取り専用キャッシュ・グループとともに使用する場合、更新はOracle Databaseからアクティブ・データベースに送信されます。つまり、この構成のOracle Databaseは、アプリケーションの役割を果たします。同期のWRITETHROUGHキャッシュ・グループとともに使用する場合、スタンバイ・データベースはアクティブ・データベースから受信した更新をOracle Databaseに伝播します。この場合、Oracle Databaseは読取り専用サブスクライバの役割を果たします。

これらのタイプのキャッシュ・グループのいずれかをレプリケートするアクティブ・スタンバイ・ペアでは、フェイルオーバーを実行できるため、データ損失を最小限に抑えて自動的にリカバリを実行できます。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のキャッシュ・グループを使用するアクティブ・スタンバイ・ペアに関する説明を参照してください。

クラシック・レプリケーション構成

TimesTenレプリケーション・アーキテクチャには、パフォーマンスおよび可用性のバランスをとることのできる十分な柔軟性が備えられています。通常、マスターから1つ以上のサブスクライバへの単方向、またはマスターとサブスクライバの両方として機能する2つ以上のデータベース間の双方向になるよう、クラシック・レプリケーションを構成できます。

単方向レプリケーション

図6-2に、単方向レプリケーション・スキームを示します。アプリケーションが両方のホストに構成され、マスター・ホストで障害が発生した場合にはサブスクライバが処理を引き継ぎます。マスター・ノードが稼働中の場合、アプリケーションからマスター・データベースへの更新がサブスクライバ・データベースにレプリケートされます。サブスクライバ・ホスト上のアプリケーションはサブスクライバ・データベースに対する更新は実行しませんが、サブスクライバ・データベースからの読取りを行うことがあります。マスターで障害が発生した場合、サブスクライバ・ホスト上のアプリケーションは更新機能を引き継ぎ、サブスクライバ・データベースの更新を開始します。

図6-2 単方向レプリケーション・スキーム

レプリケーションは、更新を1つのマスター・データベースから多くのサブスクライバ・データベースにコピーする場合にも使用できます。図6-3に、複数のサブスクライバが存在するレプリケーション・スキームを示します。

図6-3 複数のサブスクライバへの単方向レプリケーション

図6-4に、伝播の構成を示します。1つのマスターによって、3つのサブスクライバに更新が伝播されます。これらのサブスクライバは、さらに他のサブスクライバへ更新を伝播するマスターでもあります。

図6-4 伝播の構成

双方向レプリケーション

双方向レプリケーション・スキームは、ロード・バランシングに使用されます。2つの双方向レプリケーション・データベース間でワークロードを分割できます。ロード・バランシングの構成には、2つの基本タイプがあります。

- 分割ワークロードでは、各データベースがそのデータの一部を他のデータベースに双方向でレプリケートします。図6-5に、分割ワークロードの構成を示します。

- 分散ワークロードでは、ユーザーのアクセスは、相互に更新をレプリケートする二重化アプリケーション/データベースの組合せに分散されます。分散ワークロード構成では、アプリケーションで作業を2つのシステム間で分割して、レプリケーションの衝突が発生しないようにする必要があります。衝突が発生した場合、TimesTenにはタイムスタンプ・ベースの衝突検出と問題解消の機能があります。図6-6に、分散ワークロードの構成を示します。

図6-5 分割ワークロード・レプリケーション

図6-6 分散ワークロード・レプリケーション

非同期およびRETURNサービス・レプリケーション

TimesTenレプリケーションは、デフォルトでは非同期メカニズムになります。非同期レプリケーションを使用する場合、アプリケーションは、マスター・データベースを更新すると、サブスクライバがその更新を受信するまで待機せずに処理を続行します。マスターおよびサブスクライバのデータベースには、サブスクライバが更新を正常に受信およびコミットしたことを確認するための内部メカニズムがあります。これらのメカニズムは、更新がサブスクライバで1回のみ適用されることを保証しますが、アプリケーションでは透過的です。

非同期レプリケーションは最高のパフォーマンスを実現しますが、アプリケーションは、サブスクライバ上のレプリケートされた要素の受信プロセスと完全に切り離されます。また、TimesTenでは、レプリケートされたデータがマスター・データベースとサブスクライバ・データベース間で一貫していることをより高いレベルで保証する必要があるアプリケーションに、2つのRETURNサービス・オプションを提供します。

- RETURN RECEIPTサービスでは、サブスクライバ・レプリケーション・エージェントが更新を受信したことがレプリケーションで確認されるまでアプリケーションをブロックすることによって、アプリケーションをレプリケーション・メカニズムと同期化します。

- RETURN TWOSAFEサービスでは、サブスクライバが更新を受信およびコミットしたことがレプリケーションで確認されるまでアプリケーションをブロックすることによって、完全な同期レプリケーションが可能です。

注意:
RETURN TWOSAFEサービスを分散ワークロード構成で使用しないでください。デッドロックが発生する可能性があります。

RETURNサービスを使用するアプリケーションでは、パフォーマンスは低下しますが、マスター・データベースとサブスクライバ・データベース間でのより高いレベルの一貫性が保証され、トランザクションが失われる可能性が軽減されます。このアプリケーションでは、マスターで障害が発生した場合でも、マスターでコミットされたトランザクションがサブスクライバ・データベースに保持されることが高度なレベルで保証されます。RETURN RECEIPTのレプリケーションでは、トランザクションが失われる可能性を低くすることによって、RETURN TWOSAFEのレプリケーションよりパフォーマンスへの影響が小さくなっています。

レプリケーションのフェイルオーバーおよびリカバリ

パフォーマンスに及ぼす影響を最小限に抑え、アプリケーションのデータの可用性を高めるには、できるかぎりシームレスに、障害のあったデータベースから、保持されているそのバックアップにアプリケーションを移動することが必要になります。

Oracle Clusterwareを使用すると、アクティブ・スタンバイ・ペアを使用するシステムにおける障害を自動的に管理できます。その他の種類のレプリケーション・スキームを管理するには、カスタムまたはサード・パーティのクラスタ・マネージャを使用します。クラスタ・マネージャは障害を検出し、障害が発生したデータベースからスタンバイ・データベースまたはサブスクライバにユーザーまたはアプリケーションをリダイレクトし、障害が発生したデータベースのリカバリを管理します。クラスタ・マネージャまたは管理者は、TimesTenのユーティリティおよび関数を使用して、障害の発生していないデータベースを複製し、障害の発生したデータベースをリカバリできます。

通常、サブスクライバの障害は、マスター・データベースに接続したアプリケーションに影響を及ぼすことはなく、ユーザー・サービスを中断させることなくリカバリできます。マスター・データベースで障害が発生した場合、サービスを中断させずに、または最小限の中断でサービスを継続するために、クラスタ・マネージャはアプリケーション負荷をスタンバイ・データベースまたはサブスクライバにリダイレクトする必要があります。

アクティブ・スタンバイ・ペアのレプリケーションの自動クライアント・フェイルオーバー

クライアント/サーバー接続によるアクティブ・スタンバイ・ペアを使用するデータベースに対して、自動クライアント・フェイルオーバーを構成できます。これにより、クライアントは、スタンバイ・データベースが存在するサーバーに自動的にフェイルオーバーできます。

詳細情報

ロギングおよびチェックポイントの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクション管理に関する説明を参照してください。

レプリケーションの詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』を参照してください。

自動クライアント・フェイルオーバーの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の自動クライアント・フェイルオーバーの使用に関する説明を参照してください。

7 イベント通知

TimesTenおよびTimesTen Cacheのイベント通知は、データベースに対する変更を検出する関数を提供する、トランザクション・ログAPI(XLA)を介して行われます。XLAはログ・レコードを監視します。ログ・レコードは、表内の行における挿入、更新または削除を記述します。XLAをマテリアライズド・ビューと併用して、複数の表にまたがって特定の行に行われた変更に通知の範囲を絞り込むことができます。

また、TimesTenおよびTimesTen CacheではSNMPトラップを使用して、イベントに関する非同期の警告を送信できます。

この章の内容は次のとおりです。

- トランザクション・ログAPIによるトランザクション変更の検出

- マテリアライズド・ビューとXLAによる表の監視

- SNMPトラップによる問題の監視

トランザクション・ログAPIによるトランザクション変更の検出

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

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

また、XLAを使用してカスタム・データ・レプリケーション・ソリューションを構築し、TimesTenレプリケーションのかわりに使用することもできます。このようなXLA対応のレプリケーション・ソリューションには、TimesTen以外のデータベースによるレプリケーションや、別のTimesTenデータベースへの更新の転送が含まれます。

XLAの動作

XLAは、トランザクションの更新レコードをトランザクション・ログ・バッファから直接取得します。レコードがバッファ内に存在しない場合、XLAは図7-1に示すように、ディスク上のトランザクション・ログ・ファイルから更新レコードを取得します。トランザクション・ログ・ファイルが使用可能であるかぎり、レコードは使用可能です。読取りアクセスは、ブックマークを使用して、ログ更新ストリームにおける位置を保持します。ブックマークはデータベースに保存されるため、データベースの接続、停止および障害が発生しても永続的に維持されます。

図7-1 XLAの動作

ログ更新レコード

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

返される各レコードには、固定長の更新ヘッダーと、内部書式に従って保存された1行または2行のデータが含まれます。更新ヘッダーには、次のものが記述されます。

- 更新行が適用される表

- そのレコードがトランザクションの最初のコミット・レコードかまたは最後のコミット・レコードか

- レコードが表すトランザクション・タイプ

- 返される行データの長さ

- 更新された列

マテリアライズド・ビューとXLAによる表の監視

多くのデータベース・システムでは簡素化と、複数の表を含むSELECT問合せのパフォーマンス向上のために、マテリアライズド・ビューが使用されます。TimesTenおよびTimesTen Cacheのマテリアライズド・ビューもこの同じ機能を備えていますが、TimesTenおよびTimesTen Cacheにおけるこの機能のその他の目的は、XLAと連携して、複数の表の特定の行と列を追跡することです。

マテリアライズド・ビューが存在する場合、XLAは重要な更新レコードを、1つのマテリアライズド・ビューのみで監視できます。マテリアライズド・ビューが存在しない場合は、XLAアプリケーションで、すべてのディテール表の更新レコード(アプリケーションにとって重要ではない行および列への更新が反映されているレコードを含む)に対して監視を行う必要があります。

図7-2は、マテリアライズド・ビューの結果セットを構成するディテール表の列に対して行われる更新を示しています。マテリアライズド・ビューに対する更新を監視するXLAアプリケーションは、更新されたレコードを取得します。マテリアライズド・ビューの結果セットの一部でない、同じディテール表のその他の列や行に対する更新はXLAアプリケーションでは透過的です。

図7-2 XLAによる、マテリアライズド・ビュー表の更新の検出

XLAとマテリアライズド・ビューを使用して特定の株式への更新を検出する取引アプリケーションの例については、「リアルタイム取引価格サービス・アプリケーション」を参照してください。

TimesTenおよびTimesTen Cacheに実装されているマテリアライズド・ビューでは、複数の表にわたる更新の検出においてパフォーマンスおよび機能が強化されています。TimesTenおよびIMDB Cache以外のマテリアライズド・ビューに精通しているユーザーは、次のメリットとデメリットに注意してください。

- アプリケーションは、明示的にマテリアライズド・ビューを作成する必要があります。TimesTen問合せオプティマイザには、マテリアライズド・ビューを自動的に作成する機能はありません。

- 問合せオプティマイザが、ディテール表に対する問合せを再書込みしてマテリアライズド・ビューを参照することはありません。アプリケーションの問合せでビューを直接参照する必要があります。

- マテリアライズド・ビューの作成に使用するSQLには一定の制限があります。

マテリアライズド・ビューを作成する場合、アプリケーションでは、ビューのメンテナンスを即時メンテナンスまたは遅延メンテナンスのいずれにするかを指定する必要があります。即時メンテナンスでは、ビューのディテール表に変更が加えられるとただちにビューがリフレッシュされます。遅延メンテナンスでは、ディテール表を更新したトランザクションがコミットされて初めてビューがリフレッシュされます。遅延メンテナンスが指定されているビューは、非同期マテリアライズド・ビューと呼ばれます。リフレッシュは自動で行うことも、アプリケーションから開始することもできます。また、リフレッシュには、増分リフレッシュと完全リフレッシュがあります。アプリケーションでは、自動リフレッシュの頻度を指定する必要があります。非同期マテリアライズド・ビューのXLA通知の順序が、関連付けられたディテール表に対するトランザクションの順序と必ずしも同じではないことに注意してください。

SNMPトラップによる問題の監視

Simple Network Management Protocol(SNMP)は、ネットワーク管理サービスのためのプロトコルです。通常、ネットワーク管理ソフトウェアではSNMPを使用して、ネットワーク・デバイス(ルーターやスイッチなど)の状態の問合せや制御を行います。また、これらのデバイスはUDP/IPパケットの形式で、SNMPトラップと呼ばれる非同期の警告を生成して、管理システムに問題を通知する場合もあります。

TimesTenおよびTimesTen CacheではSNMPを介して問合せや制御を行うことはできません。ただし、TimesTenおよびTimesTen Cacheでは、ユーザーのリカバリ・メカニズムを簡素化するために、特定の重大なイベントに対してSNMPトラップを送信します。TimesTenでは次のイベントに対してトラップを送信します。

- TimesTen Cacheの自動リフレッシュ障害

- データベースの領域不足

- レプリケート済トランザクションの障害

- デーモンの異常停止

- データベースの無効化

- アサーション障害

こうしたイベントが発生すると、TimesTenデーモンによってログ・エントリも書き込まれますが、SNMPトラップを介してこれらのイベントを明らかにすることにより、適切に構成されたネットワーク管理ソフトウェアでただちに対処することができます。

詳細情報

XLAの詳細は、『Oracle TimesTen In-Memory Database C 開発者ガイド』のXLAおよびTimesTenイベント管理に関する説明と、『Oracle TimesTen In-Memory Database Java開発者ガイド』のJMS/XLAを使用したイベント管理に関する説明を参照してください。

TTClassesの詳細は、『Oracle TimesTen In-Memory Database TTClassesガイド』を参照してください。

マテリアライズド・ビューの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のマテリアライズド・ビューの理解に関する説明を参照してください。『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE MATERIALIZED VIEW文も参照してください。

SNMPトラップの詳細は、Oracle TimesTen In-Memory Databaseのエラー・メッセージおよびSNMPトラップのSNMPトラップを使用した診断に関する説明を参照してください。

8 TimesTen Cache

TimesTen Cacheには、Oracle DatabaseとTimesTen Cacheデータベース間でデータを転送する機能が備えられています。

Oracle DatabaseからTimesTen Cacheデータベースにデータをキャッシュするには、TimesTenにキャッシュ・グループを作成します(このとき、TimesTenでは、各キャッシュ・グループが、Oracle Databaseの単一の表、または外部キー制約で関連付けられた表のグループにマッピングされます)。

この章の内容は次のとおりです。

- キャッシュ・グループ

- 動的キャッシュ・グループおよび明示的にロードされるキャッシュ・グループ

- グローバル・キャッシュ・グループおよびローカル・キャッシュ・グループ

- キャッシュ・グリッド

- TimesTen CacheとOracle Database間のデータの転送

- エージング機能

- パススルー機能

- キャッシュ・グループのレプリケーション

キャッシュ・グループ

Oracle Databaseのデータをキャッシュするには、TimesTen Cacheデータベースにキャッシュ・グループを作成します。キャッシュ・グループを作成して、単一のOracle Database表または一連の関連付けられたOracle Database表をキャッシュできます。キャッシュしたOracle Databaseのデータは、Oracle Database表のすべての行および列、または行および列のサブセットで構成できます。

TimesTen Cacheでは、次の機能がサポートされています。

- アプリケーションでは、キャッシュ・グループの読取りおよびキャッシュ・グループへの書込みを行えます。

- キャッシュ・グループを自動または手動でリフレッシュ(Oracle Databaseのデータをキャッシュ・グループにアップロード)できます。

- キャッシュの更新は、Oracle Databaseに自動または手動で送信できます。更新は、同期または非同期で送信できます。

TimesTen Cacheデータベースは、キャッシュ・グループの作成、キャッシュ・グループとOracle Database間の更新の伝播など、すべての同期キャッシュ・グループ処理をOracle Databaseと対話して行います。キャッシュ・エージェントと呼ばれるプロセスは、キャッシュ・グループへのデータのロード、Oracle Databaseからキャッシュ・グループへのデータの手動リフレッシュ、Oracle Databaseからキャッシュ・グループへのデータの自動リフレッシュなどの非同期キャッシュ処理を実行します。

図8-1に、TimesTen Cacheの機能およびプロセスを示します。

図8-1 TimesTen Cache

各キャッシュ・グループには、そのキャッシュ・グループの主キーが含まれるルート表があります。ルート表の行は、子表の行と1対多の関係を持つことができます。また、その子表の行は、他の子表の行と1対多の関係を持つことができます。

キャッシュ・インスタンスは、外部キー関係によってルート表にある特定行と関連付けられた一連の行です。ルート表のそれぞれの主キー値がキャッシュ・インスタンスを指定します。キャッシュ・インスタンスは、キャッシュのロードとキャッシュのエージングの単位になります。キャッシュ・グループでは、そのグループ内に複数の親を持つ子表が存在することはできません。各TimesTen Cacheレコードが属しているキャッシュ・インスタンスは1つのみであり、また、同じキャッシュ・グループ内に存在する親は1つのみです。

よく使用されるキャッシュ・グループ・タイプは、次のとおりです。

- 読取り専用キャッシュ・グループ - 読取り専用キャッシュ・グループで実行されるキャッシュ動作では、Oracle Database表にコミットされた更新がTimesTen Cacheデータベースの対応するキャッシュ表に自動的にリフレッシュされます。

- 非同期のWRITETHROUGH (AWT)キャッシュ・グループ - AWTキャッシュ・グループで実行されるキャッシュ動作では、TimesTen Cacheデータベースのキャッシュ表にコミットされた更新が、自動的に対応するOracle Database表に非同期に伝播されます。

キャッシュ・グループのその他のタイプは、次のとおりです。

- 同期のWRITETHROUGH (SWT)キャッシュ・グループ - SWTキャッシュ・グループで実行されるキャッシュ動作では、TimesTen Cacheデータベースのキャッシュ表にコミットされた更新が、自動的に対応するOracle Database表に同期して伝播されます。

- ユーザー管理キャッシュ・グループ - ユーザー管理キャッシュ・グループでは、カスタマイズされたキャッシュ動作が定義されます。たとえば、ユーザー管理キャッシュの各キャッシュ表をすべて同じタイプに統一する必要はありません。一部の表を読取り専用として定義し、別の表を更新可能な表として定義することが可能です。

動的キャッシュ・グループおよび明示的にロードされるキャッシュ・グループ

キャッシュ・グループは動的にロードするか、または明示的にロードできます。

明示的にロードされるキャッシュ・グループの場合、アプリケーションでは、ロード・キャッシュ・グループ処理を使用して、Oracle Databaseからキャッシュ表に事前にデータがロードされます。これ以降、アプリケーションが必要とするすべてのデータがTimesTen Cacheデータベースで利用可能になります。

動的キャッシュ・グループの場合、アプリケーションでまだTimesTen Cacheに存在しないキャッシュ・インスタンスを参照すると、Oracle DatabaseからTimesTen Cacheにキャッシュ・インスタンスが自動的にロードされます。動的キャッシュ・グループを使用するときは、通常、最低使用頻度(LRU)も使用されます。これにより、最低使用頻度のキャッシュ・インスタンスをキャッシュからエイジ・アウトし、最近使用したキャッシュ・インスタンスを保存するための領域が確保されます。動的キャッシュ・グループの使用は、キャッシュ対象のデータのサイズがTimesTen Cacheデータベースに利用可能なメモリーのサイズを超えている場合に適しています。

すべてのキャッシュ・グループ・タイプ(読取り専用、AWT、SWT、ユーザー管理)は、明示的にロード済として定義することも、動的として定義することもできます。

グローバル・キャッシュ・グループおよびローカル・キャッシュ・グループ

キャッシュ・グループは、ローカルまたはグローバルのいずれかとして定義できます。

- ローカル・キャッシュ・グループでは、データベースが同じキャッシュ・グリッドのメンバーであっても、キャッシュ表のデータがTimesTen Cacheデータベース間で共有されません。したがって、TimesTen Cacheによる調整が行われず、複数のデータベースの内容が重複することがあります。ローカル・キャッシュ・グループは、様々なノード間にデータを論理的にパーティション化するアプリケーションまたは読取り専用キャッシュ・グループに適しています。いずれのキャッシュ・グループ・タイプも、ローカル・キャッシュ・グループとして定義できます。ローカル・キャッシュ・グループは、明示的にロードしたり、動的にすることができます。

- グローバル・キャッシュ・グループでは、キャッシュ表のデータが、同じキャッシュ・グリッド内のTimesTen Cacheデータベース間で共有されます。複数のグリッド・メンバーが同じデータを更新する場合は、TimesTen Cache間でデータの読取り/書込みの整合性が確保されるように、グリッドによってそれぞれの更新が調整されます。
動的なAWTキャッシュ・グループおよび明示的にロードされたAWTキャッシュ・グループは、グローバル・キャッシュ・グループとして定義できます。新しいキャッシュ・インスタンスは、リクエストに応じて、グローバル・キャッシュ・グループのキャッシュ表にロードされます。動的なAWTグローバル・キャッシュ・グループに対する問合せには、問合せが行われたローカル・グリッド・メンバー、リモート・グリッド・メンバーまたはOracle Databaseからのデータで対応できます。明示的にロードされたAWTキャッシュ・グループに対する問合せには、ローカル・グリッド・メンバーまたはリモート・グリッド・メンバーからのデータで対応できます。

グローバル・キャッシュ・グループを使用する場合は、まずキャッシュ・グリッドにアタッチされる複数のTimesTen Cacheデータベース間でグローバル・データを管理するキャッシュ・グリッドを定義する必要があります。詳細は、「キャッシュ・グリッド」を参照してください。

キャッシュ・グリッド

キャッシュ・グリッドとは、グローバル・キャッシュ・グループに含まれるアプリケーション・データをまとめて管理するTimesTen Cacheデータベースの集合のことです。キャッシュ・グリッドは、1つ以上のグリッド・メンバーで構成されています。スタンドアロンのTimesTenデータベースまたはアクティブ・スタンバイ・ペアのいずれかをグリッド・メンバーにすることができます。グリッド・メンバーは、中央のOracle DatabaseまたはReal Application Cluster(Oracle RAC)から表をキャッシュします。グローバル・キャッシュ・グループ内のキャッシュ・データは、共有記憶域のない複数のグリッド・メンバーに動的に分散されます。このアーキテクチャによって、キャッシュ・グリッドの容量は、アプリケーションの処理ニーズに応じて拡張できます。ワークロードが増加または減少すると、他のグリッド・メンバーでの操作を妨げることなく、新しいグリッド・メンバーがグリッドにアタッチされたり、既存のグリッド・メンバーがグリッドからデタッチされます。

キャッシュ・グリッド内のTimesTen Cacheデータベースには、明示的にロードされたキャッシュ・グループと動的キャッシュ・グループに加え、すべてのキャッシュ・グループ・タイプのグローバルおよびローカル・キャッシュ・グループを格納できます。キャッシュ・グリッドによって、ノード間でのグローバル・データの整合性が確保されます。

図8-2に、キャッシュ・グリッドを示します。このグリッドには3つのメンバーが含まれており、そのうちの2つはスタンドアロンTimesTen Cacheデータベースであり、1つは読取り専用サブスクライバを使用するアクティブ・スタンバイ・ペアです。読取り専用サブスクライバは、グリッドの一部ではありません。

図8-2 キャッシュ・グリッド

TimesTen CacheとOracle Database間のデータの転送

TimesTen Cacheは、キャッシュ・グループからOracle Databaseに更新を自動的に伝播し、キャッシュ・グループのデータをOracle Databaseで自動的にリフレッシュして、キャッシュ・データとOracle Database間の整合性を確保します。

この項の後半の内容は次のとおりです。

- Oracle Database表からのキャッシュ・グループの更新

- キャッシュ・グループからのOracle Database表の更新

Oracle Database表からのキャッシュ・グループの更新

次のメカニズムを使用して、キャッシュ・グループを、Oracle Database表の対応するデータと同期された状態で保持できます。

- 自動リフレッシュ - 増分自動リフレッシュ操作では、前回のリフレッシュ以降にOracle Databaseで変更されたレコードのみが更新されます。TimesTen Cacheでは、指定された時間間隔で自動的に増分リフレッシュが実行されます。また、指定された時間間隔でキャッシュ・グループ全体を自動的にリフレッシュする完全自動リフレッシュ操作を指定することもできます。

- 手動リフレッシュ - アプリケーションでREFRESH CACHE GROUP文を発行し、キャッシュ・グループ全体または特定のキャッシュ・インスタンスをリフレッシュします。これは、キャッシュ・グループまたはキャッシュ・インスタンスをアンロードしてからロードするのと同じことです。

様々な状況で、これらのメカニズムは有効です。Oracle Database表の更新が1日に1回のみ行われ、更新される行数が多い場合は、完全自動リフレッシュが最適です。Oracle Database表の更新頻度は高いものの、それぞれの更新で変更される行数が少ない場合は、増分自動リフレッシュが最適です。また、リフレッシュを実行する必要のあるタイミングがアプリケーションのロジックで既知の場合は、手動リフレッシュが最適です。

キャッシュ・グループからのOracle Database表の更新

伝播およびフラッシュのメカニズムを使用して、Oracle Databaseを、キャッシュ・グループの最新状態と同じ状態で保持できます。

- 伝播 - キャッシュ・グループ・データをOracle Databaseに伝播する場合に最も一般的な方法は、非同期のWRITETHROUGH(AWT)キャッシュ・グループを使用する方法です。Oracle Database表を更新するその他の方法として、同期のWRITETHROUGH (SWT)キャッシュ・グループを使用する方法や、ユーザー管理キャッシュ・グループにPROPAGATEオプションを指定する方法があります。
AWTキャッシュ・グループへの変更は、Oracle Database表への適用を待機せずにコミットされます。AWTキャッシュ・グループは、SWTキャッシュ・グループおよびPROPAGATEオプションを指定したユーザー管理キャッシュ・グループよりもレスポンス時間とパフォーマンスに優れていますが、変更が非同期にOracle Database表に適用されるため、TimesTen CacheデータベースとOracle Databaseに常に同じデータが含まれるわけではありません。

データベースの作成時にパラレル・レプリケーションを構成することで、AWTキャッシュ・グループからOracle Database表へのスループットを向上できます。Oracle Database表に更新を適用するためのスレッド数を構成します。

- フラッシュ - フラッシュ処理を使用すると、ユーザー管理キャッシュ・グループからOracle Databaseに更新を手動で伝播できます。アプリケーションでFLUSH CACHE GROUP文を発行し、フラッシュ処理を開始します。フラッシュ処理は、特定の時間内に複数のレコードに対する更新が頻繁に行われる場合に有効です。フラッシュ処理では、削除は伝播されません。

エージング機能

レコードはTimesTenデータベースから自動的にエイジ・アウトでき、キャッシュ・インスタンスはTimesTen Cacheデータベースから自動的にエイジ・アウトできます。エージングは、使用量ベースまたは時間ベースにすることができます。同じシステムに使用量ベースのエージングと時間ベースのエージングの両方を構成できますが、特定のキャッシュ・グループには1つのタイプのエージングしか定義できません。

動的ロードを使用すると、エージングによって削除済のリクエストされたキャッシュ・インスタンスをリロードできます。

パススルー機能

アプリケーションは、TimesTen Cacheへの単一接続を介して、キャッシュ・グループまたはOracle DatabaseのいずれかにSQL文を送信できます。このような単一接続は、図8-3に示すパススルー機能で、SQL文はTimesTen Cacheのキャッシュ表でローカルに処理できるのか、またはOracle Databaseにリダイレクトする必要があるのかをチェックすることによって使用可能になります。パススルー機能の設定では、パススルーの対象とする文の種類とそれを実行する状況が指定されます。パススルー機能の具体的な動作は、TimesTen Cache一般接続属性PassThroughで制御されます。

図8-3 パススルー機能

キャッシュ・グループのレプリケーション

アクティブ・スタンバイ・ペアを使用すると、AWTキャッシュ・グループおよび読取り専用キャッシュ・グループをレプリケートできます。

アクティブ・スタンバイ・ペア構成の一部として読取り専用の特殊な障害時リカバリ・サブスクライバを作成することによって、障害全体をリカバリできます。リモートの障害時リカバリ・サイトに存在するこの特殊なサブスクライバは、同じように障害時リカバリ・サイトに存在するもう1つのOracle Databaseに更新を伝播できます。

キャッシュ・アドバイザの使用

Oracle TimesTen Cacheアドバイザを使用することで、Oracle Databaseの顧客が、Oracle TimesTen Cache (TimesTenデータベースともいう)を使用した場合に既存のOracle Databaseアプリケーションのパフォーマンスを向上できるかどうかを判断できます。

キャッシュ・アドバイザは、Oracle DatabaseアプリケーションにおけるSQLの使用方法に基づいて、TimesTenキャッシュ・グループ定義の推奨事項を生成します。これは、アプリケーションから収集したSQLワークロードまたは既存のSQLチューニング・セットのいずれかを評価することで実行されます。キャッシュ・アドバイザは、この情報に加えてOracle Databaseオブジェクトのスキーマ定義を分析し、表と列の使用パターンを判定します。また、キャッシュ・アドバイザは特定のOracle TimesTen Cacheサイズのアプリケーション・パフォーマンスも分析するため、キャッシュ・グループの推奨値は指定したキャッシュのサイズに応じて異なる場合があります。

詳細情報

TimesTen Cacheの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』を参照してください。

キャッシュ・グループのエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループでのエージングの実装に関する説明を参照してください。キャッシュ・グループにない表におけるエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

パススルー機能の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のパススルー・レベルの設定に関する説明を参照してください。

キャッシュ・グループのレプリケーションの詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のキャッシュ・グループとレプリケーションに関する説明を参照してください。

9 TimesTenおよびTimesTen Cacheの管理

この章の内容は次のとおりです。

- TimesTenおよびTimesTen Cacheのインストール

- アクセス制御

- コマンドラインによる管理

- SQLによる管理

- SQL Developer

- ODBC Administrator

- TimesTenおよびTimesTen Cacheのアップグレード

TimesTenおよびTimesTen Cacheのインストール

TimesTenおよびTimesTen Cacheソフトウェアは、簡単にインストールできます。UNIX Systemsでは、簡単なセットアップ・スクリプトによってTimesTenをインストールします。Windowsでは、InstallShield®を実行してTimesTenをインストールします。

アクセス制御

アクセス制御を指定してTimesTenおよびTimesTen Cacheをインストールすると、特定の権限を持つユーザーのみが特定のTimesTen機能にアクセスできるように設定できます。

TimesTenアクセス制御では、標準SQL文を使用して、特定の権限レベルを持ったTimesTenユーザー・アカウントを設定します。TimesTenには、オブジェクト・レベルのアクセス制御およびデータベース・レベルのアクセス制御が備えられています。

コマンドラインによる管理

TimesTenおよびTimesTen Cacheのほとんどの管理タスクは、コマンドライン・ユーティリティを使用して実行します。次の表に、一般的なユーティリティの要約を示します。

名前

説明

ttAdmin

TimesTenデータベースおよびTimesTen Cacheを管理するための汎用ユーティリティです。データベースをRAMから自動または手動でロードおよびアンロードするポリシー、およびTimesTenのキャッシュ・エージェントとレプリケーション・エージェントを起動および停止するポリシーを指定するために使用します。

ttBackupおよびttRestore

データベースのバックアップ・コピーを作成し、後でリストアします。

ttBulkCp

TimesTen表とASCIIファイルとの間でデータを転送します。

ttIsql

コマンドラインから対話形式でSQLを実行します。また、データベースの再構成と監視を行うための多数の管理コマンドを提供します。

ttMigrate

表およびキャッシュ・グループ定義をバイナリ・データファイルに保存します。また、バイナリ・ファイルからの表およびキャッシュ・グループ定義のリストアにも使用されます。

ttRepAdmin

レプリケーション・ステータスを監視します。

ttSize

データベースの表に割り当てる領域の大きさを見積もります。

ttStatus

TimesTenまたはTimesTen Cacheの現在の状態を示す情報を表示します。

ttTraceMon

TimesTenおよびTimesTen Cacheの内部トレース機能を有効または無効にします。

ttXactAdmin

未処理の各トランザクションの所有者、ステータス、ログおよびロックの情報を表示します。また、ttXactAdminユーティリティを使用すると、ユーザーはXAトランザクション・ブランチのコミット、中断または消去を実行できます。

SQLによる管理

TimesTenには、表、レプリケーション・スキーム、キャッシュ・グループ、マテリアライズド・ビュー、索引の作成および管理などの管理作業用のSQL文が用意されています。

各TimesTenデータベースのメタデータは、システム表のグループに保存されます。アプリケーションでは、これらの表にSQL SELECT問合せを実行して、データベースの現在の状態を監視できます。

管理者は、SQLによるデータベースとの簡単な通信にttIsqlユーティリティを使用できます。たとえば、データベース構造の情報を表示する組込みttIsqlコマンドがいくつかあります。

SQL Developer

Oracle SQL Developerは、データベース開発タスク用のグラフィカル・ツールです。SQL Developerを使用して、次の操作を実行します。

- データベース・オブジェクトとPL/SQLプログラムを参照、作成および編集し、キャッシュ・グループ操作を自動化します。

- データを操作およびエクスポートします。

- SQLおよびPL/SQLの文とスクリプトを実行します。

- レポートを表示および作成します。

SQL DeveloperはJavaアプリケーションであり、TimesTenデータベースへの直接リンクとクライアント/サーバー接続をサポートします。複数データベースへの接続がサポートされているため、SQL DeveloperユーザーはTimesTenとOracle Databaseのデータを同時に使用できます。

ODBC Administrator

ODBC Administratorは、データ・ソースの定義を作成、構成および削除するための、Windowsで使用するユーティリティ・プログラムです。これを使用して、データ・ソースの定義と接続属性の設定が行えます。

TimesTenおよびTimesTen Cacheのアップグレード

TimesTenおよびTimesTen Cacheでは、次の3種類のアップグレードを実行できます。

- インプレース・アップグレード

- オフライン・アップグレード

- オンライン・アップグレード

インプレース・アップグレード

インプレース・アップグレードは、通常、TimesTenまたはTimesTen Cacheの新しいパッチ・リリースに移行するために使用します。

インプレース・アップグレードは、既存のデータベースを破棄せずに実行できます。ただし、まずすべてのアプリケーションをデータベースから切断し、データベースを共有メモリーからアンロードしておく必要があります。TimesTenまたはTimesTen Cacheの以前のリリースをアンインストールしてから、新しいリリースをインストールした後、アプリケーションはデータベースに再接続して、処理を再開できます。

オフライン・アップグレード

オフライン・アップグレードを実行するには、ttMigrateユーティリティを使用して、データベースを外部ファイルにエクスポートし、必要な変更を加えたデータベースをリストアします。

オフライン・アップグレードを使用して次のタスクを実行します。

- TimesTenまたはTimesTen Cacheの新しいメジャー・リリースへの移行

- 別のディレクトリまたはマシンへの移動

- データベース・サイズの縮小

オフライン・アップグレードの実行中は、アプリケーションではデータベースを使用できません。通常、オフライン・アップグレードでは、アップグレードするデータベースの追加のコピー用として十分なディスク領域が必要になります。

オンライン・アップグレード

TimesTenレプリケーションによって、オンライン・アップグレードが使用可能となります。この場合、ユーザーが使用できるようにデータベースとそのアプリケーションを動作させた状態で、ttMigrateおよびttRepAdminユーティリティによって、アップグレードをオンラインで実行できます。オンライン・アップグレードは、データベースの連続的な可用性が不可欠なアプリケーションに有効です。

オンライン・アップグレードを使用して次のタスクを実行します。

- TimesTenまたはTimesTen Cacheの新しいメジャー・リリースへの移行およびデータベースの連続的な可用性の維持

- データベース・サイズの拡大または縮小

- 新しい場所またはマシンへのデータベースの移動

アップグレード中のデータベースに対する更新は、アップグレード処理が終了すると、アップグレードされたデータベースに転送されます。オンライン・アップグレードでは、データベースを別のデータベースにレプリケートする必要があるため、オフライン・アップグレードより多くのメモリーとディスク領域が必要な場合があります。

詳細情報

TimesTenのインストールとアップグレードの詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』を参照してください。

アクセス制御の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』を参照してください。

SQL Developerの詳細は、Oracle SQL Developer Oracle TimesTen In-Memory Databaseサポートのユーザーズ・ガイドを参照してください。

TimesTenの一般的な管理の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースの管理に関する説明およびTimesTenデータベースのデータの使用に関する説明を参照してください。これらの章には、ODBC Administratorの使用方法が含まれています。

TimesTenレプリケーションの管理の詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』を参照してください。

SQL文の完全なリストは、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』を参照してください。

TimesTenコマンドライン・ユーティリティの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。

索引
A  B  C  D  E  F  G  H  I  J  L  M  O  P  Q  R  S  T  U  X

A

アクセス制御, 9.2

データベース・レベル, 1.2.2

オブジェクト・レベル, 1.2.2

アクティブ・スタンバイ・ペア, 「レプリケーション, アクティブ・スタンバイ・ペア」を参照 管理

コマンドライン・ユーティリティ, 9.3

集計関数, 1.2.12 エージング

キャッシュ・グループ, 8.2, 8.6

データ, 1.2.14

分析関数, 1.2.12 アーキテクチャ

TimesTen, 3.1

TimesTen Cache, 3.1

非同期マテリアライズド・ビュー, 7.2 自動リフレッシュ, 8.5.1 AWTキャッシュ・グループ, 8.1

パラレル伝播, 8.5.2

B

ビットマップ索引, 5.4

ビジネス・インテリジェンス, 1.2.12

C

C++インタフェース, 1.2.1.6, 7.1

キャッシュ・グリッド

定義, 8.4

キャッシュ・グループ

エージング, 8.2

非同期のWRITETHROUGH, 8.1

定義, 3.7

説明, 8.1

動的, 8.2

明示的にロードされる, 8.2

グローバル, 8.3

ローカル, 8.3

パススルー機能, 8.7

読取り専用, 8.1

レプリケート, 8.8

同期のWRITETHROUGH, 8.1

ユーザー管理, 8.1

キャッシュ・インスタンス, 8.1 TimesTenへのOracleデータのキャッシング

概要, 3.7

キャラクタ・セット, 1.2.7 チェックポイント

ブロッキング, 6.2.2

ファジー, 6.2.1

非ブロッキング, 6.2.1

処理, 1.2.4

用途, 3.6

リカバリ, 6.2.3

クラシック・レプリケーション, 「レプリケーション, クラシック」を参照 クライアント

自動フェイルオーバー, 6.3.5

クライアント/サーバー接続, 1.2.3, 3.9.2 クラスタ・マネージャ, 6.3.4 コミットの動作, 6.1.3 圧縮

表の列, 1.2.8

同時実性, 1.2.6 接続

クライアント/サーバー, 3.9.2

ダイレクト・ドライバ, 3.9.1

ドライバ・マネージャ, 3.9.3

D

データ構造, 3.3

デッドロックの検出

説明, 4.2

ダイレクト・ドライバ接続, 1.2.3, 3.9.1 障害時リカバリ, 8.8 ドライバ・マネージャ接続, 3.9.3 永続性, 1.2.4 永続コミット, 6.1.1 動的キャッシュ・グループ, 8.2

定義, 8.2

E

明示的にロードされるキャッシュ・グループ

定義, 8.2

F

フェイルオーバー

クライアントの構成, 6.3.5

フラッシュ

TimesTen CacheからOracle Database, 8.5.2

G

グローバル・キャッシュ・グループ

定義, 8.3

動的, 8.3

明示的にロードされる, 8.3

グローバリゼーション・サポート, 1.2.7

H

ハッシュ索引

定義, 5.4

概要, 5.4

使用する場合, 5.4

高可用性

レプリケーション, 3.8, 6.3

I

索引

アドバイス, 5.4

問合せの最適化, 5.4

ビットマップ, 5.4

ハッシュ, 5.4

範囲, 5.4

サポートされるタイプ, 5.4

Index Advisor, 5.4 分離, 1.2.6

コミット読取り, 4.1.1

シリアライズ可能, 4.1.2

トランザクション, 4.1

J

JDBCインタフェース, 1.2.1.1

結合

マージ, 5.6.2

方法, 5.6

ネステッド・ループ, 5.6.1

JTAサポート

概要, 1.2.1.7

L

ラージ・オブジェクト, 1.2.13

言語ソート, 1.2.7

LOB, 1.2.13

ローカル・キャッシュ・グループ

定義, 8.3

ロック

データベース・レベル, 4.2.1

説明, 4.2

行レベル, 4.2.3

表レベル, 4.2.2

ログ・バッファ

ディスク書込み, 6.1.1

ログ・ファイル

チェックポイントとのやりとり, 3.6

削除されるタイミング, 6.1.2

ロギング, 1.2.4

トランザクション, 6.1

M

マテリアライズド・ビュー

XLA, 7.2

非同期, 7.2

他のデータベースとの比較, 7.2

メモリー使用量

問合せの最適化, 5.1

O

OCIサポート, 1.2.1.3

ODBC Administrator, 9.6

ODBCインタフェース, 1.2.1.1

OLAP演算子, 1.2.12

オプティマイザ

説明, 5

ヒント, 5.3

計画, 5.7

スキャン方法, 5.5

Oracle Call Interfaceサポート, 1.2.1.3 Oracle Clusterware, 6.3.4 概要, 6.3.2

P

パラレル・レプリケーション, 6.3

パススルー機能, 8.7

PL/SQLのサポート, 1.2.1.2

Pro*C/C++プリコンパイラのサポート, 1.2.1.3

プロセス

データベース, 3.4

伝播

TimesTen CacheからOracle Databaseへの変更, 8.5.2

Q

問合せオプティマイザ, 1.2.5

説明, 5

ヒント, 5.3

メモリー使用量, 5.1

計画, 5.7

統計の使用, 5.2

R

範囲索引, 5.4

コミット読取り分離レベル

説明, 4.1.1

読取り専用キャッシュ・グループ, 8.1 リカバリ

チェックポイント・ファイルの使用, 6.2.3

リフレッシュ

手動(キャッシュ・グループ), 8.5.1

レプリケーション

アクティブ・スタンバイ・ペア

自動クライアント・フェイルオーバー, 6.3.5

高可用性, 3.8

概要, 6.3.1

アーキテクチャ, 3.8 クラシック, 6.3.2

双方向, 6.3.2.2

分散ワークロード, 6.3.2.2

複数のサブスクライバ, 6.3.2.1

サブスクライバへの伝播, 6.3.2.1

分割ワークロード, 6.3.2.2

単方向, 6.3.2.1

フェイルオーバー, 6.3.4 高可用性, 6.3 スレッド数, 6.3 概要, 6.3 パラレル, 6.3 サポート, 1.2.9

S

スキャン方法, 5.5

シリアライズ可能分離レベル

説明, 4.1.2

共有ライブラリ, 3.2 SNMPトラップ, 7.3 SQL Developer, 9.5 統計

問合せオプティマイザ, 5.2

ttOptEstimateStats, 5.2

ttOptUpdateStats, 5.2

SWTキャッシュ・グループ, 8.1

T

TimesTen

アーキテクチャ, 3.1

使用例, 2

使用, 2

TimesTen Application-Tier Database Cache, 1 TimesTen Cache, 1.2.10

アーキテクチャ, 3.1

使用例, 2

使用, 2

トランザクションの独立性

概要, 4.1

コミット読取り, 4.1.1

トランザクション・ログAPI, 7.1

概要, 1.2.1.5

トランザクション・ロギング, 1.2.4, 6.1 トランザクション

リカバリ, 1.2.4

レプリケーション, 1.2.4

ロールバック, 1.2.4

TTClasses, 1.2.1.6 ttLoadFromOracle組込みプロシージャ, 1.2.11 ttOptEstimateStats組込みプロシージャ

統計計算, 5.2

U

アップグレード

インプレース, 9.7.1

オフライン, 9.7.2

オンライン, 9.7.3

TimesTen, 9.7

ユーザー管理キャッシュ・グループ, 8.1

X

XAサポート

概要, 1.2.1.7

XLA, 7.1

マテリアライズド・ビュー, 7.2

概要, 1.2.1.5

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。