Oracle RAC環境でのキャッシュの動作
Oracle RACでは、共有リソース(クラスタウェア共有ファイル・システムに存在するすべてのデータ・ファイル、制御ファイル、PFILEおよびREDOログ・ファイルを含む)を持つ1つのOracle Databaseに複数のOracle Databaseインスタンスでアクセスできます。Oracle RACでは、高可用性が提供されるとともに、読取り/書込み一貫性およびロード・バランシングが処理されます。
Fast Application Notification (FAN)は、Oracle DatabaseでOracle Call Interface (OCI)に統合されたOracle RAC機能です。FANによって、FANイベントをサブスクライブするアプリケーションにクラスタ内の変更がパブリッシュされます。FANによって、次に示す不要な処理が実行されなくなります。
-
サービスが停止した場合の接続の試行
-
サービスがダウンした場合のトランザクション処理終了の試行
-
TCP/IPタイムアウトの待機
Oracle RACおよびFANの詳細は、『Oracle Real Application Clusters Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。
キャッシュ処理を容易にするために、TimesTenでは、FANと統合されたOCIを使用してOracle Databaseイベントの通知を受信します。FANがある場合、TimesTenでは1分以内に接続障害が検出されます。FANがない場合、TimesTenではOracle Database障害の通知の受信に数分かかる可能性があります。FANがない場合にTimesTenで接続障害を検出するのは、次回にその接続が使用されるとき、またはTCP/IPタイムアウトが発生したときになります。TimesTenを使用すると、ユーザーの介入なしでOracle Database障害から迅速にリカバリできます。
TimesTenでは、透過的アプリケーション・フェイルオーバー(TAF)も使用しますが、これは障害発生後にアプリケーションを再接続する方法を指定できるOracle Net Servicesの機能です。
TAFの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。TAFでは、Oracle Databaseへの再接続を4分間試行します。再接続が成功しない場合は、キャッシュ・エージェントが再起動され、1分ごとにOracle Databaseへの再接続が試行されます。
ノート:
AgentFailoverTimeout
パラメータを指定して接続を確立する際に、TAFが再試行する時間を構成できます。詳細は、「Oracle RAC環境でのキャッシュの設定」を参照してください。
OCIアプリケーションでは、次のいずれかのタイプのOracle Netフェイルオーバー機能を使用できます。
-
NONE
: フェイルオーバー機能は使用されません。このタイプでは、フェイルオーバーが発生しないように指定することもできます。これがデフォルトのフェイルオーバー機能です。 -
SESSION
: アプリケーションの接続が失われると、そのアプリケーション用の新しい接続が自動的に作成されます。このタイプのフェイルオーバーでは、選択した項目のリカバリは試行されません。 -
SELECT
: このタイプのフェイルオーバーでは、フェイルオーバー前にカーソルから行のフェッチを開始していたアプリケーションは、フェイルオーバー後に行のフェッチを続行できます。
キャッシュ処理の動作は、TAFのアクションおよびTAFの構成方法によって異なります。デフォルトでは、Oracle RAC環境でキャッシュを使用している場合、TAFおよびFANのコールバックがインストールされます。TAFおよびFANの機能が不要な場合は、RACCallback
接続属性を0に設定します。
表9-1に、様々なTAFフェイルオーバー・タイプが指定されたOracle RAC環境でのキャッシュ処理の動作を示します。
表9-1 Oracle RAC環境でのキャッシュ処理の動作
処理 | TAFフェイルオーバー・タイプ | Oracle Databaseで接続障害が発生した後の動作 |
---|---|---|
自動リフレッシュ |
なし |
キャッシュ・エージェントが自動的に停止して再起動し、Oracle Databaseで接続が確立できるようになるまで待機します。この動作は、Oracle RAC以外の環境の場合と同様です。 ユーザーが介入する必要はありません。 |
自動リフレッシュ |
|
次のいずれかが発生します。
|
自動リフレッシュ |
|
次のいずれかが発生します。
|
AWT |
なし |
AWTキャッシュ・グループのレプリケーション・エージェントのレシーバ・スレッドが終了します。新しいスレッドが作成され、そのスレッドによってOracle Databaseへの接続が試行されます。 ユーザーが介入する必要はありません。 |
AWT |
|
次のいずれかが発生します。
いずれの場合も、ユーザーが介入する必要はありません。 |
SWT、伝播、フラッシュおよびパススルー |
なし |
接続が失われたことがアプリケーションに通知されます。キャッシュ・エージェントがOracle Databaseから切断され、現在のトランザクションがロールバックされます。変更されたすべてのセッション属性が失われます。 次のパススルー処理中に、キャッシュ・エージェントによってOracle Databaseへの再接続が試行されます。この動作は、Oracle RAC以外の環境の場合と同様です。 ユーザーが介入する必要はありません。 |
SWT、伝播、フラッシュおよびパススルー SWT、伝播およびフラッシュ |
|
次のいずれかが発生します。
|
パススルー |
|
Oracle Databaseへの接続がリカバリされます。失われた接続でDML処理またはロック処理が行われていた場合は、エラーが返されるため、ユーザーは続行する前にトランザクションをロールバックする必要があります。前述の状態でなかった場合は、ロールバックせずに続行できます。 |
ロードおよびリフレッシュ |
なし |
接続が失われたことを示すエラーがアプリケーションに通知されます。 |
ロードおよびリフレッシュ |
|
次のいずれかが発生します。
|
ロードおよびリフレッシュ |
|
次のいずれかが発生します。
ノート: TAFフェイルオーバー・タイプがSESSIONの場合より、エラーが返される可能性は低くなります。 |