<Insert Picture Here> WebLogic Server 11g JDBC データソース 日本オラクル株式会社 Fusion Middleware 事業統括本部ソリューション本部 Application Grid ソリューション部
以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を行う際の判断材料になさらないで下さい オラクル製品に関して記載されている機能の開発 リリースおよび時期については 弊社の裁量により決定されます Oracle と Java は Oracle Corporation 及びその子会社 関連会社の米国及びその他の国における登録商標です 文中の社名 商品名等は各社の商標または登録商標である場合があります 2
当資料内容について 当資料では WebLogic Server の JDBC データソースについて解説します 対象とする WebLogic Server のバージョンは 11gR1(10.3.3) です 当資料では 基本編として JDBC データソースの基本動作やパラメータについて解説します マルチデータソースや GridLink for RAC については当資料には含みません 3
Agenda JDBC データソースとは WebLogic11g の JDBC データソース WebLogic11g の JDBC データソースの動作 WebLogic11g の JDBC データソースの監視 WebLogic11g のデータソースのデバッグ WebLogic11g の JDBC データソースにおける Oracle JDBC Driver のデバッグ WebLogic11g の JDBC データソースにおける推奨 / 注意事項 Appendix: 管理コンソールを用いた JDBC データソースの構成手順 4
<Insert Picture Here> JDBC データソースとは 5
JDBC データソースとは アプリケーション実行環境 (AP サーバ ) において アプリケーションにデータベース接続サービスを提供する機能 アプリケーションは DB 接続に必要な物理的な情報 (DB ホスト名 DB ユーザ ID やパスワードなど ) を意識せずにデータベース接続を行える 接続プールを活用することで DB 接続 切断処理のオーバーヘッドを削減可能 AP サーバ JNDI ネーミング サービス JDBC データソース サービス ルックアップ jdbc/dsa JDBC データソース dsa 利用するJDBCドライバ DB 接続情報 JNDI 名 jdbc/dsa 接続プール データベース アプリケーション 6
JDBC データソースを利用する場合のコード 下記は JDBC データソースを利用して Connection オブジェクトを取得する場合のコード例 import javax.naming.*; import javax.sql.*; import java.sql.*;...( 中略 ) String sql = select * from emp // 実行するSQL 文 Context ic = new InitialContext(); //JNDIルックアップのための初期コンテキスト取得 DataSource ds = (DataSource)ic.lookup( jdbc/dsa ); // データソースオブジェクト取得 Connection conn = ds.getconnection(); // コネクション取得 Statement stmt = conn.createstatement(); //Statementの作成 ResultSet rset = stmt.executequery(sql); // 結果セットの取得.....( 中略 ) rset.close(); // 結果セットクローズ処理 stmt.close(); //Statement クローズ処理 conn.close(); // コネクションクローズ処理 7
JDBC データソースを利用しない場合 アプリケーションが AP サーバの JDBC データソース サービスを利用せず JDBC ドライバをロードし その API を使用して DB 接続を行うことも可能 ただしその場合 DB 接続情報や接続プールの管理をすべてアプリケーション側で管理 制御する必要がある AP サーバ アプリケーション 利用する JDBC ドライバと DB 接続情報の管理 接続プールの制御 データベース 8
JDBC データソースを利用しない場合のコード例 JDBC データソースを利用しない場合 利用する JDBC ドライバや DB の物理接続情報をアプリケーション側で管理する必要がある 下記は それらの情報をハードコーディングしてしまっている悪い例 import java.sql.*;...( 中略 ) String sql = select empno, ename from emp // 実行するSQL 文 DriverManager.registerDriver(new oracle.jdbc.driver.oracledriver()); // 利用ドライバの指定 String url = jdbc:oracle:thin:@host1:1521:sid ; Connection conn =DriverManager.getConnection(url, SCOTT, TIGER ); // コネクション取得 Statement stmt = conn.createstatement(); //Statementの作成 ResultSet rset = stmt.executequery(sql); // 結果セットの取得.....( 中略 ) rset.close(); // 結果セットクローズ処理 stmt.close(); //Statement クローズ処理 conn.close(); // コネクションクローズ処理 9
<Insert Picture Here> WebLogic11g の JDBC データソース 10
WebLogic Server11g の JDBC データソース WebLogic Server では 2 種類のデータソース機能を提供 単体の DB 接続には データソース を利用 Oracle RAC 等には マルチデータソース を利用 構成は 通常の管理ツール (Admin コンソールや WLST) を用いるが データソース定義の XML ファイルを用意し そのファイルをデプロイすることで定義することも可能 WebLogic11g の JDBC データソース 種類データソース単体の DB インスタンスに特定の DB ユーザで接続する 構成とスコープ マルチデータソースサーバスコープで構成アプリケーションスコープで構成スタンドアロンで構成 複数のデータソースをまとめて 1 つのデータソースとして利用することで接続分散と可用性向上を可能に 主に Oracle RAC 接続で利用 Admin コンソールや WLST で構成する 指定した WebLogic サーバ上のアプリ全体で利用可能な アプリケーションにデータソース定義 XML ファイルを含ませて構成する そのアプリケーションだけで利用可能 データソース定義 XML ファイルを WebLogic サーバにデプロイして構成 そのサーバ上のアプリ全体で利用可能 11
[ 参考 ] データソースとマルチデータソース データソースは単体の DB インスタンスに特定ユーザで接続 マルチデータソースは複数データソースをまとめて 1 つのデータソースとする これにより アプリからの接続要求を分散したり 1 つのデータソースの接続先 DB インスタンスに障害が発生した場合に そのデータソースをアプリに利用させないように自動制御が可能 つまり Oracle RAC のような DB クラスタ環境での適用を前提としている WebLogic アプリケーション WebLogic アプリケーション マルチデータソース データソース データソース 1 データソース 2 データソース 3 Oracle RAC 12
データソースの構成や監視について WebLogic のデータソースは 主に管理コンソールや WLST を用いて管理操作や監視を行う 個々のデータソースや関連リソースに対応する Mbean(Configuration Mbean) により変更 監視が可能 また WebLogic のデータソースは JSR-77(Java EE Management Model ) をサポートしており 実行時の情報を Mbean(Runtime MBean) を用いてモニタリングすることも可能 ツール 作成 削除 変更 監視 管理コンソール WLST JMX APIや任意のJMX MBeanツール 13
データソースの構成内容について WebLogicにてデータソースを作成すると DOMAIN/config/jdbc 配下にデータソース毎の定義ファイル ( データソース名 -id-jdbc.xml) が生成される JDBCデータソースの対象サーバの情報はドメイン構成ファイル (config.xml) で保持される データソースを削除すると 上記 XMLやconfig.xmlのエントリも削除される 対象サーバを指定してデータソースは作成すると 初期化され状態が Running になる 状態が Running になると 対象サーバ上のすべてのアプリケーションから利用可能になる WebLogic ドメイン dsa-9999-jdbc.xml データソースの定義内容 データソース dsa 管理対象サーバ A 管理対象サーバ B config.xml データソース dsa Running データソース dsa Running ドメイン構成ファイル データソースと対象サーバの アプリ -W アプリ -X アプリ -Y アプリ -Z 関連もここに含まれる 14
[ 参考 ] JDBC データソースの構成 XML ファイル <?xml version='1.0' encoding='utf-8'?> <jdbc-data-source xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.oracle.com/weblogic/jdbc-data-source http://xmlns.oracle.com/weblogic/jdbc-data-source/1.0/jdbc-data-source.xsd"> <name>dsa</name> <jdbc-driver-params> <url>jdbc:oracle:thin:@localhost:1521/xe</url> <driver-name>oracle.jdbc.oracledriver</driver-name> <properties> <property> <name>user</name> <value>scott</value> </property> </properties> <password-encrypted>{aes}sx4lxblxakkhuf8bvnt+0hfuqodkngqjs8ymye7/xes=</password-encrypted> </jdbc-driver-params> <jdbc-connection-pool-params> <test-table-name>sql SELECT 1 FROM DUAL</test-table-name> </jdbc-connection-pool-params> <jdbc-data-source-params> <jndi-name>jdbc/dsa</jndi-name> <global-transactions-protocol>onephasecommit</global-transactions-protocol> </jdbc-data-source-params> </jdbc-data-source> 15
[ 参考 ] JDBC データソースとサーバーの関連 <?xml version='1.0' encoding='utf-8'?> <domain xmlns="http://xmlns.oracle.com/weblogic/domain" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.oracle.com/weblogic/security/xacml http://xmlns.oracle.com/weblogic/security/xacml/1.0/xacml.xsd http://xmlns.oracle.com/weblogic/security/providers/passwordvalidator http://xmlns.oracle.com/weblogic/security/providers/passwordvalidator/1.0/passwordvalidator.xsd http://xmlns.oracle.com/weblogic/domain http://xmlns.oracle.com/weblogic/1.0/domain.xsd http://xmlns.oracle.com/weblogic/security http://xmlns.oracle.com/weblogic/1.0/security.xsd http://xmlns.oracle.com/weblogic/security/wls http://xmlns.oracle.com/weblogic/security/wls/1.0/wls.xsd"> <name>domainprod</name> <domain-version>10.3.2.0</domain-version> ( 中略 ) <jdbc-system-resource> <name>dsa</name> <target>adminserver</target> <descriptor-file-name>jdbc/dsa-9730-jdbc.xml</descriptor-file-name> </jdbc-system-resource> </jdbc-system-resource> </domain> 16
ステートメント キャッシュ JDBC で 条件値のみ変化する同じ SQL を繰り返し実行する場合は 一般的に PreparedStatement を使用する その場合 DB 側の解析処理数が減るため 繰り返し実行する場合は Statement 使用時より性能向上が期待できる WebLogic の JDBC データソースでは この PrepareStatement や CallableStatement をキャッシュする機能を提供 PrepareStatement を多用するアプリケーションではさらに性能向上を期待できる Statement 使用時 PreparedStatement 使用時 Statement stmt = conn.createstatement(); for ( int id = 0 ; id < 10000 ; id++ ) { String sql = "SELECT ENAME FROM EMP WHERE EMPNO = " + id; ResultSet rs = stmt.executequery(sql); while ( rs.next() ) { // 表示などの処理 } } String sql = "SELECT ENAME FROM EMP WHERE EMPNO =?"; PreparedStatement ps = conn.preparestatement(sql); for ( int id = 0 ; id < 10000 ; id++ ) { ps.setint(1,id); ResultSet rs = ps.executequery(); while ( rs.next() ) { // 表示などの処理 } } 17
WebLogic11g に含まれる JDBC ドライバ WebLogic Server11g では 標準で下記の JDBC ドライバを提供 ドライバの実体は WL_HOME/server/lib に格納されている 下表以外の JDBC ドライバを利用する場合は WebLogic に適用する CLASSPATH の先頭に追加するドライバのライブラリを追加する ドライバファイル名備考 Oracle Thin Driver 11g ojdbc6.jar TYPE4 MySQL5.0 JDBC ドライバ WebLogic Type4 JDBC ドライバ mysql-connector-java-commercial-5.0.x-bin.jar DB2 用 :wldb2.jar MS SQL Server 用 :wlsqlserver.jar Informix 用 :wlinformix.jar Sybase 用 :wlsybase.jar DataDirect の OEM 供給 18
データソース作成時に必要なパラメータ 下表パラメータは データベース種類に限らずデータソース定義時の共通項目 接続プールは コンソールではデータソース作成後に 接続プール タブから設定する 項目 ( * は必須項目 ) 概要 Oracle Databaseの場合の例 データソース名 * WebLogicでの管理名 dsa JNDI 名 * JNDIツリーへのバインド名 jdbc/dsa データベース種類 * OracleやDB2など 1 Oracle ドライバ種類 * データベース種類に応じて指定 1 Oracle Thin Instance-Connection トランザクション オプション 非 XAドライバの場合に指定 1phase commit データベース名 * データベースのID ORCL ホスト名 * データベースのホスト名 localhost ポート * データベースへの接続ポート 1521 データベース ユーザ名 データベースユーザ名 SCOTT パスワード データベースユーザのパスワード TIGER ドライバ クラス名 * JDBCドライバのクラス名 2 oracle.jdbc.oracledriver URL* JDBC URL 2 jdbc:oracle:thin:@localhost:1521:orcl JDBC ドライバ プロパティ JDBC ドライバ テスト対象の表名 (or SQL) 接続テストに利用する表または SQL SQL SELECT 1 FROM DUAL ターゲット WLS ドメイン中 どのサーバで利用するか Server1 1 コンソールの場合リスト BOX で選択 2 コンソールの場合 自動入力 19
接続プールの主要パラメータ 一般的に プール中の接続作成 縮退のオーバーヘッドを削減するため 初期容量と最大容量を同じに設定することがのぞましい 項目概要デフォルト値 初期容量 接続プール作成時に作成される接続数 接続プールに維持される最小接続数でもある 最大容量接続プール中に作成可能な最大接続数 15 増分容量接続プール中に新たに接続を増加するときの量 1 予約時に接続をテスト テスト頻度 ( 秒 ) アプリケーションが接続要求を行った際に 接続の有効性をテストするか否か ( テスト対象の表名の指定が必須 ) 接続プール中の未使用接続に対する接続テストの実行間隔 テスト失敗時はその接続を無効化して再度接続を作成 ( テスト対象の表名の指定が必須 ) アイドルプール接続を信頼する秒数ここで指定した時間内に正常性が確認された接続のテストはスキップする 10 縮小頻度 ( 秒 ) 接続プール内の接続数を縮小させるまでの間隔 900 非アクティブ接続タイムアウト ( 秒 ) アプリケーションで使用中の接続が非アクティブの場合 ここで指定した秒数が経過すると接続プールに自動復旧する 接続予約のタイムアウト ( 秒 ) アプリケーションが接続要求時 接続を得るまで待機できる秒数 10 接続作成の再試行間隔 ( 秒 ) 接続プール中の接続作成が失敗した場合に再作成を試行する間隔 0 1 false 120 0( 無効 ) 文タイムアウト JDBC ドライバに対して実行中の SQL 文をタイムアウトする時間の指定. JDBC ドライバの Statement.setQueryTimeout のメソッド実装に依存 -1 20
Oracle JDBC Driver 用データソース WebLogic Server に含まれる Oracle の JDBC ドライバを利用してデータソースを作成する場合 ドライバのタイプと接続先指定方法により下表 6 パターンから 1 つを選択する Instance Connection: オラクルの SID を指定する方法 ( 例 :jdbc:oracle:thin:@localhost:1521:xe) Service Connection: オラクルの service_name を指定する方法 ( 例 :jdbc:oracle:thin:@localhost:1521/xe) RAC Service-Instance Connection:Oracle RAC にマルチデータソースで接続する際に使用 ドライバ種類ドライバ クラス接続先指定方法 XA Thin ドライバ Thin ドライバ oracle.jdbc.xa.client.oraclexadatasource oracle.jdbc.oracledriver Instance Connection Service Connection RAC Service-Instance Connection Instance Connection Service Connection RAC Service-Instance Connection 21
<Insert Picture Here> WebLogic11g の JDBC データソースの動作 22
JDBC データソースの動作 下表のデータソースを前提に WebLogic の JDBC データソースの動作について次のスライドより説明する データソース項目 データソース名 JNDI 名データベース種類ドライバ種類ターゲット 設定値 dsa jdbc/dsa Oracle(10g XE) Oracle Thin Service-Connection Server1 接続プール 項目 初期容量 3 最大容量 5 増分容量 1 予約時にテスト テスト頻度 0 接続予約のタイムアウト ( 秒 ) 接続作成の再試行間隔 0 設定値 False 10 縮小頻度 900 23
データソース作成 管理コンソール等で ターゲット となる WebLogic サーバ名を指定した上でデータソースの作成 アクティブ化を行うと データソースが初期化され 接続プール中に 初期容量 で指定した数の接続が作成され すぐにアプリケーションから利用可能になる ターゲット のサーバ指定無しでも作成 アクティブ化だけは可能 WebLogic サーバの再起動は不要 データソース作成時には データベースは利用可能状態である必要がある WebLogic 管理対象サーバ Server1 データソース dsa データソース dsa 接続プール を作成 アクティブ化 Running 24
データソース作成時に DB が停止している場合 データベースが利用できない状態で ターゲット指定付で データソースを作成 アクティブ化しようとすると下記のような例外が発生し アクティブ化できない ( 作成 / 後にターゲット指定してアクティブ化しても同様 ) <2010/01/12 17 時 24 分 35 秒 JST> <Error> <Deployer> <BEA-149265> < タスク 'weblogic.d eploy.configchangetask.2' に対する ID '1263284673937' のデプロイメント要求の実行中にエラーが発生しました エラー : 'weblogic.application.moduleexception: ' weblogic.application.moduleexception: at weblogic.jdbc.module.jdbcmodule.prepare(jdbcmodule.java:290) at weblogic.application.internal.flow.modulelistenerinvoker.prepare(modulelistenerinvoker.java:199) at weblogic.application.internal.flow.deploymentcallbackflow$1.next(deploymentcallbackflow.java:391) at weblogic.application.utils.statemachinedriver.nextstate(statemachinedriver.java:83) at weblogic.application.internal.flow.deploymentcallbackflow.prepare(deploymentcallbackflow.java:59) Truncated. see log file for complete stacktrace Caused By: weblogic.common.resourceexception: weblogic.common.resourceexception: Could not create pool connection. The DBMS driver exception was: Listener refus ed the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connect descriptor at weblogic.jdbc.common.internal.connectionenvfactory.createresource(connectionenvfactory.java:256) at weblogic.common.resourcepool.resourcepoolimpl.makeresources(resourcepoolimpl.java:1180) at weblogic.common.resourcepool.resourcepoolimpl.makeresources(resourcepoolimpl.java:1104) at weblogic.common.resourcepool.resourcepoolimpl.start(resourcepoolimpl.java:244) at weblogic.jdbc.common.internal.connectionpool.dostart(connectionpool.java:1065) Truncated. see log file for complete stacktrace> 25
データソース停止 管理コンソール等で データソースに対して停止操作を行うと 状態 が Shutdown になり 接続プールはクリアされ 結果 データベースとの物理接続もクリアされる データソースを停止中にアプリケーションが接続要求を行うと下記例外が発生する weblogic.jdbc.extensions.pooldisabledsqlexception: weblogic.common.resourcepool.resourcedisabledexception: Data Source test is not active, cannot allocate connections to applications WebLogic 管理対象サーバ Server1 データソース dsa を停止 データソース dsa 接続プール Shutdown 26
データソース起動 データソース停止時 起動すると 接続プール中に 初期容量 で指定した数の接続が作成され すぐにアプリケーションから利用可能になる WebLogic 管理対象サーバ Server1 データソース dsa を起動 データソース dsa 接続プール Running 27
データソース中断 管理コンソール等で データソースに対して中断操作を行うと 状態 が Suspended になるが 接続プールはクリアされず データベースとの物理接続も維持される データソースを中断中にアプリケーションが接続要求を行うと下記例外が発生する weblogic.jdbc.extensions.pooldisabledsqlexception: weblogic.common.resourcepool.resourcedisabledexception: Pool dsa is Suspended, cannot allocate resources to applications.. WebLogic 管理対象サーバ Server1 データソース dsa データソース dsa を中断 接続プール Suspened 28
データソース再開 データソース中断時 再開すると すぐにアプリケーションから利用可能になる WebLogic 管理対象サーバ Server1 データソース dsa を再開 データソース dsa 接続プール Running 29
WebLogic 起動時 WebLogic 起動時に データソースが自動的に初期化され 接続プール中に 初期容量 で指定した数の接続が作成され アプリケーションから利用可能になる WebLogic 管理対象サーバ Server1 データソース dsa WebLogic Server 起動時に初期化 接続プール Running 30
WebLogic 起動時に DB が停止している場合 WebLogic 起動時にデータベースが停止している場合 接続プールが 初期容量 >0 かつ 接続作成の再試行間隔 = 0 で設定されているデータソースは初期化に失敗する 初期化に失敗後 データベースを起動しても データソースは利用可能にならない 下記は その場合 WebLogic のサーバーログに出力される例外 <2010/01/12 16 時 50 分 09 秒 JST> <Warning> <JDBC> <BEA-001129> <Received exception while creating connection for pool "dsa": Listener refused the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connectdescriptor> <2010/01/12 16 時 50 分 10 秒 JST> <Error> <Deployer> <BEA-149205> < エラー weblogic.application.moduleexception: により アプリケーション 'dsa' を初期化できませんでした weblogic.application.moduleexception: at weblogic.jdbc.module.jdbcmodule.prepare(jdbcmodule.java:290) at weblogic.application.internal.flow.modulelistenerinvoker.prepare(modulelistenerinvoker.java:199) at weblogic.application.internal.flow.deploymentcallbackflow$1.next(deploymentcallbackflow.java:391) at weblogic.application.utils.statemachinedriver.nextstate(statemachinedriver.java:83) at weblogic.application.internal.flow.deploymentcallbackflow.prepare(deploymentcallbackflow.java:59) Truncated. see log file for complete stacktrace Caused By: weblogic.common.resourceexception: weblogic.common.resourceexception: Could not create pool connection. The DBMS driver exception was: Listener refused the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connectdescriptor at weblogic.jdbc.common.internal.connectionenvfactory.createresource(connectionenvfactory.java:256) at weblogic.common.resourcepool.resourcepoolimpl.makeresources(resourcepoolimpl.java:1180) at weblogic.common.resourcepool.resourcepoolimpl.makeresources(resourcepoolimpl.java:1104) at weblogic.common.resourcepool.resourcepoolimpl.start(resourcepoolimpl.java:244) at weblogic.jdbc.common.internal.connectionpool.dostart(connectionpool.java:1065) Truncated. see log file for complete stacktrace> 31
データソース初期化に失敗した場合の対処方法 WebLogic 起動時にデータベースが停止している場合 接続プールが 初期容量 >0 かつ 接続作成の再試行間隔 = 0 で設定しているデータソースは初期化に失敗する 初期化に失敗後 データベースを起動しても データソースは利用可能にならない その場合 以下のいずれかの方法で対処が必要 ( 方法 1)DB が起動した状態で データソース初期化が失敗した WebLogic サーバを再起動 ( 方法 2) DB が起動した状態で データソースの接続プールの 初期容量 を 0 に変更し アクティブ化する (WebLogic サーバの再起動は不要 ) 上記の方法 2 を行う場合 WLST を使用し 下記のようなスクリプトを実行する ( 下記例で dsa という部分はデータソース名 ) connect('weblogic','welcome1','t3://localhost:7001') edit() startedit() cd('/jdbcsystemresources/dsa/jdbcresource/dsa/jdbcconnectionpoolparams/dsa') cmo.setinitialcapacity(0) activate() 32
アプリケーション接続要求時 アプリケーションがデータソースを利用して接続を要求した時 データソースの接続プールに未使用接続があれば それを 予約 してアプリケーションが利用する アプリケーションは利用後接続をリリースすると 接続プールに接続が戻される WebLogic 管理対象サーバ Server1 データソース dsa アプリケーション 1 getconnection() で予約 接続プール 2 使用 3 Connection の Close() でリリース 33
接続要求時に未使用接続が無い場合 1 接続プール中の接続数が最大容量に達していない場合は プール中に 増分容量 で指定した分 新たな接続が生成され アプリケーションはそれを予約 使用することが可能 WebLogic 管理対象サーバ Server1 データソース dsa アプリケーション アプリケーション アプリケーション 接続プール アプリケーション 1 getconnection() で予約 3 アプリケーションで利用可能 2 現在接続数 3 最大容量 5 なので 増分容量 1 なので 接続を 1 つ追加作成する 34
接続要求時に未使用接続が無い場合 2 接続プール中の接続数が最大容量に達している場合は 接続プールに接続が戻るまで 接続予約のタイムアウト で指定した秒数分だけ待機する 接続予約のタイムアウト で待機しても接続を得られなかった場合 下記例外が発生する weblogic.jdbc.extensions.poollimitsqlexception: weblogic.common.resourcepool.resourcelimitexception: No resources currently available in pool dsa to allocate to applications, please increase the size of the pool and retry.. WebLogic 管理対象サーバ Server1 データソース dsa アプリケーションアプリケーションアプリケーションアプリケーションアプリケーションアプリケーション 1 getconnection() で予約 接続プール 2 現在使用数 5 最大容量 5のため アプリは 接続予約のタイムアウト まで待機 タイムアウトになると例外発生 35
接続プールの縮小 WebLogic が起動し 接続プールが初期化された後 縮小頻度 で設定した時間が経過したとき 接続プールが 初期容量 以上に増加していた場合 接続プール中の未使用の接続数は 初期容量 値まで自動的に縮小される その後も 縮小頻度 の間隔で縮小処理が行われる 使用中の接続は縮小対象にはならないが それにより 初期容量 まで縮小できない場合は使用後に即縮小される ( 縮小間隔もリセットされる ) 初期容量 = 最大容量 の場合は 当然ながら縮小されない 縮小処理は 管理コンソールから手動で行うことも可能 WebLogic 管理対象サーバ Server1 初期化縮小縮小 データソース dsa 接続プール 縮小頻度 縮小頻度 データソース初期化後 縮小頻度 900 秒の間隔で 初期容量 3 まで縮小 36
データベース再起動時 今回の前提のように 予約時にテスト =False かつ テスト頻度 =0 が設定されているデータソースで 接続プールに正常に接続が作成された後 データベースが再起動した場合 接続プール中の全接続は無効となり アプリケーションが接続要求を行うと下記例外が発生する (Oracle Database10g の場合 ) java.sql.sqlrecoverableexception: ソケットから読み込むデータはこれ以上ありません この場合 次のスライドの対処を行わない限りアプリケーションはデータソースを利用できない WebLogic 管理対象サーバ Server1 データソース dsa アプリケーション 3 getconnection() で予約 接続プール 2DB 再起動 4 使用時に 例外発生 1 接続プールに 正常に接続を作成 停止 起動 37
データベース再起動時の対処方法 今回の前提のように 予約時にテスト =False かつ テスト頻度 =0 が設定されているデータソースで 接続プールに正常に接続が作成された後 データベースが再起動した場合 接続プール中の全接続は無効となり アプリケーションはデータソースを利用できなくなる この場合は 管理コンソールを利用し データソースの 停止 起動 またはデータソースの リセット を行い 接続プールに有効な接続を再作成することで 再度アプリケーションから利用可能となる WebLogic 管理対象サーバ Server1 3データソースを 停止( 強制停止 ) -> 起動 または リセット することでアプリから再度利用可能になる データソース dsa 接続プール 1 接続プールに 2DB 再起動 正常に接続を作成 停止 起動 38
データベース再起動時の問題の予防策 1 データソースの接続プールに接続が作成された後にデータベースが再起動した場合の問題は 下記パラメータを設定することで予防することができる 予約時にテスト を True にし テスト対象の表名 に有効な SQL または表名を設定する 予約時にテスト を True にすると アプリケーションが接続要求時に 接続プールの接続が有効か実際に SQL を発行してテストを行う もし SQL が成功しない場合はその接続を破棄し 新たに接続を作成する ( アプリケーションでは例外が発生せず 正常に接続を取得できる ) ただし 接続要求都度に SQL を発行するため 理論上 DB 側の負荷が幾ばくか高まる 予約時にテスト =true の場合 WebLogic 管理対象サーバ Server1 データソース dsa アプリケーション 3 getconnection() で予約 接続プール 2DB 再起動 5 正常に接続を 利用可能 4 テスト対象の表名 で指定したSQLを発行し接続の有効性をテスト 無効接続の場合 1 接続プールに 正常に接続を作成 停止 起動 その接続を破棄 再作成する 39
[ 参考 ] 予約時テストのログ 予約時にテスト を True にし テスト対象の表名 に有効な SQL または表名を設定した場合 アプリケーションが接続要求を行った時に接続テストが行われる DB の再起動などで接続プールの接続が無効になった状態で 接続テストが行われるとサーバーログに下記のようなログが生成される <2010/01/15 15 時 32 分 40 秒 JST> <Error> <JDBC> <BEA-001112> <Test "SELECT 1 FROM D UAL" set up for pool "dsa" failed with exception: "java.sql.sqlrecoverableexcept ion: ソケットから読み込むデータはこれ以上ありません ".> 40
データベース再起動時問題の予防策 2( 推奨 ) データベース再起動時には データソースの接続プールに無効接続が発生するが 無効接続が長期間接続プールに滞留すると JDBC サブシステム自体が不安定になり WebLogic プロセスが Failed ステータスに移行する可能性が高い そのため データベース再起動時の問題の予防策としては 予約時のテスト = True のみならず テスト頻度 を 0 以外の値を設定することを推奨する 例えば テスト頻度 を 60 に設定すると 接続プールの未使用接続を 60 秒単位でテストを行い 無効であれば破棄 再作成を行う 予約時にテスト =true の場合 WebLogic 管理対象サーバ Server1 データソース dsa アプリケーション 3 getconnection() で予約 接続プール 2DB 再起動 5 正常に接続を 利用可能 4 テスト対象の表名 で指定した SQL を発行し接続の有効性をテスト 1 接続プールに 無効接続の場合 その接続 正常に接続を作成 停止 起動 を破棄 再作成する 未使用接続も テスト頻度 で指定した間隔でテスト 無効接続の場合 その接続 を破棄 再作成する 41
[ 参考 ] アイドルプール接続を信頼する秒数 テスト頻度 >0 で設定すると データベース再起動時の無効接続の破棄に役立つが 正常運用時は指定した間隔でデータベースに対して SQL を発行し続けるため データベース側の負荷を増やしてしまうことになる アイドルプール接続を信頼する秒数 を指定すると 最近正常に使用された接続に対して 接続テストを行わせないことが可能 例えば アイドルプール接続を信頼する秒数 を 30 に指定した場合 接続プールに戻されてから 30 秒以内に再度予約された接続については 次回の接続テストをスキップさせる アイドルプール接続を信頼する秒数 の指定値が高いと 接続プール中の接続の信頼性は低下するが テスト回避によるオーバーヘッド削減で性能は向上する可能性がある 逆に アイドルプール接続を信頼する秒数 の指定値が低いと 接続プール中の接続の信頼性は向上するが テスト頻度が高まり 性能は务化する可能性がある 42
<Insert Picture Here> WebLogic11g の JDBC データソースの監視 43
JDBC データソースの監視 WebLogic では JDBC データソースの構成情報や実行時の統計情報を MBean として監視可能 監視を行うツールとして 管理コンソールや WLST WLDF コンソール拡張 JMX API や任意の MBean ブラウザ等を利用可能 下表は JDBC データソース関連の主要な MBean 種類 MBean 名説明 ConfigurationBean JDBCDataSourceBean データソースを表す 下記 4 つの MBean の親となる JDBCDriverParamsBean JDBCConnectionPoolParamsBean JDBCDataSourceParamsBean JDBCXAParamsBean データソースのJDBC ドライバ設定を表す データソースの接続プールの設定を表す データソースの設定を表す データソースのXAトランザクションの設定を表す Runtime Bean JDBCServiceRuntimeMBean JDBC サブシステムを表し 使用可能な下記 2つの MBeanのリストにアクセスするためのメソッドを提供 JDBCDriverRuntimeMBean JDBCDataSourceRuntimeMBean サーバがメモリにロードした JDBC ドライバを表す サーバやクラスタにデプロイされた JDBC データソースを表す 44
[ 参考 ] 実行時の統計情報の項目 1 Rutime Bean による実行時の統計情報の主要な項目 管理コンソールの監視項目名 JDBCDataSourceRuntimeMBean の属性名説明 アクティブな接続の平均数 ActiveConnectionsAverageCount 使用中接続の平均数 現在アクティブな接続の数 ActiveConnectionsCurrentCount 現在使用中の接続数 アクティブな接続の最大数 ActiveConnectionsHighCount 同時に使用された接続の最大数 接続遅延時間 (msec) ConnectionDelayTime 物理接続の作成に要した平均時間 接続の総数 ConnectionsTotalCount データ ソースで作成されたデータベ ース接続の累計数 現在の容量 CurrCapacity 接続プール中の接続数 予約に失敗した要求の数 FailedReserveRequestCount アプリが接続予約に失敗した数 再接続の失敗数 FailuresToReconnectCount データソースが物理接続のリフレッシ ュに失敗した回数 リークした接続数 LeakedConnectionCount アプリが close しなかった接続数 使用可能数 NumAvailable 接続プール中の使用可能な接続数 使用不可数 NumUnavailable 接続プール中の未使用の接続数 予約された要求の数 ReserveRequestCount 接続要求の現在の累積数 45
[ 参考 ] 実行時の統計情報の項目 2 管理コンソールの監視項目名 JDBCDataSourceRuntimeMBean の属性名説明 プリペアド ステートメント キャッシュのアクセス数 プリペアド ステートメント キャッシュの追加数 プリペアド ステートメント キャッシュの現在サイズ プリペアド ステートメント キャッシュの削除数 プリペアド ステートメント キャッシュのヒット数 プリペアド ステートメント キャッシュの失敗数 PrepStmtCacheAccessCount PrepStmtCacheAddCount PrepStmtCacheCurrentSize PrepStmtCacheDeleteCount PrepStmtCacheHitCount PrepStmtCacheMissCount 文キャッシュにアクセスされた累計数 文キャッシュに追加された文の現在の累積数 文キャッシュの現在の数 キャッシュから削除された文の数 文キャッシュが使用された数 文キャッシュが使用されなかった数 最大待機時間 ( 秒 ) WaitSecondsHighCount 接続待機の最大時間 接続待機の現在数 WaitingForConnectionCurrentCount 接続待機している現在の要求数 接続待機の失敗総数 WaitingForConnectionFailureTotal 接続待機後 接続予約に失敗した総数 接続待機の最大数 WaitingForConnectionHighCount 接続待機した要求の最大数 接続待機の成功総数 WaitingForConnectionSuccessTotal 接続待機後 接続を予約できた総数 接続待機の総数 WaitingForConnectionTotal 接続待機した要求数の総数 46
管理コンソールによる監視例 接続プールの 最大容量 値が適切かどうかを監視する例 下記例では 最大容量 を 2 接続予約のタイムアウト を 10 秒に設定 これらを総合すると最大容量が不足しており 最低でも 20 (2 + 18) に する必要があると判断できる 最大容量 の 2 まで達成する ことがある 接続予約のタイム アウト まで待機している リクエストがある 待機の最大数が 18 発生 予約失敗が 多数発生 47
WLDF コンソール拡張による監視例 接続プールの状況を自動的にリフレッシュさせつつ 時系列に確認したい場合などは WLDF コンソール拡張を活用するとよい 48
<Insert Picture Here> WebLogic11g JDBC データソースのデバッグ 49
データソースのデバッグ WebLogic では データソースやその中に含まれる接続プールの状況 またはアプリケーションが発行している JDBC API や SQL の内容などの詳細情報をデバッグ用に取得 表示する下記の機能を提供している 実行時の統計情報の監視 管理コンソールや 任意の JMX MBean ブラウザで参照可能 ( 前のスライドで説明 ) プロファイル機能を利用した WLDF(WebLogic 診断フレームワーク ) による監視 デバッグ ログの出力 JRockit Flight Recorder を利用したプロファイリング 50
WebLogic11g JDBC データソースのデバッグ WebLogic の JDBC データソースは 下記の設定によりデバッグ ログを出力することが可能 下記 いずれかの方法で 下表のデバッグスコープを指定する 管理コンソールで指定する WebLogic 起動の JavaVM オプションで指定する WLST で指定する デバッグログは DOMAIN/servers/( サーバ名 )/logs/( サーバ名 ).log に出力 デバッグスコープ 説明 1 DebugJDBCSQL ( weblogic.jdbc.sql) 引数と戻り値 送出された例外など 呼び出されたすべての JDBC メソ ッドに関する情報を出力する 2 DebugJDBCConn ( weblogic.jdbc.connection) データソース内のすべての接続予約や解放の操作など すべてのアプ リケーションリクエストを追跡する 3 DebugJDBCRMI (weblogic.jdbc.rmi) JDBCSQL と同様 ただし RMI レベルで機能する 4 DebugJDBCInternal ( weblogic.jdbc.internal) データソース 接続環境 データソースマネージャに関する低レベル のデバッグ 5 DebugJDBCDriverLogging ( weblogic.jdbc.driverlogging) JDBC ドライバレベルでのロギングを有効化する ( オラクルの場合 デバッグ用 JDBC ドライバが必要 ) デバッグ対象 (* 上表 1~4) WebLogic JDBC データソース JDBC Driver 51
管理コンソールでの指定方法 ドメイン構造 で 環境 - サーバー を選択 表からサーバ名を選択後 デバッグタブを選択し weblogic - jdbc の階層からスコープを指定して 有効化 ボタンを選択し アクティブ化 52
JavaVM オプションと WLST での指定方法 JavaVM オプションでの指定方法 connect( weblogic, welcome1, t3://localhost:7001 ) edit() cd('servers/server1/serverdebug/server1') startedit() set('debugjdbcsql','true') save() activate() -Dweblogic.debug.DebugJDBCSQL=true -Dweblogic.log.StdoutSeverity="Debug" WLST での指定方法 下記例のようなスクリプトを実行する ( 下記例中の Server1 は管理対象サーバ名 ) 53
データソースデバッグ ログの出力例 ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259609> <BEA-000000> <[weblogic.jdbc.wrapper.statement_oracle_jdbc_driver_oraclestatementwrapper@7] executequery(select 'TEST' from dual )> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.statement_oracle_jdbc_driver_oraclestatementwrapper@7] executequery returns weblogic.jdbc.wrapper.resultset_oracle_jdbc_driver_oracleresultsetimpl@8> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.resultset_oracle_jdbc_driver_oracleresultsetimpl@8] getmetadata()> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.resultset_oracle_jdbc_driver_oracleresultsetimpl@8] getmetadata returns weblogic.jdbc.wrapper.resultsetmetadata_oracle_jdbc_driver_oracleresultsetmetadata@9> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.resultsetmetadata_oracle_jdbc_driver_oracleresultsetmetadata@9] getcolumncount()> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.resultsetmetadata_oracle_jdbc_driver_oracleresultsetmetadata@9] getcolumncount returns 1> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.resultsetmetadata_oracle_jdbc_driver_oracleresultsetmetadata@9] getcolumnname(1)> ####<2010/01/20 17 時 14 分 19 秒 JST> <Debug> <JDBCSQL> <tnobe-jp> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.default (self-tuning)'> <<anonymous>> <> <> <1263975259656> <BEA-000000> <[weblogic.jdbc.wrapper.resultsetmetadata_oracle_jdbc_driver_oracleresultsetmetadata@9] getcolumnname returns 'TEST'> 54
<Insert Picture Here> WebLogic11g JDBC データソースにおける Oracle JDBC Driver のデバッグ 55
Oracle JDBC Driver のデバッグ設定 Oracle JDBC Driver では デバッグ可能なライブラリを提供 (KROWN#139049) WebLogic11g では WL_HOME /server/ext/jdbc/oracle/11g/ojdbc6_g.jar が Oracle JDBC Driver のデバッグ用ライブラリ Oracle JDBC Driver のデバッグ用ライブラリを WebLogic の CLASSPATH の先頭に指定 ログ設定ファイルを作成 ドメイン ディレクトリに格納 WebLogic の JavaVM オプションで JDBC トレースを true 指定して WebLogic を起動 WebLogic JDBC データソース デバッグ対象 Oracle JDBC Driver Oracle Database 56
1 Oracle JDBC Driver のデバッグ用ライブラリを WebLogic の CLASSPATH の先頭に指定 WebLogic サーバに指定する CLASSPATH 環境変数の先頭にデバッグ用ライブラリを指定するには 下記のように PRE_CLASSPATH 環境変数を WebLogic 起動クリプトに設定する 管理サーバの場合は DOMAIN/startWebLogic スクリプト 管理対象サーバの場合は DOMAIN/bin/startManagedWebLogic スクリプト @ECHO OFF @REM WARNING: This file is created by the Configuration Wizard. @REM Any changes to this script may be lost when adding extensions to this configuration. SETLOCAL set PRE_CLASSPATH=D: oracle server1032 wlserver_10.3 server ext jdbc oracle 11g ojdbc6_g.jar set DOMAIN_HOME=D: Oracle server1032 user_projects domains domainprod call "%DOMAIN_HOME% bin startweblogic.cmd" %* ENDLOCAL 57
2 ログ設定ファイルを作成 WebLogic のドメイン ディレクトリに格納 JDBC のデバッグ ログのプロパティファイルを作成し WebLogic のドメイン ディレクトリに格納する 下記では デバッグ ログを D: temp jdbc.log として出力している例 ファイル名は任意でよい ( 当資料では 下記例を OracleJDBCLog.properties という名で扱う ).level=severe handlers=java.util.logging.filehandler oracle.jdbc.level=fine oracle.jdbc.handlers=java.util.logging.filehandler java.util.logging.filehandler.level=fine java.util.logging.filehandler.pattern = d: temp jdbc.log java.util.logging.filehandler.count = 1 java.util.logging.filehandler.formatter = java.util.logging.simpleformatter 58
3 WebLogic の JavaVM オプションで JDBC トレースを true 指定して WebLogic を起動 WebLogic サーバに JavaVM オプションを指定するには 下記のように JAVA_OPTIONS 環境変数を WebLogic 起動クリプトに設定する 管理サーバの場合は DOMAIN/startWebLogic スクリプト 管理対象サーバの場合は DOMAIN/bin/startManagedWebLogic スクリプト @ECHO OFF @REM WARNING: This file is created by the Configuration Wizard. @REM Any changes to this script may be lost when adding extensions to this configuration. SETLOCAL set JAVA_OPTIONS=-Djava.util.logging.config.file=OracleJDBCLog.properties -Doracle.jdbc.Trace=true set PRE_CLASSPATH=D: oracle server1032 wlserver_10.3 server ext jdbc oracle 11g ojdbc6_g.jar set DOMAIN_HOME=D: Oracle server1032 user_projects domains domainprod call "%DOMAIN_HOME% bin startweblogic.cmd" %* ENDLOCAL 59
Oracle JDBC デバッグ ログの出力例 2010/01/18 15:48:25 oracle.jdbc.driver.physicalconnection getmetadata TRACE_1: Public Enter: 2010/01/18 15:48:25 oracle.jdbc.driver.physicalconnection getmetadata TRACE_1: return: oracle.jdbc.driver.oracledatabasemetadata@13e5d15 2010/01/18 15:48:25 oracle.jdbc.driver.physicalconnection getmetadata TRACE_1: Exit 2010/01/18 15:48:25 oracle.jdbc.oracledatabasemetadata getdrivername TRACE_1: Public Enter: 2010/01/18 15:48:25 oracle.jdbc.oracledatabasemetadata getdrivername TRACE_1: return: Oracle JDBC driver 2010/01/18 15:48:25 oracle.jdbc.oracledatabasemetadata getdrivername TRACE_1: Exit 2010/01/18 15:48:25 oracle.jdbc.oracledatabasemetadata getdriverversion TRACE_1: Public Enter: 2010/01/18 15:48:25 oracle.jdbc.oracledatabasemetadata getdriverversion TRACE_1: return: 11.1.0.7.0-Production 2010/01/18 15:48:25 oracle.jdbc.oracledatabasemetadata getdriverversion TRACE_1: Exit 2010/01/18 15:48:25 oracle.jdbc.driver.physicalconnection createstatement TRACE_1: Public Enter: 2010/01/18 15:48:25 oracle.jdbc.driver.physicalconnection createstatement TRACE_1: return: oracle.jdbc.driver.oraclestatementwrapper@11ab8a5 2010/01/18 15:48:25 oracle.jdbc.driver.physicalconnection createstatement TRACE_1: Exit 2010/01/18 15:48:25 oracle.jdbc.driver.oraclestatement executequery TRACE_1: Public Enter: "select * from customer " 2010/01/18 15:48:25 oracle.jdbc.driver.oraclestatement doexecutewithtimeout 設定 : SQL: select * from customer 2010/01/18 15:48:26 oracle.jdbc.driver.oraclestatement executequery TRACE_1: return: oracle.jdbc.driver.oracleresultsetimpl@1adf5e1 2010/01/18 15:48:26 oracle.jdbc.driver.oraclestatement executequery TRACE_1: Exit 60
<Insert Picture Here> WebLogic11g JDBC データソースにおける推奨 / 注意事項 61
JDBC データソース構成における推奨 / 注意事項 WebLogic11g の JDBC データソース構成における下記 4 点の推奨 注意事項について次スライドより説明 接続プールの容量について 接続プールのテストについて ステートメント キャッシュについて 他アプリケーション サーバーからの移行時の注意点について 62
1. 接続プールの容量について 1 接続プールの容量における推奨事項 接続プールの 初期容量 や 最大容量 の値は同じにする 接続プールの初期容量と最大容量が異なる場合 同時リクエスト数によっては接続プール内で新たに DB への物理接続処理が発生し得る また接続プールの縮小処理も発生し得る この DB への物理接続や縮小時の切断処理は決して軽くない そのため運用中に接続プール中の接続が増減しないように初期容量 や 最大容量 の値は同じにすることを推奨する 63
1. 接続プールの容量について 2 接続プールの容量における推奨事項 WebLogic で同時実行される最大スレッド数 <= 接続プールの 最大容量 にする WebLogic 上のアプリケーションはスレッドにて処理されるが 同時実行スレッド数が多くなると それに対応できる接続プール中の接続が無ければ接続予約時でスレッドの待機が発生してしまい 性能に影響を与えてしまう ( アプリの中で DB アクセスを行わない処理の比率が高い場合はこの限りでない ) WebLogic で同時実行される最大スレッド数はワークマネジャー機能でサーバまたはアプリケーション別に指定できる その際に 最大スレッド数 = 特定の接続プールの最大容量として指定することも可能 64
2. 接続プールのテストについて 1 接続プールのテストにおける推奨事項 接続プールでテスト機能を設定するか否かは データベース障害時の対応における要件と データベース サーバ側の負荷状況を鑑みて判断する データベース サーバ側の負荷 (CPU 使用率など ) が非常に高い場合 接続プールのテスト機能は極力使用しない方がよい ( シングル構成の ) データベースが運用中に 障害等で再起動してしまった場合で その際に WebLogic サーバまたはデータソースの再起動などの手動操作を行うことが許容されない場合は 接続予約時のテスト を true にし かつ テスト頻度 も設定し 接続テストを実施させる 65
2. 接続プールのテストについて 2 接続プールのテストにおける注意事項 WebLogic とデータベースの間に Firewall 等が設置されている場合 FireWall が接続プール中の接続と DB 間のアイドルな通信を一定間隔で自動切断させないようにする必要がある FireWall によっては アイドルとなった通信を自動的に無効化する機能を提供するが 接続プールは 常時 DB との通信を保持するため この影響を受ける可能性がある その場合 FireWall 側でその機能を無効化する できない場合は FireWall がアイドル通信を自動切断するより早い間隔で 接続プールの テスト頻度 を設定する 66
3. ステートメント キャッシュについて 1 ステートメント キャッシュにおける注意事項 ステートメント キャッシュ数 接続プールの 最大容量 接続プール数がデータベース側で許容されるオープン カーソル数を超えないようにする必要がある ステートメント キャッシュ機能により PreparedStatement がキャッシュされデータベースのカーソルをオープンしたままの状態で維持される ( データベース実装に依存 ) ステートメント キャッシュ数 は 一つの接続当りのキャッシュ数になるため最大同時キャッシュ数がデータベースの許容オープンカーソル数を超えないようにする必要がある 67
3. ステートメント キャッシュについて 2 ステートメント キャッシュにおける注意事項 ステートメント キャッシュが有効な状態では 運用中のデータベースの表定義を変更 ( 列追加など ) は 基本的に避ける ステートメント キャッシュが有効な状態 ( ステートメント キャッシュ数 が 0 より大きい場合 ) で キャッシュされた PreparedStatement で解析対象の SQL 内に含まれるテーブルなどの定義を変更すると 次回キャッシュした PreparedStatement を使用時に SQL Exception が発生するため その場合 管理コンソールで 文キャッシュのクリア の操作が必要 (Oracle Database 10g では 下記のような例外が発生する ) java.sql.sqlexception: プロトコル違反です at oracle.jdbc.driver.sqlstatemapping.newsqlexception 68
<Insert Picture Here> Appendix: 管理コンソールを用いた JDBC データソースの構成手順 69
JDBC データソースの作成 1 管理コンソールにログインして下図の操作を行います 1 チェンジセンタ で ロックして編集 ボタンを選択 3 JDBC データソースの概要 で 新規作成 ボタンを選択 2 ドメイン構造 で サービス - JDBC - データソース を選択 70
JDBC データソースの作成 2 データソース名や JNDI 名などを指定します 1 名前 で任意の名前を入力 2 JNDI 名 で任意の値を入力 3 データベースの種類やドライバを選択して 次へ ボタンを選択 当資料では Oracle Oracle Driver (Thin) for Service Connections を選択 71
JDBC データソースの作成 3 トランザクション オプションを選択して 次へ ボタンを選択します 当資料ではデフォルトのまま 72
JDBC データソースの作成 4 データベースの接続プロパティを設定 DB 接続に必要な 情報を入力 73
JDBC データソースの作成 5 構成のテスト ボタンを選択し 接続テストが正常処理されることを確認したら 次へ ボタンを選択します 74
JDBC データソースの作成 6 サーバ で対象となるサーバを選択して 終了 ボタンを選択します 75
JDBC データソースの作成 7 変更のアクティブ化 ボタンを選択して構成内容を確定させます ボタン選択後 すべての変更がアクティブ化されました 再起動は不要です のメッセージが表示されることを確認 76
接続プールの設定 1 作成したデータソースのリンクを選択します 77
接続プールの設定 2 接続プール タブ画面を表示します 2 接続プール タブを選択 1 チェンジセンタ で ロックして編集 ボタンを選択 78
接続プールの設定 3 初期容量 と 最大容量 に任意の値に設定して保存ボタンを選択します 79
接続プールの設定 4 変更のアクティブ化 ボタンを選択して構成内容を確定させます ボタン選択後 すべての変更がアクティブ化されました 再起動は不要です のメッセージが表示されることを確認 80
接続プールの監視設定 1 作成したデータソースの 監視 画面を表示します 2 統計 タブを選択 1 監視 タブを選択 3 この表のカスタマイズ リンクを選択 81
接続プールの監視設定 2 監視したい項目を選択します 2 適用 ボタンを選択 1 任意の項目を選択 当資料では 現在アクティブな接続数 アクティブな接続の最大数 接続遅延時間 最大使用可能数 を追加 82
接続プールの監視設定 3 選択した項目が表示されていることを確認します 83
[ 参考 ] データソース作成後の接続テスト データソースを作成後に そのデータソースの接続テストを行うには テスト対象のテーブル名 に適切な SQL または表名を指定しておく必要があります チェンジセンタ で ロックして編集 ボタンを選択 ドメイン構造 で サービス - JDBC - データソース を選択 JDBC データソースの概要 で テストするデータソー スの名前リンクを選択し 接続プール タブを選択 画面下部の 詳細 リンクを選択 テスト対象のテーブル名 に適切なテーブル名または SQL 文が指定されていることを確認し 保存 ボタンを 選択後 変更のアクティブ化 ボタンを選択 モニタ タブ テスト タブで サーバ を指定して データソースのテスト ボタンを選択して結果を確認 84
OTN セミナーオンデマンドコンテンツダイセミで実施された技術コンテンツを動画で配信中!! ダイセミのライブ感はそのままに お好きな時間で受講頂けます 最新情報つぶやき中 OracleMiddle_jp セミナ情報 お勧め情報 公開予告 など OTN オンデマンド 掲載のコンテンツ内容は予告なく変更になる可能性があります 期間限定での配信コンテンツも含まれております お早めにダウンロード頂くことをお勧めいたします 86
Oracle エンジニアのための技術情報サイトオラクルエンジニア通信 http://blogs.oracle.com/oracle4engineer/ 最新情報つぶやき中 oracletechnetjp 技術資料 ダイセミの過去資料や製品ホワイトペーパー スキルアップ資料などを多様な方法で検索できます キーワード検索 レベル別 カテゴリ別 製品 機能別 コラム オラクル製品に関する技術コラムを毎週お届けします 決してニッチではなく 誰もが明日から使える技術の あ そうだったんだ! をお届けします オラクルエンジニア通信 こんな資料が人気です 6か月ぶりに資料ダウンロードランキングの首位が交代! 新王者はOracle Database 構築資料でした データベースの性能管理手法について Statspack 派も Enterprise Manager 派も目からウロコの技術特集公開中 87
OTN ダイセミでスキルアップ!! 一般的な技術問題解決方法などを知りたい! セミナ資料など技術コンテンツがほしい! Oracle Technology Network(OTN) を御活用下さい http://forums.oracle.com/forums/main.jspa?categoryid=484 一般的技術問題解決にはOTN 掲示版の ミドルウェア をご活用ください OTN 掲示版は 基本的に Oracle ユーザー有志からの回答となるため 100% 回答があるとは限りません ただ 過去の履歴を見ると 質問の大多数に関してなんらかの回答が書き込まれております http://www.oracle.com/technetwork/jp/testcontent/index-086873-ja.html 過去のセミナ資料 動画コンテンツは OTN の OTN セミナーオンデマンドコンテンツ へ ダイセミ事務局にダイセミ資料を請求頂いても お受けできない可能性がございますので予めご了承ください ダイセミ資料はOTNコンテンツオンデマンドか セミナ実施時間内にダウンロード頂くようお願い致します 88
IT プロジェクト全般に渡る無償支援サービス パフォーマンス診断サービス Web システムボトルネック診断サービス データベースパフォーマンス診断サービス 移行支援サービス SQL Server からの移行支援サービス DB2 からの移行支援サービス Sybase からの移行支援サービス MySQL からの移行支援サービス Postgre SQL からの移行支援サービス Access からの移行支援サービス Oracle Application ServerからWeblogicへ移行支援サービス NEW Oracle Direct Concierge サービス NEW システム構成診断サービス Oracle Database 構成相談サービス サーバー統合支援サービス 仮想化アセスメントサービス メインフレーム資産活用相談サービス BI EE アセスメントサービス 簡易業務診断サービス バージョンアップ支援サービス Oracle Database バージョンアップ支援サービス Weblogic Server バージョンアップ支援サービス Oracle Developer/2000(Froms/Reports) Web アップグレード相談サービス NEW オラクル社のエンジニアが直接ご支援しますお気軽にご活用ください! オラクル無償支援 検索 89
1 日 5 組限定! 製品無償評価サービス 提供シナリオ一例 データベースチューニング 無停止アップグレード アプリケーション性能 負荷検証 Webシステム障害解析 インストールすることなく すぐに体験いただけます サービスご提供までの流れ 1. お問合せフォームより 製品評価サービス希望 と必要事項を明記し送信下さい 2. 弊社より接続方法手順書およびハンズオン手順書を送付致します 3. 当日は 弊社サーバー環境でインターネット越しに製品を体感頂けます Web 問い合わせフォーム サービスご提供には事前予約が必要です ダイデモ をキーワードに検索することで申し込みホームページにアクセスできます http://www.oracle.com/jp/direct/services/didemo-195748-ja.html 90
あなたにいちばん近いオラクル Oracle Direct まずはお問合せください Oracle Direct 検索 システムの検討 構築から運用まで ITプロジェクト全般の相談窓口としてご支援いたします システム構成やライセンス / 購入方法などお気軽にお問い合わせ下さい Web 問い合わせフォームフリーダイヤル 専用お問い合わせフォームにてご相談内容を承ります http://www.oracle.com/jp/direct/inquiry-form-182185-ja.html こちらから詳細確認のお電話を差し上げる場合がありますので ご登録されている連絡先が最新のものになっているか ご確認下さい 0120-155-096 月曜 ~ 金曜 9:00~12:00 13:00~18:00 ( 祝日および年末年始除く )
93