TimesTenおよびTimesTen Cacheのイベント通知は、データベースに対する変更を検出する関数を提供する、トランザクション・ログAPI(XLA)を介して行われます。XLAはログ・レコードを監視します。ログ・レコードは、表内の行における挿入、更新または削除を記述します。XLAをマテリアライズド・ビューと併用して、複数の表にまたがって特定の行に行われた変更に通知の範囲を絞り込むことができます。
また、TimesTenおよびTimesTen CacheではSNMPトラップを使用して、イベントに関する非同期の警告を送信できます。
この章の内容は次のとおりです。
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は図7-1に示すように、ディスク上のトランザクション・ログ・ファイルから更新レコードを取得します。トランザクション・ログ・ファイルが使用可能であるかぎり、レコードは使用可能です。読取りアクセスは、ブックマークを使用して、ログ更新ストリームにおける位置を保持します。ブックマークはデータベースに保存されるため、データベースの接続、停止および障害が発生しても永続的に維持されます。
多くのデータベース・システムでは簡素化と、複数の表を含むSELECT
問合せのパフォーマンス向上のために、マテリアライズド・ビューが使用されます。TimesTenおよびTimesTen Cacheのマテリアライズド・ビューもこの同じ機能を備えていますが、TimesTenおよびTimesTen Cacheにおけるこの機能のその他の目的は、XLAと連携して、複数の表の特定の行と列を追跡することです。
マテリアライズド・ビューが存在する場合、XLAは重要な更新レコードを、1つのマテリアライズド・ビューのみで監視できます。マテリアライズド・ビューが存在しない場合は、XLAアプリケーションで、すべてのディテール表の更新レコード(アプリケーションにとって重要ではない行および列への更新が反映されているレコードを含む)に対して監視を行う必要があります。
図7-2は、マテリアライズド・ビューの結果セットを構成するディテール表の列に対して行われる更新を示しています。マテリアライズド・ビューに対する更新を監視するXLAアプリケーションは、更新されたレコードを取得します。マテリアライズド・ビューの結果セットの一部でない、同じディテール表のその他の列や行に対する更新はXLAアプリケーションでは透過的です。
XLAとマテリアライズド・ビューを使用して特定の株式への更新を検出する取引アプリケーションの例については、「リアルタイム取引価格サービス・アプリケーション」を参照してください。
TimesTenおよびTimesTen Cacheに実装されているマテリアライズド・ビューでは、複数の表にわたる更新の検出においてパフォーマンスおよび機能が強化されています。TimesTenおよびIMDB Cache以外のマテリアライズド・ビューに精通しているユーザーは、次のメリットとデメリットに注意してください。
アプリケーションは、明示的にマテリアライズド・ビューを作成する必要があります。TimesTen問合せオプティマイザには、マテリアライズド・ビューを自動的に作成する機能はありません。
問合せオプティマイザが、ディテール表に対する問合せを再書込みしてマテリアライズド・ビューを参照することはありません。アプリケーションの問合せでビューを直接参照する必要があります。
マテリアライズド・ビューの作成に使用するSQLには一定の制限があります。
マテリアライズド・ビューを作成する場合、アプリケーションでは、ビューのメンテナンスを即時メンテナンスまたは遅延メンテナンスのいずれにするかを指定する必要があります。即時メンテナンスでは、ビューのディテール表に変更が加えられるとただちにビューがリフレッシュされます。遅延メンテナンスでは、ディテール表を更新したトランザクションがコミットされて初めてビューがリフレッシュされます。遅延メンテナンスが指定されているビューは、非同期マテリアライズド・ビューと呼ばれます。リフレッシュは自動で行うことも、アプリケーションから開始することもできます。また、リフレッシュには、増分リフレッシュと完全リフレッシュがあります。アプリケーションでは、自動リフレッシュの頻度を指定する必要があります。非同期マテリアライズド・ビューのXLA通知の順序が、関連付けられたディテール表に対するトランザクションの順序と必ずしも同じではないことに注意してください。
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トラップを使用した診断に関する説明を参照してください。