ヘッダーをスキップ
Oracle Database JDBC開発者ガイドおよびリファレンス
11gリリース1(11.1)
E05720-02
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

27 透過的アプリケーション・フェイルオーバー

この章では、次の項目について説明します。

透過的アプリケーション・フェイルオーバーの概要

透過的アプリケーション・フェイルオーバー(TAF)は、Java Database Connectivity(JDBC)Oracle Call Interface(OCI)ドライバの機能の1つです。この機能により、接続先のデータベース・インスタンスに障害が発生した場合でも、アプリケーションはデータベースに自動的に再接続できます。この場合、アクティブ・トランザクションはロールバックされます。

接続先インスタンスで障害が発生したり、このインスタンスがシャットダウンしたりすると、クライアント側の接続が無効になり、その接続を使用しようとしたコール元に例外が表示されます。TAFにより、アプリケーションは、事前に構成した2次インスタンスに透過的に再接続し、最初の元のインスタンスで確立したのと同じ接続を新たに作成します。つまり、この接続プロパティは、直前の接続のプロパティと同じです。接続がどのように切断されても関係ありません。


注意:

  • TAFは常にアクティブなので、設定する必要はありません。

  • TAFはOCI接続プールでは使用できません。


フェイルオーバー・タイプ・イベント

OracleOCIFailoverインタフェースで発生する可能性があるフェイルオーバー・イベントは、次のとおりです。

TAFコールバック

TAFコールバックは、1つのデータベース接続に障害が起きた場合に、別のデータベース接続にフェイルオーバーする際に使用されます。TAFコールバックは、フェイルオーバーが発生したときに登録されるコールバックです。コールバックは、フェイルオーバー中にイベントが発生したことをJDBCアプリケーションに通知するためにコールされます。アプリケーション側でもフェイルオーバーをある程度制御できます。


注意:

コールバックの設定はオプションです。

Java TAFコールバック・インタフェース

OracleOCIFailoverインタフェースには、次の型とイベントをサポートするcallbackFnメソッドが含まれます。

public interface OracleOCIFailover{

// Possible Failover Types
public static final int FO_SESSION = 1;
public static final int FO_SELECT  = 2;
public static final int FO_NONE  = 3;
public static final int;

// Possible Failover events registered with callback
public static final int FO_BEGIN   = 1;
public static final int FO_END     = 2;
public static final int FO_ABORT   = 3;
public static final int FO_REAUTH  = 4;
public static final int FO_ERROR  = 5;
public static final int FO_RETRY  = 6;
public static final int FO_EVENT_UNKNOWN = 7;

public int callbackFn (Connection conn,
                       Object ctxt, // ANy thing the user wants to save
                       int type, // One of the possible Failover Types
                       int event ); // One of the possible Failover Events

FO_ERRORイベントの処理

新しい接続にフェイルオーバーするときにエラーが発生した場合、JDBCアプリケーションはそのフェイルオーバーを再試行できます。一般に、アプリケーションは一度スリープ状態に入った後、コールバックでFO_RETRYを戻すことで、無限または一定の時間のみ再試行します。

FO_ABORTイベントの処理

登録されたコールバックは、FO_ERRORイベントが渡された場合、FO_ABORTイベントを戻す必要があります。