Middleware
WebLogic Server
2009年1月
Pas Apicella, Frances Zhao
このデモでは、Oracle WebLogic ServerでOracle Real Application Clusters(Oracle RAC)を使用するための設定方法と、Webアプリケーションを使用して、バックエンドのOracle RACノードへの接続をテストする方法を示します。
Oracle WebLogic Server 10.3には、Oracle Database 11gのOracle Real Application Clusters機能を統合できます。これにより、データベース・アクセス時間を最小化しながら、接続パフォーマンスと可用性の両方を最大化する豊富な プーリング管理機能への透過的アクセスが実現されます。
Oracle WebLogic Serverには、Oracle RAC機能を実現するための設定オプションが複数用意されています。オラクルでは、Oracle WebLogic ServerのJDBCマルチ・データソースを使用することを推奨しています。この方法は、グローバル・トランザクションを使用するかどうかに関係なく適 用できます。また、Oracle WebLogic Serverを設定することで、Oracle JDBCシン・ドライバの接続時フェイルオーバーや、Oracle JDBCドライバの暗黙的接続キャッシュを使用した高速接続フェイルオーバーを使用することもできます。
このデモでは、Oracle WebLogic ServerのJDBCマルチ・データソースを使用して、フェイルオーバーとロードバランシングを実行します。
1. Oracle Enterprise Manager Database ControlにSYSとしてログインします。
2. ページ上部の 「 Availability」 リンクをクリックします。
3. 「 Cluster Managed Database Services」 リンクをクリックします。
4. 次に示すとおり、クラスタの資格証明とデータベースの資格証明を入力します。
5. 「 Continue」ボタンをクリックします。
6. 「 Create Service」ボタンをクリックします。
7. スクリーンショットに示すとおり、サービスを定義します。選択した設定は、次のとおりです。
Service Name | MYHASERVICE |
Enable Load Balancing Advisory | 選択 |
Throughputラジオ・ボタン・オプション | 選択 |
Connection Load Balancing Goal | LONG |
8. 「 OK 」ボタンをクリックして、サービスを作成します。
" Cluster Managed Database Services" ページを使用すると、サービス・ステータスを検証および確認できます。

1. "lsnrctl status" または"lsnrctl services"を実行すると、先ほど作成したサービスが存在することを確認できます。
2. ここでは、 SQL*Plus を使用して、サービス接続を検証します。
…$ sqlplus juser/juser@HASERVICE |
$ORACLE_HOME/network/admin/tnsnames.ora のエントリは、接続文字列" HASERVICE" に対して次のように定義されています。
HASERVICE = |
3. UNIXシェル・スクリプトを使用してSQL*Plusに接続し、さまざまなインスタンスが使用されていることを確認します。これにより、ロードバランシ ングが機能していることと、RACデータベース設定が正しいことが検証できます。次のとおりに、 " test.sh" というファイルを作成します。
注:次に示すのはLinuxの例です。
#!/bin/sh |
4. これにより、test.sqlを使用して環境に関する各種情報が出力され、終了します。出力を読みやすくするため、SQL*Plusはサイレント・モード で起動されています。 次のとおりに、" test.sql"というファイルを作成します。
col "Instance" format a20 |
5. このファイルを実行し、出力が正しいことを確認します。
Oracle RACでは、マルチ・データソースが使用されています。マルチ・データソースは、RACバックエンドの各インスタンスに対して設定されている個別のデータ ソースで構成されています。アプリケーション・プログラムから、マルチ・プール・データソースのJNDI名を使用して、RACバックエンドを検出します。
最初のノードに対するデータソース#1の作成
ここでは、RACノード内の最初のインスタンスに接続します。このインスタンスは " orcl1" であり、次の例に示すURLが指定されています。
jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac1-vip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MYHASERVICE.apemrac.au.oracle.com) (INSTANCE_NAME = orcl1))) |
1. WebLogic管理コンソールにログインします。
http://<host>:<port>/console
2. " Domain Structure" ツリーの下の「 Services」 ノードを開きます。
3. Expand the 「 JDBC」ノードを開き、「 Data Sources」 をクリックします。
4. 「 New」ボタンをクリックします。
5. 次のスクリーンショットのとおりに、詳細情報を入力します。
6. 「 Next」をクリックします。
7. もう一度、「 Next」をクリックします。
8. いずれかのデータベース・ノードの情報と、データベースのユーザー名およびパスワードを入力し、「 Next」を クリックします。
9. 次の例のとおりにURLを入力します。
jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac1-vip)(PORT = 1521)) |
10. 「 Test Configuration」をクリックし、次のスクリーンショットのように、接続が成功したこ とを確認します。
11. データソースのターゲットとして、管理対象サーバー「 lemon」を選択します。
12. 「 Finish」をクリックします。
次に、RAC統合に必要なプール設定を変更します。
13. 新しく作成したデータソースをクリックします。
14. 「 Connection Pool」タブをクリックします。
15. ページ下部の「 Advanced」ノードを開いてすべてのプロパティを表示したら、次のプロパティを設定しま す。
Initial Capacity: | 0 |
Test Connections On Reserve | CHECKED |
Test Frequency: | 300 |
Connection Creation Retry Frequency: | 30 |
Seconds to Trust an Idle Pool Connection: | 10 |
16. 次のドライバ・プロパティを設定します。
oracle.net.CONNECT_TIMEOUT=10000
17. 「 Savestrong>」ボタンをクリックします。
ドメインのconfig/jdbcディレクトリに含まれるデータソースは、次のようになります。
<?xml version='1.0' encoding='UTF-8 |
2番目のノードに対するデータソース#2の作成
上記の手順を繰り返し、今回はRACクラスタ内の2番目のノードを選択します。このデータソースの名前は" Node2DS" であり、今回も、ターゲットとして管理対象サーバー「 lemon」を選択します。
jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac2-vip)(PORT = 1521)) |
マルチ・データソースの作成
1. WebLogic管理コンソールにログインします。
http://<host>:<port>/console
2. " Domain Structure"ツリーの下の「 Services」 ノードを開きます。
3. 「 JDBC」ノードを開き、「 Multi Data Sources」をク リックします。
4. 「 New」ボタンをクリックします。
5. 次のスクリーンショットのとおりに、詳細情報を入力します。
6. 「 Next」をクリックします。
7. マルチ・データソースのターゲットとして管理対象サーバー「 lemon」を選択し、「 Next」 をクリックします。
8. 「 Non XA Driver」オプションを選択し、「 Next」をクリッ クします。
9. のスクリーンショットのとおり、先ほど作成したデータソースを移動します。
10. 「 Next」をクリックします。
11. 「 Finish」をクリックします。
12. 新しく作成したマルチ・データソースをクリックします。
13. " Test Frequency Seconds:" を " 5" 秒に設定します。
14. 「 Save」ボタンをクリックします。
このマルチ・データソースは、次のとおりに、ドメインのconfig/jdbcディレクトリ内に定義されます。
<?xml version='1.0' encoding='UTF-8 |
の処理が完了すると、ドメインのconfig/jdbcディレクトリには新しく作成されたデータソースとマルチ・データソースが追加され、次のようになり ます。
[…/bea103/user_
total 56
-rw-r--r-- 1 oracle oinstall 135 Nov 26 09:40 readme.txt
drwxr-xr-x 11 oracle oinstall 4096 Nov 27 12:31 ../
-rw-r--r-- 1 oracle oinstall 2259 Dec 3 07:48 jdbc2fscottDS-8
drwxr-xr-x 2 oracle oinstall 4096 Dec 4 11:14 ./
-rw-r--r-- 1 oracle oinstall 857 Dec 4 11:15 jdbc2fracDS-417
-rw-r--r-- 1 oracle oinstall 2508 Dec 4 12:23 Node1DS-0882-jd
-rw-r--r-- 1 oracle oinstall 2508 Dec 4 12:27 Node2DS-9921-jd
設定をテストするため、単純なWARファイルをWebLogicサーバーにデプロイします。
1. ファイル・システムに、次のファイルをダウンロードします。
haweb.zip
2. ファイルを解凍すると、 " haweb.war"ファイルになります。
3. このファイルを管理対象サーバー(ここでは" lemon")にデプロイします。
4. デプロイが完了したら、次に示すように、メインの" Deployments"ページを参照して、アプリケーショ ンが稼働していることを確認します。
5. 次のURLを使用して、アプリケーションを起動します。
http://<server>:<port>/haweb/
これがメインのWebページであり、ここで、データソース・ロケーション、取得する接続の数、接続リクエスト間のスリープ時間を指定できます。最初のテス トでは、RACノード間でロードバランシングが実行されていることのみを確認します。
6. 次の情報を設定し、「 Test Data Source」ボタンをクリックします。
Data Source Location | jdbc/racDS |
Connections to Retrieve | 5 |
Sleep Time between Connection Gets | 2 Seconds |
以下に示すとおり、RACクラスタ内の2つのRACノードに接続できることを確認します。
RAC Integration with Oracle WebLogic Server 10.3
Managed Server Name | lemon |
Data Source Location | jdbc/racDS |
Number of Connections to Retrieve | 5 |
Sleep Time Between Queries in seconds | 2 seconds |
Test number #1
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #2
Instance | Server Host | Service Name |
orcl1 | apemrac1 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #3
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #4
Instance | Server Host | Service Name |
orcl1 | apemrac1 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #5
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
All done...
7. 次のテスト実行では、接続リクエスト間に30秒のスリープ時間を取って、10個の接続を取得します。また、実行中にいずれかのRACノードを強制的に停止 して、アプリケーションの実行が継続されること、そして、クラスタ内の使用可能なRACノードから接続が取得されることを確認します。次のURLを使用し て、メインのWebページへ戻ります。
http://<server>:<port>/haweb/
8. もっとも簡単にインスタンスを強制停止する方法として、いずれかのRACノードに対して"shutdown abort"を実行します。テストの実行を開始してからデータベース・インスタンスを停止するため、ここでは単に接続のみを実行します。
9. テスト・ページを実行します。今回は、次に示すとおり、取得する接続数として10を指定し、接続取得間のスリープ時間として20秒を指定します。
Data Source Location | jdbc/racDS |
Connections to Retrieve | 10 |
Sleep Time between Connection Gets | 20 Seconds |
10. Webページ「 Test Data Source」ボタンをクリックします。
注:これにより、Webテストが開始されます。あとで、このウィンドウに戻ります。
11. データベース・セッション・ウィンドウに戻り、次に示すとおり、"shutdown abort"コマンドを発行します。
12. 次に、Webブラウザに戻り、テストが完了したら、すべてのリクエストが残りのRACノードによって処理されたことを確認します。ここでは、残りのノード は2番目のデータベース・インスタンス・ノードである"orcl2"です。以下からわかるとおり、TEST #2のあと、orcl1は停止されたか、またはインスタンス・クラッシュが発生していますが、アプリケーションはクライアントへのサービスを中断すること なく、実行を継続しています。
RAC Integration with Oracle WebLogic Server 10.3
Managed Server Name | lemon |
Data Source Location | jdbc/racDS |
Number of Connections to Retrieve | 10 |
Sleep Time Between Queries in seconds | 20 seconds |
Test number #1
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #2
Instance | Server Host | Service Name |
orcl1 | apemrac1 | orcl.apemrac.au.oracle.com |
ORCL1 aborted via "shutdown abort" at this part of the TEST
Sleeping for 20 second(s)
Test number #3
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #4
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #5
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #6
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #7
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #8
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #9
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
Test number #10
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 20 second(s)
All done...
13. 次に示すとおり、データベース・インスタンスを再起動します。
14. 次に、以下のとおり、先ほど起動したインスタンス " orcl1"がロードバランシングに含まれるかどうかを 検証します。
RAC Integration with Oracle WebLogic Server 10.3
Managed Server Name | lemon |
Data Source Location | jdbc/racDS |
Number of Connections to Retrieve | 4 |
Sleep Time Between Queries in seconds | 2 seconds |
Test number #1
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #2
Instance | Server Host | Service Name |
orcl1 | apemrac1 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #3
Instance | Server Host | Service Name |
orcl2 | apemrac2 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
Test number #4
Instance | Server Host | Service Name |
orcl1 | apemrac1 | orcl.apemrac.au.oracle.com |
Sleeping for 2 second(s)
All done...
Q. "Webテスト・プログラム"では、すべての接続リクエストに対して1つのデータベース・ノードのみが使用されているようです。
A. ラスタ内のすべてのデータベース・インスタンスが稼働していることを確認してください。また、それぞれのインスタンスごとに独自のリスナーが実行されてお り、 "Service Policy"として "preferred"が指定されたサービスがノードごとに起動されていることを確認してください。さらに、中間層へ進む前に、 SQL*Plus テスト・クライアントがノード間でロードバランシングされていることを確認してください。
Q. SQL*Plusからテストを実行するには、データベース・サーバーへ移動する必要がありますか? PCでローカルに、または中間層サーバーでテストを実行する方法はありませんか?
A. RACノードにアクセスできない場合、サポートされている任意のプラットフォームにInstant Clientをインストールして、これをテストに使用できます。使用するデータベース・サーバーのバージョンに合うInstant Clientをダウンロードしてください。
Instant Client のダウンロード
Q. 正しい動作をテストするために、RACインスタンスを正常に停止する方法を教えてください。
A. RACインスタンスを正常終了するには、たとえば、次の2つのオプションを使用できます。
オプション1
1. sqlplus / as sysdba
2. shutdown immediate;
オプション2
1. srvctl stop instance -d R2D1 -i R2D11
Q. haweb.warのソース・コードを入手できますか?
A. ここからOracle JDeveloper 11g BOXERワークスペースをダウンロードできます。 ⇒ WLS103JDBCDemos.zip
Q. Oracle RACやOracle WebLogic Server 10.3に関する情報は、どこから入手できますか?
A. 以下のWebサイトにあるドキュメントを参照してください。
http://otndnld.oracle.co.jp/document/products/wls/docs103/jdbc_admin/oracle_rac.html