9 キャッシュ・グループの作成
TimesTenデータベースにキャッシュする一連のOracleデータベース・データは、キャッシュ・グループによって定義されます。キャッシュ・グループを作成すると、キャッシュされたOracleデータベース表に対応するキャッシュ表がTimesTenデータベースに作成されます。
ノート:
TimesTenキャッシュは、TimesTen Scaleoutデータベースではサポートされていません。
この章の内容は次のとおりです。
キャッシュ・グループの作成
キャッシュ・グループを作成するには、次の手順を実行します。
明示的にロードされるキャッシュ・グループでは、ロードまたはリフレッシュ操作を使用して手動で、または自動リフレッシュ操作を使用して自動で、対応するOracleデータベース表からキャッシュ表にデータをロードします。動的キャッシュ・グループでは、動的ロード操作を使用するか、ロード操作を使用して手動で、必要時に対応するOracleデータベース表からキャッシュ表へデータをロードします。
読取り専用、非同期ライトスルー(AWT)または同期ライトスルー(SWT)キャッシュ・グループは、動的キャッシュ・グループとして定義できます。ユーザー管理キャッシュ・グループに次のすべての特性が含まれない場合は、動的キャッシュ・グループとして定義できます。
-
自動リフレッシュが定義されている
-
キャッシュ表の1つ以上が更新可能
-
1つ以上の更新可能キャッシュ表でコミットされた更新が対応するOracleデータベース表に伝播される。
明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループおよび動的キャッシュ・グループを参照してください。
キャッシュ・グループおよびキャッシュ表属性の定義
「キャッシュ・グループの作成」ダイアログの「キャッシュ・グループ属性」タブ内で、ユーザー管理キャッシュ・グループを作成し、「表の属性」セクションで「自動リフレッシュ」を選択して、「すべての表が読取り専用」または「すべての表の伝播」が選択されたときに、自動リフレッシュを有効化する場合、または読取り専用キャッシュ・グループを作成する場合は、自動リフレッシュの特性は次のようになります。
-
「モード」フィールドに「完全」または「インクリメンタル」のいずれかを選択して、自動リフレッシュ・モードを設定します。デフォルトの自動リフレッシュ・モードは「インクリメンタル」です。
-
「リフレッシュ間隔」フィールドで、数値と、分、秒またはミリ秒の時間単位を指定して、自動リフレッシュ間隔を設定します。デフォルトの自動リフレッシュ間隔は5分です。
-
「リフレッシュ状態」フィールドで、「一時休止」、「オン」または「オフ」のいずれかを選択して、自動リフレッシュ状態を設定します。デフォルトの自動リフレッシュ状態は「一時休止」です。
キャッシュ・グループの自動リフレッシュの詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのAUTOREFRESHキャッシュ・グループ属性を参照してください。
読取り専用キャッシュ・グループの詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドの読取り専用キャッシュ・グループを参照してください。
ユーザー管理キャッシュ・グループを作成する場合は、「キャッシュ・グループの作成」ダイアログの「キャッシュ・グループ属性」タブにある「表の属性」セクションから、次のいずれかを選択します。
-
すべての表が読取り専用: すべてのキャッシュ表は読取り専用です。
-
すべての表の伝播: すべてのキャッシュ表が更新可能で、キャッシュ表でコミットされた更新が対応するOracleデータベース表に伝播されます。
-
表によって異なる: 一部のキャッシュ表は読取り専用であり、その他のキャッシュ表は更新可能で、キャッシュ表でコミットされた更新が対応するOracleデータベース表に伝播される可能性があります。
ユーザー管理キャッシュ・グループの詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのユーザー管理キャッシュ・グループを参照してください。
ルート表の定義
ルート表を定義するには、次の手順を実行します。
Oracleデータベース・シノニムのキャッシュの詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのOracleデータベース・シノニムのキャッシュを参照してください。
キャッシュする列の選択
キャッシュする列を選択するには、次の手順を実行します。
Oracleデータベース・データ型とTimesTenデータ型の間の互換性の詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのOracleデータベース・データ型とTimesTenデータ型の間のマッピングを参照してください。
更新可能なキャッシュ表に対して、キャッシュ済の各列の「デフォルト値」フィールドの下でデフォルトの列値を指定して、デフォルト値を定義できます。デフォルトでは、キャッシュ表の列のデフォルト値は、対応するOracleデータベース表の列のデフォルト値と同じです。
表属性の指定
デフォルトでは、TimesTenによってキャッシュ表の主キー列にレンジ索引が作成されます。主キー列にレンジ索引ではなくハッシュ索引を作成するには、次の手順を実行します。
-
「キャッシュ・グループの作成」の「表」タブ内の「表の属性」タブの「主キー」セクションで、「ハッシュの使用」を選択します。
-
「ハッシュ・サイズ設定ポリシー」メニューおよびコロン(:)の後の近隣のフィールド(数値が必要)に、基礎となるキャッシュ表の予想される行の最大数または索引に割り当てるページ数のいずれかを指定して、ハッシュ索引のサイズを設定する必要があります。デフォルトの選択は、「現在の表の行数」です。
キャッシュ表の主キー列に自動的に作成される索引の詳細は、Oracle TimesTen In-Memory Database SQLリファレンスのCREATE CACHE GROUPを参照してください。
ハッシュ索引の適切なサイズ設定の詳細は、Oracle TimesTen In-Memory Database SQLリファレンスのCREATE TABLEを参照してください。
デフォルトでは、キャッシュ表の主キー列は、対応するOracleデータベース表の主キー列と同じです。次のように、異なる列または一連の列をキャッシュ表の主キーとして定義できます。
- 「キャッシュ・グループの作成」ダイアログの「表」タブ内の「表の属性」タブにある「手動表管理」セクションで、「主キーの再定義」をクリックします。
- 「主キーの定義」ダイアログで、「NULLではない一意の列」リストに、対応するOracleデータベース表のNULLを許可しない一意の列が表示されます。キャッシュ表の主キーの列を選択してから、「>>」を選択して、これらの列を「主キー」リストに移動します。列にレンジ索引が作成される場合は、コンポジット主キーの列の順序が重要になります。「OK」をクリックして、キャッシュ表の代替主キーを定義します。
キャッシュ表の主キーが対応するOracleデータベース表の主キーと異なる列セットで構成されている場合、キャッシュ表または対応するOracleデータベース表でコミットされた更新が実行されると、表が非同期化になる場合があります。次の場合に、一意制約違反が発生します。
-
キャッシュ表でコミットされた更新が、対応するOracleデータベース表に伝播される場合。
-
Oracleデータベース表でコミットされた更新が対応するキャッシュ表にリフレッシュされる場合。
「キャッシュ・グループの作成」の「表」タブ内の「表の属性」タブにある「WHERE句」フィールドで、キャッシュ表にオプションのWHERE
句を指定できます。WHERE
句は、自動リフレッシュが定義されている読取り専用キャッシュ・グループまたはユーザー管理キャッシュ・グループの表定義でのみ使用できます。
キャッシュ・グループの表定義でのWHERE
句の指定の詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのWHERE句の使用を参照してください。
キャッシュ表がユーザー管理キャッシュ・グループにあり、「キャッシュ・グループの作成」ダイアログの「キャッシュ・グループ属性」タブ内の「表の属性」セクションで「表によって異なる」が選択されている場合、キャッシュ表に表属性を指定する必要があります。
「キャッシュ・グループの作成」の「表」タブ内の「表の属性」タブにある「伝播タイプ」セクションで、次を選択します。
-
読取り専用: キャッシュ表を読取り専用として定義します
-
伝播: キャッシュ表を更新可能として定義します(表での更新が対応するOracleデータベース表に伝播されます)。
-
両方なし: キャッシュ表を更新可能として定義します(表での更新は対応するOracleデータベース表に伝播されません)。
デフォルトでは、ユーザー管理キャッシュ・グループのキャッシュ表は更新可能で、表の更新は対応するOracleデータベース表には伝播されません。
エージング・ポリシーの指定
「キャッシュ・グループの作成」ダイアログの「経過」タブで、キャッシュ表にエージング・ポリシーを指定できます。エージング・ポリシーは、キャッシュ・グループのルート表で明示的に定義され、すべての子表に暗黙的に適用されます。
次のうちから選択します。
-
使用方法ベース: 最低使用頻度(LRU)エージング・ポリシーを定義します。
-
時間ベース: 時間ベースのエージング・ポリシーを定義します。
-
経過なしエージング・ポリシーを定義しません。
LRUエージング・ポリシーは、自動リフレッシュが定義されていない明示的にロードされるAWT、SWTまたはユーザー管理キャッシュ・グループの表に定義することができます。明示的にロードされるキャッシュ・グループでは、デフォルトのエージング状態はOFFに設定されています。自動リフレッシュが定義されていない動的キャッシュ・グループでは、デフォルトのエージング状態はオンに設定されており、エージングのタイプは、使用方法ベースに設定されています。
「使用方法ベース」を選択すると、LRUエージングが適用される表からのデータの削除を開始および停止するタイミングを決定する、TimesTenデータベースのメモリー使用量のしきい値が表示されます。表からのデータの削除が開始されるタイミングを決定するデフォルトの使用量しきい値は90%です。表からのデータの削除を停止するタイミングを決定するデフォルトの使用量しきい値は80%です。デフォルトのLRUエージングのサイクルは1分です。
メモリー使用量のしきい値およびLRUエージング・サイクルの変更の詳細は、「メモリー使用量のしきい値およびLRUエージング・サイクルの変更」を参照してください。
キャッシュ表でのLRUエージング・ポリシーの定義の詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのLRUエージングを参照してください。
時間ベースのエージング・ポリシーは、NULLを許可しないDATE
列またはTIMESTAMP
列が含まれるキャッシュ表に定義できます。これらのデータ型の表の列は、「時間ベース」が選択されると、「キャッシュ・グループの作成」ダイアログの「経過」タブ内の「列」に表示されます。各行が挿入された時間または最新の更新時間を示すタイムスタンプ値を格納する列を選択します。
-
「存続期間」フィールドで、数値と、ドロップダウン・メニュー・リストから分、時間または日の時間単位を指定して、更新されたデータが表で保持される期間を指定します。
-
「サイクル」フィールドで、数値と、ドロップダウン・メニュー・リストから分、時間または日の時間単位を指定して、データが表からエージ・アウトされる頻度を指定します。デフォルトの時間ベースのエージング・サイクルは5分です。
-
「オン」または「オフ」を選択して、エージング状態を指定します。
キャッシュ表での時間ベースのエージング・ポリシーの定義の詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドの時間ベースのエージングを参照してください。
ルート表定義の検証
キャッシュする表および列、主キー列に作成する索引のタイプ、オプションのWHERE
句を含む表属性およびルート表のオプションのエージング・ポリシーを定義した後、「キャッシュ・グループの作成」ダイアログの「DDL」タブで、キャッシュ・グループおよびそのキャッシュ表の作成に使用するCREATE CACHE GROUP
文を表示することができます。
キャッシュ・グループに子表を追加しない場合は、「適用」をクリックして、キャッシュ・グループおよびそのキャッシュ表を作成します。
CREATE CACHE GROUP
文の構文およびセマンティックの詳細は、Oracle TimesTen In-Memory Database SQLリファレンスのCREATE CACHE GROUP参照してください。
子表の定義
子表を定義するには、次の手順を実行します。
表属性の指定
「キャッシュ・グループの作成」ダイアログの「表」タブ内の「表の属性」タブで、ルート表に指定したときと同じ形式で子キャッシュ表の主キー列にレンジ索引またはハッシュ索引を作成するかどうかを選択します。ルート表に指定したときと同じ形式で、キャッシュ表の主キーとして、対応するOracleデータベース表の列とは異なる列または列セットを定義できます。また、ルート表に指定したときと同じ形式で、キャッシュ表にオプションのWHERE
句を指定することもできます。WHERE
句は、自動リフレッシュが定義されている読取り専用キャッシュ・グループまたはユーザー管理キャッシュ・グループの表定義でのみ使用できます。
参照キー値を含む行が親表から削除されると、依存する外部キー値を持つ子表の行も削除されるように、子表の外部キー列でカスケード削除を有効にする場合は、「外部キーのカスケード削除」を選択します。
デフォルトでは、子キャッシュ表の外部キー列は、対応するOracleデータベース表の外部キー列と同じです。キャッシュ表の外部キーとして異なる列または列セットを定義することができます。
「キャッシュ・グループの作成」ダイアログの「表」タブ内の「表の属性」タブにある「手動表管理」セクションで、「外部キーの再定義」を選択します。図9-3を参照してください。
「外部キーの定義」ダイアログで、「外部キー」ドロップダウン・リストに親表の主キー列と互換性のあるデータ型の子表の列が表示されます。キャッシュ表の外部キーに列を選択します。「OK」をクリックして、キャッシュ表の代替外部キーを定義します。
複数表のキャッシュ・グループ内のキャッシュ表の階層および関係の詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドの複数表のキャッシュ・グループを参照してください。
子キャッシュ表が、「キャッシュ・グループの作成」ダイアログの「キャッシュ・グループ属性」タブ内の「表の属性」セクションで「表によって異なる」を選択したユーザー管理キャッシュ・グループにある場合は、キャッシュ表の属性をルート表と同じ形式で指定します。キャッシュ表が更新可能である場合に、表の更新が対応するOracleデータベース表に伝播されるかどうかを指定します。
キャッシュ・グループ定義の検証
「キャッシュ・グループの作成」ダイアログの「DDL」タブで、キャッシュ・グループおよびそのキャッシュ表の作成に使用するCREATE CACHE
GROUP
文を表示できます。
「適用」をクリックして、キャッシュ・グループおよびそのキャッシュ表を作成します。
AWTキャッシュ・グループを作成した場合は、そのキャッシュ表でコミットされた更新用にレプリケーション・エージェントを起動して、対応するOracleデータベース表に非同期的に伝播する必要があります。レプリケーション・エージェントの起動方法の詳細は、「レプリケーション・エージェントの起動」を参照してください。
キャッシュ・グループの削除
キャッシュ・グループを削除すると、そのキャッシュ表も削除されます。
- TimesTenデータベースの接続名のノード内の「キャッシュ・グループ」ノードの下で、削除対象のキャッシュ・グループの名前を右クリックして、「削除」を選択します。
- 「適用」をクリックして、キャッシュ・グループを削除します。
キャッシュ・グループの削除の詳細は、Oracle TimesTen In-Memory Databaseキャッシュ・ガイドのキャッシュ・グループの削除を参照してください。