Oracle Data GuardはOracleデータベースと統合されたソフトウェアで、スタンバイ・データ
ベースと呼ばれる本番データベースのリアルタイム・コピーを管理し、このインスタンスと冗 長データベースとの同期状態を維持します。Oracle Data Guardは、ログ転送サービス、管理さ れたリカバリ、スイッチオーバーおよびフェイルオーバーの各機能を使用して、この2つの データベースを管理します。
Real Application Clusters ( ( ( ( RAC ) ) ) )
RACは複数のノードまたはコンピュータを使用し、それぞれのノードまたはコンピュータで
は、Oracleインスタンスが実行され、共有ディスク記憶域に常駐する1つのデータベースにア
クセスします。RAC環境では、すべてのアクティブ・インスタンスが共有データベースに対し て同時にトランザクションを実行できます。RACでは、共有データへの各インスタンスのアク セスが自動的に調整され、データ一貫性とデータ整合性が提供されます。
データ・ソースの高可用性のサポート
RACは、次の2つのタイプのフェイルオーバー・メカニズムに依存します。
■ ネットワーク・フェイルオーバー。ネットワーク層に実装されます。
■ 透過的アプリケーション・フェイルオーバー(TAF)。ネットワーク層の最上位に実装され ます。
ネットワーク・フェイルオーバー ネットワーク・フェイルオーバー ネットワーク・フェイルオーバー ネットワーク・フェイルオーバー
ネットワーク・フェイルオーバーはデフォルト・フェイルオーバーであり、JDBCシン・ドラ イバの使用時に使用できるのは、このタイプのフェイルオーバーのみです。ネットワーク・
フェイルオーバーにより、RACクラスタ内のデータベース・インスタンスが停止した後に作成 される新しいデータベース接続は、その作成に停止したデータベース・インスタンスのtns別 名が使用されても、同じクラスタ内のバックアップまたは残存データベース・インスタンスに 対して作成されることが保証されます。使用可能なフェイルオーバー・メカニズムがネット ワーク・フェイルオーバーのみの場合、既存の接続が残存するRACインスタンスに自動的に再 接続されることはありません。既存の接続は使用できなくなり、使用しようとすると
ORA-03113例外が戻されます。ネットワーク・フェイルオーバーのみを実行するように構成さ
れているRACクラスタでフェイルオーバーが発生すると、進行中のデータベース操作(AQ操 作など)は様々な例外が発生して失敗する可能性があります。
TAF フェイルオーバー フェイルオーバー フェイルオーバー フェイルオーバー
TAFフェイルオーバーを使用できるのは、JDBC OCIドライバを使用している場合のみです。
このタイプのフェイルオーバーを有効化するには、JDBC接続の作成に使用するTNS別名の
CONNECT_DATAの一部としてFAILOVER_MODEを設定する必要があります。
TAFは、RACやData Guardなどの高可用性環境を対象としたランタイム・フェイルオーバー
であり、アプリケーションからサービスへの接続をフェイルオーバーして再確立することを指 します。これにより、クライアント・アプリケーションは接続に失敗した場合にデータベース に自動的に再接続でき、進行中だったSELECT文を必要に応じて再開できます。この再接続
は、Oracle Call Interface(OCI)ライブラリ内で自動的に発生します。
TAFは、RACクラスタに属するデータベース・インスタンスに対して作成されたデータベース 接続で進行中の操作について、ベスト・エフォート・フェイルオーバー・メカニズムを提供し ます。また、既存の接続(フェイルオーバー時に使用中でない接続)をバックアップまたは残 存データベース・インスタンスに再接続することを保証しようとします。ただし、最後にコ ミットされたトランザクションより後に発生したトランザクション操作の場合、TAFが常に再 実行できるわけではありません。この動作が発生すると、通常はORA-25408(「安全にコール を再実行することはできません。」)エラーがスローされます。この場合、データベース接続を 再び使用するには、アプリケーションが現行のトランザクションを明示的にロールバックする 必要があります。また、アプリケーションは、最後にコミットしたトランザクションより後の 操作をすべて再実行して、フェイルオーバー発生前と同じ状態に戻す必要があります。
TAFの保護またはフェイルオーバーの対象となるのは、次のとおりです。
■ データベース接続
■ ユーザー・セッションの状態
■ プリコンパイルされたSQL文
■ 障害時に結果を戻し始めていたアクティブ・カーソル(SELECT文)
TAFの保護またはフェイルオーバーの対象外となるのは、次のとおりです。
■ OCI8以上を使用していないアプリケーション
■ PL/SQLパッケージの状態など、サーバー・サイド・プログラム変数
■ アクティブな更新トランザクション(4-31ページの「TAF例外の確認」を参照)
OC4J における高可用性( における高可用性( における高可用性( における高可用性( HA )のサポート )のサポート )のサポート )のサポート
OC4Jは、HAアーキテクチャの一部としてRAC、Data GuardおよびTAFと統合できます。
この項では、HAに直接関連するOC4J固有の構成上の問題について説明します。この情報を MAAの推奨事項および手順とともに参考にしてください。
OC4JのHA構成には、次のような問題点があります。
■ OC4Jでのネットワーク・フェイルオーバーの構成
■ OC4Jでの透過的アプリケーション・フェイルオーバー(TAF)の構成
■ 接続プーリング
■ TAF例外の確認
■ SQL例外処理
OC4J でのネットワーク・フェイルオーバーの構成 でのネットワーク・フェイルオーバーの構成 でのネットワーク・フェイルオーバーの構成 でのネットワーク・フェイルオーバーの構成
ネットワーク・フェイルオーバーを使用するようにOC4Jを構成する手順は、次のとおりです。
1. data-sources.xmlでネットワーク・フェイルオーバー対応のデータ・ソースを構成し ます。
次に例を示します。
<data-source
class="com.evermind.sql.DriverManagerDataSource"
name="OracleDS"
location="jdbc/OracleCoreDS"
xa-location="jdbc/xa/OracleXADS"
ejb-location="jdbc/OracleDS"
connection-driver="oracle.jdbc.driver.OracleDriver"
username="scott"
password="tiger"
url="jdbc:oracle:thin:@(DESCRIPTION=
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP) (HOST=host1) (PORT=1521)) (ADDRESS=(PROTOCOL=TCP) (HOST=host2) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=service_name)))"
inactivity-timeout="300"
connection-retry-interval="2"
max-connect-attempts="60"
max-connections="60"
min-connections="12"
/>
この例では、url要素に注意してください。複数のホストが指定されている場合、JDBC クライアントは現行のホストにアクセスできなければ代替ホストの1つをランダムに選択 します。
データ・ソース構成の詳細は、4-7ページの「データ・ソースの定義」を参照してくださ い。
データ・ソースの高可用性のサポート
OC4J での透過的アプリケーション・フェイルオーバー( での透過的アプリケーション・フェイルオーバー( での透過的アプリケーション・フェイルオーバー( での透過的アプリケーション・フェイルオーバー( TAF )の構成 )の構成 )の構成 )の構成
TAFを使用するようにOC4Jを構成する手順は、次のとおりです。
1. 4-30ページの「TAF記述子の構成(tnsnames.ora)」の説明に従ってTAF記述子を構成し ます。
2. data-sources.xmlでTAF対応のデータ・ソースを構成します。次に例を示します。
<data-source
class="com.evermind.sql.DriverManagerDataSource"
name="OracleDS"
location="jdbc/OracleCoreDS"
xa-location="jdbc/xa/OracleXADS"
ejb-location="jdbc/OracleDS"
connection-driver="oracle.jdbc.driver.OracleDriver"
username="scott"
password="tiger"
url="jdbc:oracle:oci8:@(description=(load_balance=on)(failover=on) (address=(protocol=tcp)(host=db-node1)(port=1521))
(address=(protocol=tcp)(host=db-node2)(port=1521)) (address=(protocol=tcp)(host=db-node3)(port=1521)) (address=(protocol=tcp)(host=db-node4)(port=1521)) (connect_data=
(service_name=db.us.oracle.com)
(failover_mode=(type=select)(method=basic)(retries=20)(delay=15))))"
rac-enabled="true"
inactivity-timeout="300"
connection-retry-interval="2"
max-connect-attempts="60"
max-connections="60"
min-connections="12"
/>
この例では、url要素のfailoverがonで、failover_modeが定義されていること に注意してください。複数のホストが指定されている場合、JDBCクライアントは現行の ホストにアクセスできなければ代替ホストの1つをランダムに選択します。failover_
modeオプションの詳細は、4-30ページの表4-7「TAF構成オプション」を参照してくださ い。
データ・ソース構成の詳細は、4-7ページの「データ・ソースの定義」を参照してくださ い。
3. orion-application.xmlファイルで、Oracle JMSをJMS用リソース・プロバイダとし て構成します。次に例を示します。
<resource-provider
class="oracle.jms.OjmsContext" name="cartojms1">
<description> OJMS/AQ </description>
<property name="datasource" value="jdbc/CartEmulatedDS"></property>
</resource-provider>
注意 注意 注意
注意: TAFを使用するように構成できるのは、JDBC OCIクライアントを使 用するように構成されているデータ・ソースのみです。
TAF 記述子の構成( 記述子の構成( 記述子の構成( 記述子の構成( tnsnames.ora ) ) ) )
TAFは、tnsnames.oraファイルのNet8パラメータを使用して構成されます。
接続記述子のCONNECT_DATAセクションにFAILOVER_MODEパラメータを使用してTAF を構成できます。表4-7に、TAFがサポートしているサブパラメータを示します。
次の例では、Oracle Netはsales1-serverまたはsales2-server上のプロトコル・アドレ スの1つにランダムに接続します。接続後にインスタンス障害が発生すると、TAFアプリケー ションは別のノード上のリスナーにフェイルオーバーします。
sales.us.acme.com=
(DESCRIPTION=
(LOAD_BALANCE=on) (FAILOVER=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)) (CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com) (FAILOVER_MODE=
表 表 表
表4-7 TAF構成オプション構成オプション構成オプション構成オプション サブパラメータ
サブパラメータ サブパラメータ サブパラメータ 説明説明説明説明
BACKUP バックアップ接続用に別のネット・サービス名を指定します。PRECONNECT
METHODを使用して接続を事前確立する場合は、バックアップを指定する必要
があります。
TYPE フェイルオーバーのタイプを指定します。Oracle Call Interface(OCI)アプリ ケーションには、デフォルトで次の3つのタイプのOracle Netフェイルオーバー 機能を使用できます。
■ SESSION: 設定すると、セッションがフェイルオーバーされます。ユーザー
の接続が失われると、バックアップ上でユーザー用に新規セッションが自動 的に作成されます。このタイプのフェイルオーバーは、SELECTのリカバリ を試行しません。
■ SELECT: 設定すると、オープン・カーソルを使用するユーザーは障害後も引
き続きフェッチできます。ただし、このモードでは、通常のSELECT操作中 にクライアント・サイドにオーバーヘッドが発生します。
■ NONE: これはデフォルト・タイプです。フェイルオーバー機能は使用され
ません。フェイルオーバーが発生しないように明示的に指定することもでき ます。
METHOD プライマリ・ノードからバックアップ・ノードへのファスト・フェイルオーバー
の実行方法を決定します。
■ BASIC: 設定すると、フェイルオーバー時に接続が確立されます。このオプ
ションでは、フェイルオーバー時までバックアップ・サーバー上ではほとん ど処理を必要としません。
■ PRECONNECT: 設定すると、接続が事前確立されます。この場合、フェイ
ルオーバーは高速になりますが、バックアップ・インスタンスでは、すべて のサポート対象インスタンスからの全接続をサポートできる必要がありま す。
RETRIES フェイルオーバー後に接続を試行する回数を指定します。DELAYを指定すると、
RETRIESでの再試行回数はデフォルトで5回になります。
注意 注意 注意
注意: コールバック関数が登録されている場合、このサブパラメータは無視され
ます。
DELAY 接続試行間で待機する秒数を指定します。RETRIESを指定すると、DELAYはデ
フォルトで1秒になります。
注意注意
注意注意: コールバック関数が登録されている場合、このサブパラメータは無視され ます。