この章では、可用性の高いOracleデータベース・アクセスの考慮事項について説明します。
この章に含まれている項は次のとおりです。
Fusion Middlewareコンポーネントのほとんどでは、そのデータの永続ストアとしてデータベースが使用されます。Oracleデータベース・バックエンドは、Cold Failover Clusters、Real Application Clusters、Oracle Data Guard、Oracle Streamsなど、任意の数の高可用性構成で構成できます。これらの高可用性構成の詳細は、Oracle Databaseの高可用性の概要を参照してください。この章では、可用性の高いOracleデータベースであるOracle Real Application Clustersで構成されたOracle Fusion Middlewareの考慮事項について説明します。
Oracle Real Application Clusters(Oracle RAC)は、相互接続された複数のコンピュータの処理能力を利用するコンピューティング環境です。クラスタと呼ばれるハードウェアの集合とともに、各コンポーネントの処理能力を結合して単一の堅牢なコンピューティング環境を構成します。クラスタは、2つ以上のコンピュータ(ノードともいう)で構成します。Oracle Real Application Clustersは同時に、Oracle Fusion Middlewareに対して、スケーラビリティおよび可用性の高いデータベースを提供します。
クラスタ内のすべてのOracle RACインスタンスは、同じアクセス権および認可レベルを持ちます。したがって、ノードおよびインスタンスに障害が発生しても、障害が発生していないサーバー・インスタンスでデータベース・サービスが利用可能であるか、利用可能な状態にすることができるため、パフォーマンスに影響を及ぼす場合はありますが、停止することはありません。
Oracle Real Application Clustersの詳細は、Oracle Real Application Clusters管理およびデプロイメント・ガイドを参照してください。
Oracle Fusion Middlewareにより、高可用性環境でOracleデータベースとの最適な統合が実現します。Oracle Fusion Middlewareはデータベースのクライアント(javaクライアントとシステム・クライアントのいずれか)として動作する場合、データベース障害シナリオに対して高速のフェイルオーバーを提供して中間層のダウンタイムを最小に抑える、特別な通信機能および監視機能を使用します。
データベースにアクセスするOracle Fusion Middlewareコンポーネントは、次の3つに分類できます。
Oracle WebLogic ServerにデプロイされるJavaベースのOracle Fusion Middlewareコンポーネント
スタンドアロンのJavaクライアントとなるJavaベースのOracle Fusion Middlewareコンポーネント
Java以外のOracle Fusion Middlewareコンポーネント
この項の内容は次のとおりです。
Oracle WebLogic ServerにデプロイされるOracle Fusion Middlewareコンポーネントはすべて、Oracle Real Application Clusters(Oracle RAC)をサポートします。接続プールを確立する場合、Oracle Fusion Middlewareは、XA JDBCドライバとXA以外のJDBCドライバ両方に対して、Oracle RACバックエンドのマルチ・データ・ソースのみをサポートします。接続プールについては、Oracle Fusion Middlewareデプロイメントでは、Oracle RACのOracle JDBCドライバでサポートされるその他の接続フェイルオーバー機能はサポートしません。Oracle RACのマルチ・データ・ソースは、Oracle Fusion Middlewareの構成ウィザードで構成します。また、マルチ・データ・ソースは、Oracle Fusion Middleware管理コンソールまたはWLSTコマンドを使用して構成することもできます。マルチ・データ・ソースの構成の詳細は、各コンポーネントのマニュアルを参照してください。
Oracle RACのノードまたはインスタンスに障害が発生すると、Oracle WebLogic ServerとOracleシン・ドライバのいずれかによって、セッション・リクエストはクラスタ内の別のノードにリダイレクトされます。既存の接続のフェイルオーバーはありませんが、アプリケーションからの新しい接続要求は、Oracle WebLogicプールの既存の接続を使用して管理されるか、稼働中のOracle RACインスタンスへの新しい接続によって管理されます。データベースがトランザクション・マネージャの場合、通常、進行中のトランザクションはロールバックされます。WebLogic Serverがトランザクション・マネージャの場合、進行中のトランザクションはフェイルオーバーされます。つまり、障害発生時のトランザクションの状態に基づいて、完了するかロールバックするかが判断されます。アプリケーションにOracle RACノード全体でのロード・バランシングが必要な場合、WebLogic Serverは、ロード・バランシング用に構成されたJDBCマルチ・データ・ソースを使用することで、この機能をサポートします。マルチ・データ・ソースを構成する個々のデータ・ソースには、ラウンドロビン・スキーム(Oracleが推奨する、Oracle RACデータベースに対するデプロイメントの構成)を使用してアクセスします。接続を切り替える際に、WebLogic Serverは、一覧表示されている順に次のデータ・ソースへの接続を選択します。次の項では、Oracle RACでのマルチ・データ・ソースの構成について簡単に説明します。
Oracle RACバックエンドに対してOracle Fusion Middlewareをデプロイする場合、マルチ・データ・ソース(MDS)は、すぐに使用可能な状態に構成されています。MDSには、データベース・サービスを提供するRACインスタンスごとの構成データ・ソースが存在します。データベース・サービスを提供するRACインスタンスを追加で構成する場合、Fusion Middleware層でMDSにデータ・ソースを追加することをお薦めします。MDSに作成する各構成データ・ソースが、第4.1.3項「Oracle RACでのマルチ・データ・ソースの構成」のプロパティとまったく同じように構成されていることを確認します。
非RACのデータベースをRACデータベースに移行する場合、影響を受けるデータ・ソースごとに同等のMDSを新しく作成する必要があります。作成するMDSには、各RACインスタンスと整合性のあるデータ・ソースが必要です。データ・ソースの値は、第4.1.3項「Oracle RACでのマルチ・データ・ソースの構成」で説明するプロパティに関して、元の単一インスタンス・データ・ソースの値と同じである必要があります。たとえば、単一インスタンス・データ・ソース・ドライバがoracle.jdbc.xa.client.OracleXADataSource
である場合、新しいマルチ・データ・ソースの各構成データ・ソースのドライバはoracle.jdbc.xa.client.OracleXADataSource
である必要があります。
MDSデータベース・ベースのリポジトリを使用するアプリケーションは、高可用性Oracleデータベースへのアクセス用に構成できます。この構成では、MDSおよびWebLogicインフラストラクチャによる障害検出、リカバリおよび再試行によって、アプリケーションの読取り専用のMDS操作が、Oracle RACデータベースの計画停止および計画外停止から保護されます。
MDSマルチ・データ・ソースは、Fusion Middleware Controlのナビゲーション・ツリーに、MDSリポジトリとして公開されます。これらのマルチ・データ・ソースは、アプリケーション・デプロイメントのデプロイメント・プランのカスタマイズ時に選択できます。また、MDS WLSTコマンドでも使用できます。
読取り専用操作を再試行できるようなアプリケーションの構成
接続を再試行できるようにアプリケーションを構成するには、アプリケーションのMDS AppConfig MBeanのRetryConnection属性を構成します。MDS構成の詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。
MDSマルチ・データ・ソースの登録
第4.1.3項「Oracle RACでのマルチ・データ・ソースの構成」で指定した手順以外にも、MDSについて次の点を検討してください。
MDSリポジトリに使用されるマルチ・データ・ソースを構成する子データ・ソースは、XA以外のデータ・ソースとして構成する必要があります。
マルチ・データ・ソースの名前には、mds-
という接頭辞を付ける必要があります。これは、Fusion Middleware Control、WLSTおよびJDeveloperを介してMDS管理機能に使用できるMDSリポジトリとして、マルチ・データ・ソースを認識できるようにするために必要です。
注意: MDSデータ・ソースをマルチ・データ・ソースの子として追加すると、このデータ・ソースはMDSリポジトリとしては公開されなくなります。たとえば、これはFusion Middleware Controlのナビゲーション・ツリーで、「メタデータ・リポジトリ」フォルダの下に表示されなくなり、それに対してMDSリポジトリの操作は実行できなくなり、デプロイメント時には選択可能なリポジトリのリストに表示されなくなります。 |
マルチ・データ・ソースへのデータ・ソースの変換
MDSデータ・ソースをマルチ・データ・ソースに変換してアプリケーションが正しく構成されていることを確認する場合、次の2つの考慮事項があります。
新しい一意の名前を持つマルチ・データ・ソースを新規作成する場合は、アプリケーションを再デプロイして、デプロイメント・プランのカスタマイズ時に、この新しいマルチ・データ・ソースをMDSリポジトリとして選択します。
アプリケーションの再デプロイを回避する場合は、データ・ソースを削除し、同じ名前とjndi-name属性を使用して、新しいマルチ・データ・ソースを再作成できます。
この項では、Oracle RACの構成の要件について説明します。
XAの要件: 多くのOracleコンポーネントは、分散トランザクションに参加したり、コンテナで管理されるトランザクションの一部となります。それらのコンポーネントには、Oracle WebLogic トランザクション・マネージャによるXAリカバリ用に、バックエンド・データベースの設定が必要です。RCUを使用して作成されたリポジトリでは、これは自動的に実行されます。XAトランザクションに参加する他のデータベースについては、XAの前提条件が満たされていることを確認してください。
次のように入力して、システム・ユーザーとしてSQL*Plusにログオンします。
sqlplus "/ as sysdba"
sys.dba_pending_transactions
に対してselectをpublic
に付与します。
sys.dbms_xa
に対してexecuteをpublic
に付与します。
任意のトランザクションに対してforceをuser
に付与します。
注意: Oracleデータベースのdistributed_lock_timeout パラメータがJTAタイムアウトより大きな値に設定されていることを確認してください(これは、中間層(WebLogic Serverのデフォルト、データ・ソースの特定の構成、トランザクションのコンポーネントで使用される値)の最高値より大きな値にする必要があります)。 |
サーバー側のロード・バランシング: サーバー側のロード・バランシング機能が(remote_listenersを使用して)Oracle RACバックエンドで有効になっている場合、マルチ・データ・ソース構成のデータ・ソースで使用されるJDBC URLにINSTANCE_NAMEを含める必要があります。たとえば、このURLは次の書式で指定できます。
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host-vip) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dbservice)(INSTANCE_NAME=inst1)))
デフォルトでは、インストールした時点では、remote_listener
が構成されていると想定されており、それに従ってマルチ・データ・ソースのデータ・ソースにURLが作成されます。通常のインストールおよび構成以外で作成された任意のマルチ・データ・ソースは、この項で説明されている書式に従う必要があります。
remote_listeners
がOracle RAC側で指定できず、サーバー側のロード・バランシングが無効になっている場合は、URLのINSTANCE_NAMEを指定する必要はありません。リモート・リスナーを無効にするには、それぞれのOracle RACノードのspfile.ora
ファイルで、一覧表示されているリモート・リスナーをすべて削除します。例:
*.remote_listener="
この場合、マルチ・データ・ソース構成のデータ・ソースで使用する際にお薦めするURLは次のとおりです。
jdbc:oracle:thin:@host-vip:port/dbservice
または
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host-vip)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dbservice)))
サービス: Oracleデータベース(特にOracle RAC)にOracle Fusion Middlewareを構成する場合、Oracleサービス機能を使用することをお薦めします。特定のアプリケーションのデータベース・サービスの場所の一部として提供するservice_name
を作成します。
WebLogic Serverコンテナのクラッシュ後、進行中のトランザクションをリカバリする際に、Oracle WebLogic Serverトランザクション・マネージャでトランザクション状態の情報を問い合せて該当するコマンド(commitやrollbackなど)を発行するには、適切なデータベース権限が必要です。
トランザクション・リカバリ権限のスキーマを構成する手順は次のとおりです。
sysdba権限を持つユーザーとしてSQL*Plusにログオンします。例:
sqlplus "/ as sysdba"
sys.dba_pending_transactionsに対してselectをappropriate_userに付与します。
任意のトランザクションに対してforceをappropriate_userに付与します。
注意: これらの権限は、RCUの操作によって決定されるsoainfraスキーマの所有者に付与する必要があります。 |
Oracle Middleware 11gコンポーネントは、Oracle RACのマルチ・データ・ソース構成のみをサポートします。マルチ・データ・ソースは、次のものを使用して構成できます。
Oracle Fusion Middlewareの構成ウィザード(WebLogic Serverドメインの作成時)
Oracle Universal InstallerのJava EEコンポーネント構成(Identity ManagementまたはOracle Portal、Forms、ReportsおよびDiscoverer用)
Oracle WebLogic Server管理コンソール
WLSTコマンド
マルチ・データ・ソースは、XAデータ・ソースとXA以外のデータ・ソース両方のロード・バランシングをサポートします。これは、Oracle Fusion MiddlewareコンポーネントでサポートされるすべてのOracleデータベースのバージョンに適用されます。
マルチ・データ・ソースでは、Oracle RACの特定のインスタンスへの接続をプールする個々のデータ・ソースがカプセル化されます。手動で作成されたマルチ・データ・ソースまたは初期構成の後に変更されたマルチ・データ・ソースについては、可用性の高い動作を最適にするために、次のXAデータ・ソースおよびXA以外のデータ・ソースのプロパティ値に設定することを強くお薦めします。環境の要件によりそれらのプロパティ値を変更する場合は、検討とテストを十分に行ってから実行してください。
高可用性環境では、個々のデータ・ソースに対して次の設定をお薦めします。アプリケーションの要件に従って、その他のパラメータも設定する必要があります。
表4-2 XAデータ・ソース構成
プロパティ名 | 値 |
---|---|
ドライバ |
oracle.jdbc.xa.client.OracleXADataSource |
プロパティ・コマンド |
<property> <name>oracle.net.CONNECT_TIMEOUT</name> <value>10000</value> </property> |
initial-capacity |
0 |
connection-creation-retry-frequency-seconds |
10 |
test-frequency-seconds |
300 |
test-connections-on-reserve |
true |
test-table-name |
SQL SELECT 1 FROM DUAL |
seconds-to-trust-an-idle-pool-connection |
0 |
global-transactions-protocol |
TwoPhaseCommit |
keep-xa-conn-till-tx-complete |
true |
xa-retry-duration-seconds |
300 |
xa-retry-interval-seconds |
60 |
表4-3 XA以外のデータ・ソース構成
プロパティ名 | 値 |
---|---|
ドライバ |
oracle.jdbc.OracleDriver |
設定するプロパティ |
<property> <name>oracle.net.CONNECT_TIMEOUT</name> <value>10000</value> </property> |
initial-capacity |
0 |
connection-creation-retry-frequency-seconds |
10 |
test-frequency-seconds |
300 |
test-connections-on-reserve |
true |
test-table-name |
SQL SELECT 1 FROM DUAL |
seconds-to-trust-an-idle-pool-connection |
0 |
global-transactions-protocol |
なし |
推奨されるマルチ・データ・ソースの例は、付録B「推奨されるマルチ・データ・ソース」を参照してください。
次の例外を含むWARNINGメッセージがサーバー・ログに表示される場合があります。
javax.transaction.SystemException: Timeout during commit processing
[ javax.transaction.SystemException: Timeout during commit processing
これは、設定したXAタイムアウト値を増加する必要があることを示している可能性があります。このような警告が表示された場合は、個々のデータ・ソースのXAタイムアウトを増加できます。
この設定を増加するには、Oracle WebLogic Server管理コンソールを使用します。
データ・ソース構成にアクセスします。
「トランザクション」タブを選択します。
XAトランザクション・タイムアウトを、300のように大きな値に設定します。
「XAトランザクション・タイムアウトの設定」チェック・ボックスを選択します。このチェック・ボックスは、新しいXAトランザクション・タイムアウト値を有効にするために選択する必要があります。
「保存」をクリックします。
XAマルチ・データ・ソースの個々のデータ・ソースすべてに対してこの構成を繰り返します。
Oracle RACにはJDBC接続時間フェイルオーバー機能が用意されていますが、ほとんどの構成では、フェイルオーバーの管理にWebLogic JDBCマルチ・データ・ソースを使用することをお薦めします。接続時間フェイルオーバーには、代替のOracle RACノードへの接続を事前に作成する機能はありませんが、マルチ・データ・ソースには、フェイルオーバーの管理に常に使用可能な接続が複数あります。詳細は、「Oracle RACでのマルチ・データ・ソースの使用」を参照してください。
Java J2SEベースのOracle Fusion Middlewareコンポーネントは、Oracle RACの高可用性機能と連携するように最適化されています。このコンポーネントは、Oracle JDBCシン・ドライバまたはOCIベースのJDBCドライバを使用するようにデプロイできます。
JDBCシン・クライアントは、Pure JavaのタイプIVドライバです。軽量でインストールが簡単です。JDBC Oracleコール・インタフェース(OCI)ドライバによって提供されるパフォーマンスに匹敵する、高パフォーマンスが提供されます。JDBCシン・ドライバは、OracleデータベースからデータにアクセスするためにOracleによって開発されたプロトコル、TTCを使用しているサーバーと通信します。このドライバは、Javaソケットの上にOracle NetとTTCを実装するTCP/IPの実装を提供することにより、データベースへの直接接続を可能とします。JDBC OCIクライアントはタイプIIのドライバであり、Oracle Netを介してJDBCクライアントへの接続を提供します。これは、Oracle Netのクライアント側インストールを使用します。デプロイメントでは、中間層のOracle Net構成を使用して動作をカスタマイズできます。
注意: これらのJDBCクライアントは、スタンドアロンのJava J2SEプログラムの一部として使用されます。 |
Oracle Virtual Directory
データベース・アダプタで使用すると、Oracle Virtual Directoryはデータベースに接続し、接続はプールされません。Oracle RACのデータベース・アダプタの構成の詳細は、Oracle Fusion Middleware Oracle Virtual Directory管理者ガイドのデータベース・アダプタの作成に関する項を参照してください。
データベースURL
Oracle Directory Services Managerを使用してOracle RACデータベースにOracle Virtual Directoryデータベース・アダプタを構成するには、次の手順を実行します。
「接続」画面で、「URLタイプ」リストから「カスタムURLの使用」を選択します。
「データベースURL」フィールドで、Oracle RACデータベースに接続するためのURLを入力します。例:
JDBCシン
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_ BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=host-name-1)(PORT=1521))(ADDRESS= (PROTOCOL=TCP)(HOST=host-name-2)(PORT=1521)))(CONNECT_ DATA=(SERVER=DEDICATED)(SERVICE_NAME=database-service-name)))
JDBC OCI
jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_ BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=host-name-1)(PORT=1521))(ADDRESS= (PROTOCOL=TCP)(HOST=host-name-2)(PORT=1521)))(CONNECT_ DATA=(SERVER=DEDICATED)(SERVICE_NAME=database-service-name)))
接続タイムアウトの構成
Oracle Directory Services Managerを使用してOracle RACデータベースの接続タイムアウトを構成するには、次の手順を実行します。
「接続」画面のJDBCシンで、タイムアウトのパラメータとしてデータベース・アダプタのパラメータoracleNetConnectTimeoutを秒数で指定します。
JDBC OCIの場合は、ディレクトリORACLE_INSTANCE/configのsqlnet.ora
でTCP.CONNECT_TIMEOUT=n
と指定します。
Oracle Fusion Middleware 11gには、Java以外のコンポーネントがいくつか含まれています。これらのコンポーネントは主にCベースで、Oracle Internet Directory(OID)、Oracle Forms、Oracle Reports、Oracle DiscovererおよびOracle Portalが含まれます。これらのコンポーネントでは、Oracle Call Interface層を使用してOracleデータベースと対話します。Oracle RACベースのシステムの場合、一部のコンポーネントは、Oracleデータベースの高可用性イベント通知機能と統合します。
高可用性イベント通知は、データベースに障害が発生した場合に、Java以外のアプリケーションに信号を送ります。受け取ったアプリケーションは環境でコールバックを登録して、データベース接続を監視できます。Java以外のクライアントに関連したデータベースに障害が発生すると、コールバックが呼び出されます。このコールバックには、イベント・ペイロードなどのデータベース障害に関する情報、障害が原因で切断された接続(サーバー・ハンドル)のリストが含まれます。
同じデータベースの別のインスタンス(インスタンスCなど)が停止した場合、クライアントの接続には影響しないため、クライアントには通知されません。
高可用性イベント通知を使用すると、データベースに障害が発生した場合に、アプリケーションのレスポンス時間が向上します。イベント通知を使用しないと、データベースの障害が発生した場合に、TCPタイムアウトの時間が経過するまで接続は切断されず、それまでに数分かかってしまいます。高可用性のイベント通知により、スタンドアロン、接続プールおよびセッション・プールの接続はOCIによって自動的に切断されてクリーンアップされ、障害が発生してから数秒以内にアプリケーション・コールバックが呼び出されます。これらのサーバー・ハンドルのいずれかがTAF対応の場合、OCIが自動的にフェイルオーバーを処理します。
次の項では、Java以外のクライアントでOracle RACデータベースに接続する際にお薦めする設定について説明します。
Oracle Internet Directoryは、高可用性のイベント通知と統合します。クライアント・アプリケーションがデータベースへの接続に使用するデータベース・サービスは、Oracle Enterprise Manager Cluster Managed Services Pageを使用して作成することをお薦めします。
SQL*Plusを使用してOracle RACデータベース・サービスを構成することもできます。
Oracle RACデータベース接続で高可用性のイベント通知を有効にするには、次の手順を実行します。
AQ_HA_NOTIFICATIONS
属性をTRUEに設定して、サーバー側の透過的アプリケーション・フェイルオーバー(TAF)設定を有効にします。フェイルオーバーの再試行とフェイルオーバーの遅延は、デプロイメントの要件に基づいて調整できます。そのため、OIDで使用されるデータベース・サービスの場合、Oracle RACのDBMS_SERVICE
プロパティの値を設定するときには、表4-4に従うことをお薦めします。
Oracle Net構成のTCP接続タイムアウトを設定することもお薦めします。この設定を構成するには、ORACLE_INSTANCE/config
ディレクトリのsqlnet.ora
ファイルでTCP.CONNECT_TIMEOUT=n
と指定します。
Oracle Formsも、高可用性のイベント通知と統合します。Oracle Formsでこの機能を有効にするには、次の手順を実行します。
Oracle Enterprise Manager Cluster Managed Services Pageを使用して、データベース・サービスを作成します。Oracle Formsでは、表4-5に従ってOracle RACのDBMS_SERVICE
プロパティの値を設定します。次のプロパティは、Oracleデータベースのパッケージを使用して設定することをお薦めします。
Oracle Net構成のTCP接続タイムアウトを設定することもお薦めします。この設定を構成するには、ORACLE_INSTANCE/config
ディレクトリのsqlnet.ora
ファイルでTCP.CONNECT_TIMEOUT=n
と指定します。
高可用性環境でOracle Portalの動作を最適に構成するには、Oracle Net構成のTCP接続タイムアウトを設定します。この設定を構成するには、ORACLE_INSTANCE/configディレクトリのsqlnet.ora
ファイルでTCP.CONNECT_TIMEOUT=n
と指定します。
Oracle Portalでは、mod plsql
の障害検出機能も使用します。
mod_plsql
ではデータベースへの接続プールが保持され、確立されたデータベース接続が後続のリクエストに再利用されます。接続プールのデータベース接続からレスポンスがない場合には、mod_plsql
でそのことが検出され、切断された接続が廃棄されて、後続のリクエスト用に新しいデータベース接続が作成されます。
mod_plsql
の切断されたデータベース接続検出機能によって、データベース・ノードまたはインスタンスが停止したときにエラーがランダムに発生しなくなります。この機能は、Real Application Clusters(Oracle RAC)などの高可用性構成でもきわめて有用です。Oracle RACクラスタのノードが停止すると、mod_plsql
でそのことが検出され、他のOracle RACノードを使用してリクエストへの対応が即座に開始されます。
デフォルトでは、Oracle RACノードまたはデータベース・インスタンスが停止し、そのノードへの接続がmod_plsql
でそれ以前にプールされていた場合、プール内の切断された接続を使用する最初のmod_plsql
リクエストには障害が発生し、HTTP-503というレスポンスがエンドユーザーに返されます。mod_plsql
は、この障害をトリガーとして、プール内の切断されている接続をすべて検出して削除します。mod_plsql
により、ノードに障害が発生する前に作成されていた接続プールがすべてpingされます。このping操作は、プールされた接続を使用する次回リクエストの処理時に実行されます。ping操作が失敗すると、そのデータベース接続は破棄され、新しい接続が作成されて処理されます。
注意: ノード障害の後、複数のmod_plsql リクエストを同時に受信したときに、最初に切断された接続がmod_plsql で検出されていないと、その時点で複数の障害が発生している可能性があります。 |
mod_plsql
では、切断されたデータベース接続の検出機能をチューニングするために、次の2つの構成オプションが用意されています。
切断されたデータベース接続を検出するオプションの指定
接続検証とタイムアウト期間の指定
切断されたデータベース接続を検出するオプションの指定
mod_plsql
では、データベース・ノードの停止が原因と考えられる障害を検出すると、接続を修正します。これは、PlsqlConnectionValidation
パラメータで制御されます。PlsqlConnectionValidationパラメータの詳細は、『Oracle Fusion Middleware Oracle HTTP Server管理者ガイド』のmod_plsqlに関する項を参照してください。
PlsqlConnectionValidation
パラメータをAutomaticに設定すると、mod_plsql
モジュールは、失敗したリクエストの前に作成されていたプール済データベース接続をすべてテストします。これがデフォルトの構成です。
PlsqlConnectionValidation
パラメータをAlwaysValidateに設定すると、mod_plsql
は、任意のリクエストを発行する前に、プールされていたデータベース接続をすべてテストします。AlwaysValidate構成オプションを使用すると、可用性は高まりますが、パフォーマンス・オーバーヘッドも増加します。
mod_plsqlが接続プールの不完全なデータベース接続をテストするタイムアウト期間を指定できます。PlsqlConnectionTimeout
パラメータには、テスト・リクエストが完了するまでmod_plsql
が待機する最大時間を指定します。この時間を超えると、接続が使用不可とみなされます。
接続検証とタイムアウト期間の指定
PlsqlConnectionValidation
パラメータをAutomaticまたはAlwaysValidateに設定すると、mod_plsql
はプールされているデータベース接続をテストしようとします。
mod_plsql
が接続プールの不完全なデータベース接続をテストするタイムアウト期間を指定できます。これは、PlsqlConnectionTimeout
パラメータで制御されます。このパラメータには、テスト・リクエストが完了するまでmod_plsqlが待機する最大時間を指定します。この時間を超えると、接続が使用不可とみなされます。
PlsqlConnectionTimeout
、PlsqlConnectionValidation
およびPlsqlConnectionTimeout
パラメータの詳細は、『Oracle Fusion Middleware Oracle HTTP Server管理者ガイド』のmod_plsqlに関する項を参照してください。
高可用性環境でOracle ReportsとOracle Discovererの動作を最適に構成するには、Oracle Net構成のTCP接続タイムアウトを設定します。この設定を構成するには、ORACLE_INSTANCE/config
ディレクトリのsqlnet.ora
ファイルでTCP.CONNECT_TIMEOUT=n
と指定します。
Oracle Discovererでは、Oracle RACデータベースの接続に、次のようなTNSエントリも使用します。
frdisco = (DESCRIPTION = (LOAD_BALANCE = ON) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = stajo05-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = stajo06-vip)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl.us.oracle.com)))
注意: Oracle DiscovererがカスタマOracle RACデータベースに接続するように構成されている場合、次のTNS接続文字列を使用することをお薦めします。(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host1-vip)(PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=host2-vip)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAM E=orcl)(FAILOVER_MODE=(TYPE=select)(METHOD=basic)(RETRIES=20)(DELAY=15)))) |
ほとんどの本番デプロイメントにはファイアウォールが関係しており、データベース接続はファイアウォールを介して行われます。そのため、このファイアウォールは、データベース接続がタイムアウトしないように構成することをお薦めします。Oracle RACの場合は具体的に、Oracle RAC VIPおよびデータベース・リスナー・ポートで接続をタイムアウトしないということになります。
そのような構成が不可能な場合は、データベース・サーバー側のORACLE_HOME/network/admin/sqlnet.ora
で SQLNET.EXPIRE_TIME=n
と設定します。Oracle RACでは、すべてのOracleホームでこのように設定する必要があります。n
の単位は分です。これは、ネットワーク・デバイス(ファイアウォール)のタイムアウトの既知の値より小さく設定する必要があります。これらの時間は通常、10分より大きな値で、場合によっては数時間に設定されていることもあるため、できるだけ大きな値に設定する必要があります。
Fusion Middlewareコンポーネントでは、Oracle RACデータベースへの接続時にマルチ・データ・ソースを使用します。Oracle RACインスタンスが停止すると、WebLogic ServerはSELECT 1 FROM DUALという問合せを使用して、データベースのステータスを確認しようとします。この問合せは通常、数秒以内に完了します。ただし、データベースのレスポンスが遅い場合、WebLogic Serverはそれを断念してそのデータベースを使用不可とみなします。ログに記録される種類の例外の例を次に示します。
<Mar 30, 2009 2:14:37 PM CDT> <Error> <JDBC> <BEA-001112> <Test "SELECT 1 FROM DUAL" set up for pool SOADataSource-rac1" failed with exception: oracle.jdbc.xa.OracleXAException".> [TopLink Warning]: 2009.03.30 14:14:37.890--UnitOfWork(14568040)--Exception [TOPLINK-4002] (Oracle TopLink - 11g Release 1 (11.1.1.1.0) (Build 090304)): oracle.toplink.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Internal error: Cannot obtain XAConnection Creation of XAConnection for pool SOADataSource failed after waitSecs:30 : weblogic.common.ResourceException: SOADataSource(SOADataSource-rac1): Pool SOADataSource-rac1 has been @ disabled because of hanging connection tests, cannot allocate resources to applications. We waited 10938 milliseconds. A typical test has been taking 16.
データベースからレスポンスを受信するまでWebLogic Serverが待機する時間を増加するには、WebLogic Serverパラメータの-Dweblogic.resourcepool.max_test_wait_secs=30
を設定します。このパラメータは、setDomainEnv.shファイルに格納されています。このパラメータを設定すると、WebLogic Serverは、SELECT 1 FROM DUALという問合せに対してデータベースからレスポンスを受信するまで30秒待機し、この時間を超えると断念します。
11.2 RDBMS Oracle RACデータベースがSCANを使用して構成されていない場合、以前サポートされていたデータベース・リリースでの指定と同じように、構成ウィザードおよびOracle Universal InstallerでOracle RACインスタンスの詳細(host:portという形式のインスタンス・アドレス)を提供できます。
11.2 RDBMS Oracle RACデータベースがSCANを使用して構成されている場合は、Oracle RACインスタンスの詳細をSCANアドレスとして提供します。Oracle RACインスタンスへのFusion Middlewareの接続では、各Oracle RACインスタンスは、サービス名、インスタンス名、ホストおよびポートを使用して一意に識別されます。各インスタンスのこの構成情報は、Oracle RACデータベースへの接続時に提供されます。SCANで構成されたOracle RACデータベースの場合、そのようなすべてのインスタンスのhost:port
アドレスはSCANhost:port
であるため、この同じ共通アドレスは、すべてのインスタンスで同じものとして提供される必要があります。
具体的には、Oracle Fusion Middleware構成では次のルールを使用します。
RCUインストールでは、Oracle RACデータベースに対して、ホスト名はscan-hostname-address
として指定できます。
Oracle Universal Installerに基づくインストール・セッションでは、Oracle Universal Installerで必要な入力形式に応じて、Oracle RACデータベースに対して次のように指定できます。
scan-address-hostname:port:instance1^scan-address-hostname:port:instance2@servicename
または
scan-address-hostname:port^scan-address-hostname:port@servicename
Fusion Middleware構成ウィザードに基づくインストールでは、11gR2 Oracle RACデータベース用のマルチ・データ・ソースを作成する必要がありますが、scan-address-hostname,port,service-name
は各構成データ・ソースで同じであり、インスタンス名は各構成データ・ソース固有のものであり、Oracle RACエンド・インスタンスがターゲット指定されている必要があります。
接続文字列が明示的に指定される場合は、次のベース・フォーマットを使用できます。
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=scan-hostname-address) (PORT=port)))(CONNECT_DATA=(SERVICE_NAME=service-name))) when the whole Oracle RAC database needs to be specified (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=scan-hostname-address) (PORT=port)))(CONNECT_DATA=(SERVICE_NAME=service-name)(INSTANCE_NAME=inst1))) when a specific Oracle RAC instance needs to be specified