TimesTen CacheはTimesTen Classicでサポートされており、Oracle DatabaseとTimesTen Cacheデータベース間でデータを転送する機能を備えています。
Oracle DatabaseからTimesTen Cacheデータベースにデータをキャッシュするには、TimesTenにキャッシュ・グループを作成します(このとき、TimesTenでは、各キャッシュ・グループが、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からキャッシュ・グループへのデータの自動リフレッシュなどの非同期キャッシュ処理を実行します。
TimesTen Cacheの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』を参照してください。
図7-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表に同期して伝播されます。
ユーザー管理キャッシュ・グループ - ユーザー管理キャッシュ・グループでは、カスタマイズされたキャッシュ動作が定義されます。たとえば、ユーザー管理キャッシュの各キャッシュ表をすべて同じタイプに統一する必要はありません。一部の表を読取り専用として定義し、別の表を更新可能な表として定義することが可能です。
複数のTimesTen Cacheデータベースがある場合、キャッシュされている表内のデータは別個のTimesTen Cacheデータベース間で共有されません。したがって、データベースのコンテンツは、アプリケーションが様々なノード間でそれらのデータを論理的にパーティション化するか読取り専用キャッシュ・グループを使用しないかぎり、TimesTen Cacheで調整されることはなく、重複する可能性があります。
キャッシュ・グループ・タイプの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループ・タイプに関する項を参照してください。
キャッシュ・グループは動的にロードするか、または明示的にロードできます。
明示的にロードされるキャッシュ・グループの場合、アプリケーションでは、ロード・キャッシュ・グループ処理を使用して、Oracle Databaseからキャッシュ表に事前にデータがロードされます。これ以降、アプリケーションが必要とするすべてのデータがTimesTen Cacheデータベースで利用可能になります。
動的キャッシュ・グループの場合、アプリケーションでまだTimesTen Cacheに存在しないキャッシュ・インスタンスを参照すると、Oracle DatabaseからTimesTen Cacheにキャッシュ・インスタンスが自動的にロードされます。動的キャッシュ・グループを使用するときは、通常、最低使用頻度(LRU)も使用されます。これにより、最低使用頻度のキャッシュ・インスタンスをキャッシュからエイジ・アウトし、最近使用したキャッシュ・インスタンスを保存するための領域が確保されます。動的キャッシュ・グループの使用は、キャッシュ対象のデータのサイズがTimesTen Cacheデータベースに利用可能なメモリーのサイズを超えている場合に適しています。
すべてのキャッシュ・グループ・タイプ(読取り専用、AWT、SWT、ユーザー管理)は、明示的にロード済として定義することも、動的として定義することもできます。
明示的または動的にロードされるキャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。
TimesTen Cacheは、キャッシュ・グループからOracle Databaseに更新を自動的に伝播し、キャッシュ・グループのデータをOracle Databaseで自動的にリフレッシュして、キャッシュ・データとOracle Database間の整合性を確保します。
この項の後半の内容は次のとおりです。
次のメカニズムを使用して、キャッシュ・グループを、Oracle Database表の対応するデータと同期された状態で保持できます。
自動リフレッシュ - 増分自動リフレッシュ操作では、前回のリフレッシュ以降にOracle Databaseで変更されたレコードのみが更新されます。TimesTen Cacheでは、指定された時間間隔で自動的に増分リフレッシュが実行されます。また、指定された時間間隔でキャッシュ・グループ全体を自動的にリフレッシュする完全自動リフレッシュ操作を指定することもできます。
手動リフレッシュ - アプリケーションでREFRESH CACHE GROUP
文を発行し、キャッシュ・グループ全体または特定のキャッシュ・インスタンスをリフレッシュします。これは、キャッシュ・グループまたはキャッシュ・インスタンスをアンロードしてからロードするのと同じことです。
様々な状況で、これらのメカニズムは有効です。Oracle Database表の更新が1日に1回のみ行われ、更新される行数が多い場合は、完全自動リフレッシュが最適です。Oracle Database表の更新頻度は高いものの、それぞれの更新で変更される行数が少ない場合は、増分自動リフレッシュが最適です。また、リフレッシュを実行する必要のあるタイミングがアプリケーションのロジックで既知の場合は、手動リフレッシュが最適です。
キャッシュ・グループの自動リフレッシュ処理または手動リフレッシュ処理の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループ処理に関する項を参照してください。
伝播およびフラッシュのメカニズムを使用して、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
文を発行し、フラッシュ処理を開始します。フラッシュ処理は、特定の時間内に複数のレコードに対する更新が頻繁に行われる場合に有効です。フラッシュ処理では、削除は伝播されません。
キャッシュ・グループの自動リフレッシュ処理または手動リフレッシュ処理の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループ処理に関する項を参照してください。
レコードはTimesTenデータベースから自動的にエイジ・アウトでき、キャッシュ・インスタンスはTimesTen Cacheデータベースから自動的にエイジ・アウトできます。エージングは、使用量ベースまたは時間ベースにすることができます。同じシステムに使用量ベースのエージングと時間ベースのエージングの両方を構成できますが、特定のキャッシュ・グループには1つのタイプのエージングしか定義できません。
動的ロードを使用すると、エージングによって削除済のリクエストされたキャッシュ・インスタンスをリロードできます。
キャッシュ・グループのエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループでのエージングの実装に関する説明を参照してください。キャッシュ・グループにない表におけるエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。
アプリケーションでは、TimesTen Cacheへの単一の接続を使用して、キャッシュ・グループまたはOracleデータベースにSQL文を送信します。このような単一接続は、図7-2に示すパススルー機能で、SQL文はTimesTen Cacheのキャッシュ表でローカルに処理できるのか、またはOracle Databaseにリダイレクトする必要があるのかをチェックすることによって使用可能になります。パススルー機能の設定では、パススルーの対象とする文の種類とそれを実行する状況が指定されます。パススルー機能の具体的な動作は、TimesTen Cache一般接続属性PassThrough
で制御されます。
パススルー機能の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のパススルー・レベルの設定に関する説明を参照してください。
アクティブ・スタンバイ・ペアを使用すると、AWTキャッシュ・グループおよび読取り専用キャッシュ・グループをレプリケートできます。キャッシュ・グループのレプリケーションの詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のキャッシュ・グループとレプリケーションに関する項を参照してください。
TimesTen Cacheは、Oracle Data Guardをサポートするだけでなく、読取り専用およびAWTキャッシュ・グループ用のキャッシュ表のアクティブ・スタンバイ・ペアのレプリケーションを介して独自のHA機能を提供します。
次の方法を使用して、障害時リカバリ・サイトを設定できます。
Oracle Databaseに伝播するサブスクライバを持つAWTキャッシュ・グループのレプリケート
サイト全体の障害からリカバリするには、アクティブ・スタンバイ・ペアのレプリケーション・スキームの一部として、特別な障害時リカバリ読取り専用サブスクライバを作成します。スタンバイ・データベースは、読取り専用サブスクライバのキャッシュ・グループ表に更新を送信します。この特別なサブスクライバはリモートの障害時リカバリ・サイトに配置されており、(同様に障害時リカバリ・サイトに配置されている)2番目のOracle Databaseに更新を伝播できます。この障害時リカバリ・サブスクライバは、プライマリ・サイトで全体の障害が発生した場合、障害時リカバリ・サイトで新しいアクティブ・スタンバイ・ペアのアクティブとしての役割を引き継ぐことができます。この場合、すべてのアプリケーションが障害時リカバリ・サイトに接続して処理を続行でき、サービスの中断を最小限に抑えることができます。
詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のアクティブ・スタンバイ・ペアでの障害時リカバリ・サブスクライバの使用方法に関する項を参照してください。
同期または非同期Data GuardでのTimesTen Cacheの使用。
Oracle Data Guardは、管理、監視および自動化のソフトウェア・インフラストラクチャを備えており、1つ以上の同期化されたスタンバイOracleデータベースを作成および保持して障害、災害、エラーおよび破損からデータを保護します。計画停止または計画外停止のためプライマリOracleデータベースを使用できなくなった場合、Data GuardはスタンバイOracleデータベースをプライマリ・ロールに切り替えて、停止時間を最小限に抑え、データの損失を防ぐことができます。
非同期Data Guardのサポート: 非同期REDO転送モードのOracle Active Data Guardから読取り専用キャッシュ・グループに表をキャッシュできます。読取り専用キャッシュ・グループは、アクティブ・スタンバイ・ペアのレプリケーション・スキーム内でレプリケートされます。Active Data Guard構成には、単一のフィジカル・スタンバイOracleデータベースへの非同期転送を介して通信するプライマリOracleデータベースが含まれます。
同期Data Guardのサポート: TimesTen Cacheは、同期フィジカル・スタンバイのフェイルオーバーおよびスイッチオーバーとロジカル・スタンバイのスイッチオーバーと連携して機能します。一時アップグレード中に、フィジカル・スタンバイOracleデータベースがロジカル・スタンバイOracleデータベースに変換されます。
詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のData GuardでのTimesTen Cacheの使用に関する項を参照してください。