この章では、Oracle Real Application Clusters(RAC)環境でのOracle In-Memory Database Cacheの使用方法について説明します。内容は次のとおりです。
Oracle RACでは、共有リソース(クラスタウェア共有ディスクに存在するすべてのデータファイル、制御ファイル、PFILEおよびREDOログ・ファイルを含む)を持つ1つのOracle Databaseに複数のOracleインスタンスでアクセスできます。RACでは、高可用性が提供されるとともに、読取り/書込み一貫性およびロード・バランシングが処理されます。
Fast Application Notification(FAN)は、Oracle Database 10gリリース2でOracle Call Interface(OCI)に統合されたRAC機能です。FANによって、FANイベントをサブスクライブするアプリケーションにクラスタ内の変更がパブリッシュされます。 また、次に示す不要な処理が実行されなくなります。
サービスが停止した場合の接続の試行
サービスがダウンした場合のトランザクション処理終了の試行
TCP/IPタイムアウトの待機
RACおよびFANの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。
Oracle In-Memory Database Cacheでは、FANと統合されたOCIを使用してOracleイベントの通知を受信します。 Oracle In-Memory Database Cacheでは、FANがない場合、Oracle障害の通知の受信に数分かかる可能性があります。 Oracle In-Memory Database Cacheを使用すると、ユーザーの介入なしでOracle障害から迅速にリカバリできます。
Oracle In-Memory Database Cacheでは、透過的アプリケーション・フェイルオーバー(TAF)も使用されます。TAFは、障害発生後にアプリケーションを再接続する方法を指定できるOracle Net Servicesの機能です。 TAFの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
OCIアプリケーションでは、次のいずれかのタイプのOracle Netフェイルオーバー機能を使用できます。
NONE
: フェイルオーバー機能は使用されません。このタイプでは、フェイルオーバーが発生しないように明示的に指定することもできます。 これがデフォルトのフェイルオーバー機能です。
SESSION
: アプリケーションの接続が失われると、そのアプリケーション用の新しい接続が自動的に作成されます。このタイプのフェイルオーバーでは、選択した項目のリカバリは試行されません。
SELECT
: このタイプのフェイルオーバーでは、フェイルオーバー前にカーソルから行のフェッチを開始していたアプリケーションは、フェイルオーバー後に行のフェッチを続行できます。
Oracle In-Memory Database Cacheの動作は、TAFのアクションおよびTAFの構成方法によって異なります。 デフォルトでは、Oracle RAC環境でOracle In-Memory Database Cacheを使用している場合、TAFおよびFANのコールバックがインストールされます。 TAFおよびFANの機能が不要な場合は、RACCallback DSN属性を0に設定します。
表9-1に、異なるTAFフェイルオーバー・タイプが指定されたRAC環境でのOracle In-Memory Database Cache処理の動作を示します。
表9-1 RAC環境でのOracle In-Memory Database Cache処理の動作
処理 | TAFフェイルオーバー・タイプ | Oracle Databaseで接続障害が発生した後の動作 |
---|---|---|
自動リフレッシュ |
NONE |
キャッシュ・エージェントが自動的に停止して再起動し、Oracle Databaseで接続が確立できるようになるまで待機します。この動作は、RAC以外の環境の場合と同様です。 ユーザーが介入する必要はありません。 |
自動リフレッシュ |
SESSION |
次のいずれかが発生します。
|
自動リフレッシュ |
SELECT |
次のいずれかが発生します。
|
AWT |
NONE |
AWTキャッシュ・グループのレプリケーション・エージェントのレシーバ・スレッドが終了します。新しいスレッドが作成され、そのスレッドによってOracle Databaseへの接続が試行されます。 ユーザーが介入する必要はありません。 |
AWT |
SESSION、SELECT |
次のいずれかが発生します。
いずれの場合も、ユーザーが介入する必要はありません。 |
SWT、伝播、フラッシュおよびパススルー |
NONE |
接続が失われたことがアプリケーションに通知されます。キャッシュ・エージェントがOracle Databaseから切断され、現在のトランザクションがロールバックされます。変更されたすべてのセッション属性が失われます。 次のパススルー処理中に、キャッシュ・エージェントによってOracle Databaseへの再接続が試行されます。この動作は、RAC以外の環境の場合と同様です。 ユーザーが介入する必要はありません。 |
SWT、伝播、フラッシュおよびパススルー SWT、伝播およびフラッシュ |
SESSION SELECT |
次のいずれかが発生します。
|
パススルー |
SELECT |
Oracle Databaseへの接続がリカバリされます。 失われた接続でDML処理またはロック処理が行われていた場合は、エラーが返されるため、ユーザーは続行する前にトランザクションをロールバックする必要があります。前述の状態でなかった場合は、ロールバックせずに続行できます。 |
ロードおよびリフレッシュ |
NONE |
接続が失われたことを示すエラーがアプリケーションに通知されます。 |
ロードおよびリフレッシュ |
SESSION |
次のいずれかが発生します。
|
ロードおよびリフレッシュ |
SELECT |
次のいずれかが発生します。
注意: TAFフェイルオーバー・タイプがSESSIONの場合より、エラーが返される可能性は低くなります。 |
RACでのOracle In-Memory Database Cacheのサポートには、次の制限があります。
Oracle In-Memory Database Cacheの動作は、RAC、FANおよびTAFの機能に制限されます。たとえば、サービスのすべてのノードが正常に実行されなかった場合、そのサービスは再起動されません。 Oracle In-Memory Database Cacheは、ユーザーがサービスを再起動するまで待機します。
TAFでは、ALTER SESSION処理はリカバリされません。障害発生後に変更されたセッション属性のリストアは、ユーザーが行う必要があります。
Oracle In-Memory Database Cacheでは、FANと統合されたOCIが使用されます。このインタフェースは、スレッドを自動的に作成し、Oracleイベントが発生するまで待機します。 TimesTen直リンクのアプリケーションでスレッドを作成するOracle In-Memory Database Cacheの機能は、この機能のみです。 このスレッド作成が行われるようにアプリケーションを調整します。 追加スレッドが不要な場合は、RACCallback
DSN属性を0に設定すると、TAFおよびFANが使用されなくなります。
Oracle RACおよびOracle In-Memory Database Cacheをインストールします。 キャッシュ管理ユーザーにSELECT ANY DICTIONARY権限があることを確認します。
TAFタイムアウトを制御するTimesTen環境変数には、次の2つがあります。
TT_ORA_FAILOVER_TIMEOUT: アプリケーションのTAFタイムアウト(分)。 SWTキャッシュ・グループ、PROPAGATEキャッシュ表属性を使用するユーザー管理キャッシュ・グループおよびパススルー機能の使用に適用されます。デフォルトは5分です。
TT_AGENT_ORA_FAILOVER_TIMEOUT: レプリケーション・エージェントのTAFタイムアウト(分)。 AWTキャッシュ・グループに適用されます。デフォルトは5分です。
TimesTenデーモンおよびキャッシュ・エージェントが起動されていることを確認します。次のOracleコンポーネントも起動されている必要があります。
Oracleインスタンス
Oracleリスナー
Oracle In-Memory Database Cacheで使用されるOracleサービス
次に、次の手順を実行します。
DBMS_SERVICE.MODIFY_SERVICE
ファンクションまたはOracle Enterprise Managerを使用してFANイベントのパブリッシュを有効にします。 これによって、Oracle ALL_SERVICESビューのAQ_HA_NOTIFICATIONS列の値がYESに変更されます。
DBMS_SERVICE
Oracle PL/SQLパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
次のいずれかの方法で、Oracle In-Memory Database Cacheで使用されるOracleサービスに対してTAFを有効にします。
Oracle tnsnames.ora
ファイルに、次のように設定したTimesTen用サービスを作成します。
LOAD_BALANCE=ON
(オプション)
FAILOVER_MODE=(TYPE=SELECT)
またはFAILOVER_MODE=(TYPE=SESSION)
DBMS_SERVICE.MODIFY_SERVICE
ファンクションを使用して、TAFフェイルオーバー・タイプを設定します。
TAFの有効化の詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
TimesTen直リンク・アプリケーションの場合は、FAN通知を受信できるようにアプリケーションをスレッド・ライブラリにリンクします。FANによって、障害を監視するスレッドが作成されます。