Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

WebLogic Server 11g - JDBCデータソース

9.410 Aufrufe

Veröffentlicht am

- JDBCデータソースは、アプリケーション実行環境(アプリケーションサーバー)において、アプリケーションからデータベースへの接続サービスを提供する機能です。
-このJDBCデータソースを活用することによりアプリケーションは、データーベース接続に必要な物理的な情報(例えば、DBホスト名、DBユーザIDやパスワードなど)を意識せずにデータベース接続を行うことが可能です。さらに接続プールを活用することでデータベースへの接続、切断処理のオーバーヘッドを削減することが可能です。

Veröffentlicht in: Technologie
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/39mQKz3 ❶❶❶
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Dating for everyone is here: ❤❤❤ http://bit.ly/39mQKz3 ❤❤❤
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

WebLogic Server 11g - JDBCデータソース

  1. 1. <Insert Picture Here>WebLogic Server 11g JDBCデータソース日本オラクル株式会社Fusion Middleware事業統括本部 ソリューション本部Application Gridソリューション部
  2. 2. 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。 Copyright© 2011, Oracle. All rights reserved. 2
  3. 3. 【PR】 Copyright© 2011, Oracle. All rights reserved.
  4. 4. 当資料内容について• 当資料では、WebLogic ServerのJDBCデータソースに ついて解説します。• 対象とするWebLogic Serverのバージョンは、 11gR1(10.3.3)です。• 当資料では、基本編としてJDBCデータソースの基本動作 やパラメータについて解説します。• マルチデータソースやGridLink for RACについては当資 料には含みません。 4 Copyright© 2011, Oracle. All rights reserved.
  5. 5. Agenda• JDBCデータソースとは• WebLogic11gのJDBCデータソース• WebLogic11gのJDBCデータソースの動作• WebLogic11gのJDBCデータソースの監視• WebLogic11gのデータソースのデバッグ• WebLogic11gの JDBCデータソースにおけるOracle JDBC Driverのデバッグ• WebLogic11gのJDBCデータソースにおける推奨/注意 事項• Appendix:管理コンソールを用いたJDBCデータソースの 構成手順 5 Copyright© 2011, Oracle. All rights reserved.
  6. 6. <Insert Picture Here>JDBCデータソースとは Copyright© 2011, Oracle. All rights reserved. 6
  7. 7. JDBCデータソースとは• アプリケーション実行環境(APサーバ)において、アプリケーションにデータベー ス接続サービスを提供する機能• アプリケーションは、DB接続に必要な物理的な情報(DBホスト名、DBユーザID やパスワードなど)を意識せずにデータベース接続を行える。• 接続プールを活用することでDB接続、切断処理のオーバーヘッドを削減可能。 APサーバ JNDIネーミング・サービス JDBCデータソース・サービス JDBCデータソース dsA 利用するJDBCドライバ DB接続情報 ルックアップ JNDI名 接続プール データベース jdbc/dsA jdbc/dsA アプリケーション 7 Copyright© 2011, Oracle. All rights reserved.
  8. 8. 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(); //コネクションクローズ処理 8 Copyright© 2011, Oracle. All rights reserved.
  9. 9. JDBCデータソースを利用しない場合• アプリケーションがAPサーバのJDBCデータソース・サービスを利用せず、 JDBCドライバをロードし、そのAPIを使用してDB接続を行うことも可能。• ただしその場合、DB接続情報や接続プールの管理をすべてアプリケーション側 で管理・制御する必要がある。 APサーバ アプリケーション 利用するJDBCドライバと DB接続情報の管理 接続プールの制御 データベース 9 Copyright© 2011, Oracle. All rights reserved.
  10. 10. 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(); //コネクションクローズ処理 10 Copyright© 2011, Oracle. All rights reserved.
  11. 11. <Insert Picture Here>WebLogic11g のJDBCデータソース Copyright© 2011, Oracle. All rights reserved. 11
  12. 12. 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サーバにデ プロイして構成。そのサーバ上のアプリ全体で利用可能。 12 Copyright© 2011, Oracle. All rights reserved.
  13. 13. [参考]データソースとマルチデータソース• データソースは単体のDBインスタンスに特定ユーザで接続• マルチデータソースは複数データソースをまとめて1つのデータソースとする。• これにより、アプリからの接続要求を分散したり、1つのデータソースの接続先DBインスタンスに障 害が発生した場合に、そのデータソースをアプリに利用させないように自動制御が可能。• つまり、Oracle RACのようなDBクラスタ環境での適用を前提としている。 WebLogic アプリケーション WebLogic アプリケーション マルチデータソース データソース データソース1 データソース2 データソース3 Oracle RAC 13 Copyright© 2011, Oracle. All rights reserved.
  14. 14. データソースの構成や監視について• WebLogicのデータソースは、主に管理コンソールやWLSTを用いて管理操作や監視を行う。• 個々のデータソースや関連リソースに対応するMbean(Configuration Mbean)により変更、監視が 可能。• また、WebLogicのデータソースはJSR-77(Java EE Management Model )をサポートしており、実 行時の情報をMbean(Runtime MBean)を用いてモニタリングすることも可能。ツール 作成・削除 変更 監視管理コンソール ○ ○ ○WLST ○ ○ ○JMX APIや任意のJMX MBeanツール ○ ○ 14 Copyright© 2011, Oracle. All rights reserved.
  15. 15. データソースの構成内容について• WebLogicにてデータソースを作成すると、• DOMAIN/config/jdbc配下にデータソース毎の定義ファイル(データソース名-id-jdbc.xml)が生成される。• JDBCデータソースの対象サーバの情報はドメイン構成ファイル(config.xml)で保持される。• データソースを削除すると、上記XMLやconfig.xmlのエントリも削除される。• 対象サーバを指定してデータソースは作成すると、初期化され状態が「Running」になる。• 状態が「Running」になると、対象サーバ上のすべてのアプリケーションから利用可能になる。 WebLogicドメイン dsA-9999-jdbc.xml データソースの定義内容 データソース dsA config.xml 管理対象サーバA 管理対象サーバB データソース dsA Running データソース dsA Running ドメイン構成ファイル。 データソースと対象サーバの アプリ -W アプリ -X アプリ -Y アプリ -Z 関連もここに含まれる。 15 Copyright© 2011, Oracle. All rights reserved.
  16. 16. [参考] 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-sourcehttp://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> 16 Copyright© 2011, Oracle. All rights reserved.
  17. 17. [参考] 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> 17 Copyright© 2011, Oracle. All rights reserved.
  18. 18. ステートメント・キャッシュ• JDBCで、条件値のみ変化する同じSQLを繰り返し実行する場合は、一般的に PreparedStatementを使用する。その場合、DB側の解析処理数が減るため、繰り返し実行す る場合はStatement使用時より性能向上が期待できる。• WebLogicのJDBCデータソースでは、このPrepareStatementやCallableStatementをキャ ッシュする機能を提供• PrepareStatementを多用するアプリケーションではさらに性能向上を期待できる。 Statement stmt = conn.createStatement(); for ( int id = 0 ; id < 10000 ; id++ ) { Statement使用時 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 PreparedStatement ps = conn.prepareStatement(sql);使用時 for ( int id = 0 ; id < 10000 ; id++ ) { ps.setInt(1,id); ResultSet rs = ps.executeQuery(); while ( rs.next() ) { // 表示などの処理 } } Copyright© 2011, Oracle. All rights reserved. 18
  19. 19. WebLogic11gに含まれるJDBCドライバ• WebLogic Server11gでは、標準で下記のJDBCドライバを提供。• ドライバの実体は、WL_HOME/server/libに格納されている。• 下表以外のJDBCドライバを利用する場合は、WebLogicに適用するCLASSPATHの先頭に追加 するドライバのライブラリを追加する。ドライバ ファイル名 備考Oracle Thin Driver 11g ojdbc6.jar TYPE4MySQL5.0 JDBCドライバ mysql-connector-java-commercial-5.0.x-bin.jarWebLogic Type4 JDBCドライバ DB2用:wldb2.jar DataDirectの MS SQL Server用:wlsqlserver.jar OEM供給 Informix用:wlinformix.jar Sybase用:wlsybase.jar 19 Copyright© 2011, Oracle. All rights reserved.
  20. 20. データソース作成時に必要なパラメータ• 下表パラメータは、データベース種類に限らずデータソース定義時の共通項目• 接続プールは、コンソールではデータソース作成後に「接続プール」タブから設定する。 項目( *は必須項目) 概要 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で選択 20 Copyright© 2011, Oracle. All rights reserved.※2 コンソールの場合、自動入力
  21. 21. 接続プールの主要パラメータ• 一般的に、プール中の接続作成、縮退のオーバーヘッドを削減するため、初期容量と最大容量を同 じに設定することがのぞましい。項目 概要 デフォルト値初期容量 接続プール作成時に作成される接続数。 1 接続プールに維持される最小接続数でもある。最大容量 接続プール中に作成可能な最大接続数 15増分容量 接続プール中に新たに接続を増加するときの量 1予約時に接続をテスト アプリケーションが接続要求を行った際に、接続の有効性をテストするか否か。 false (テスト対象の表名の指定が必須)テスト頻度(秒) 接続プール中の未使用接続に対する接続テストの実行間隔。テスト失敗時は 120 その接続を無効化して再度接続を作成 (テスト対象の表名の指定が必須)アイドルプール接続を信頼する秒数 ここで指定した時間内に正常性が確認された接続のテストはスキップする。 10縮小頻度(秒) 接続プール内の接続数を縮小させるまでの間隔 900非アクティブ接続タイムアウト(秒) アプリケーションで使用中の接続が非アクティブの場合、ここで指定した秒数 0(無効) が経過すると接続プールに自動復旧する接続予約のタイムアウト(秒) アプリケーションが接続要求時、接続を得るまで待機できる秒数 10接続作成の再試行間隔(秒) 接続プール中の接続作成が失敗した場合に再作成を試行する間隔 0文タイムアウト JDBCドライバに対して実行中のSQL文をタイムアウトする時間の指定. -1 JDBCドライバのStatement.setQueryTimeoutのメソッド実装に依存 21 Copyright© 2011, Oracle. All rights reserved.
  22. 22. 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 oracle.jdbc.xa.client.OracleXADataSource Instance Connection ドライバ Service Connection RAC Service-Instance Connection Thin oracle.jdbc.OracleDriver Instance Connection ドライバ Service Connection RAC Service-Instance Connection 22 Copyright© 2011, Oracle. All rights reserved.
  23. 23. <Insert Picture Here>WebLogic11gのJDBCデータソースの動作 Copyright© 2011, Oracle. All rights reserved. 23
  24. 24. JDBCデータソースの動作• 下表のデータソースを前提に、WebLogicのJDBCデータソースの動作について次のスライドより説 明する。 データソース 接続プール 項目 設定値 項目 設定値 データソース名 dsA 初期容量 3 JNDI名 jdbc/dsA 最大容量 5 データベース種類 Oracle(10g XE) 増分容量 1 ドライバ種類 Oracle Thin 予約時にテスト False Service-Connection テスト頻度 0 ターゲット Server1 接続予約のタイムアウト 10 (秒) 接続作成の再試行間隔 0 縮小頻度 900 24 Copyright© 2011, Oracle. All rights reserved.
  25. 25. データソース作成• 管理コンソール等で、「ターゲット」となるWebLogicサーバ名を指定した上でデータソースの作成、ア クティブ化を行うと、データソースが初期化され、接続プール中に「初期容量」で指定した数の接続が 作成され、すぐにアプリケーションから利用可能になる。• 「ターゲット」のサーバ指定無しでも作成・アクティブ化だけは可能。• WebLogicサーバの再起動は不要。• データソース作成時には、データベースは利用可能状態である必要がある。 WebLogic管理対象サーバ Server1 データソース dsA 接続プール データソースdsA を作成、アクティブ化 Running 25 Copyright© 2011, Oracle. All rights reserved.
  26. 26. データソース作成時にDBが停止している場合• データベースが利用できない状態で、ターゲット指定付で、データソースを作成、アクティブ化しよう とすると下記のような例外が発生し、アクティブ化できない。(作成/後にターゲット指定してアクティ ブ化しても同様)<2010/01/12 17時24分35秒 JST> <Error> <Deployer> <BEA-149265> <タスクweblogic.deploy.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 stacktraceCaused 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) 26 Copyright© 2011, Oracle. All rights reserved. Truncated. see log file for complete stacktrace>
  27. 27. データソース停止• 管理コンソール等で、データソースに対して停止操作を行うと、「状態」が「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 27 Copyright© 2011, Oracle. All rights reserved.
  28. 28. データソース起動• データソース停止時、起動すると、接続プール中に「初期容量」で指定した数の接続が作成され、す ぐにアプリケーションから利用可能になる。 WebLogic管理対象サーバ Server1 データソース dsA 接続プール データソースdsAを起動 Running 28 Copyright© 2011, Oracle. All rights reserved.
  29. 29. データソース中断• 管理コンソール等で、データソースに対して中断操作を行うと、「状態」が「Suspended」になるが、接 続プールはクリアされず、データベースとの物理接続も維持される。• データソースを中断中にアプリケーションが接続要求を行うと下記例外が発生する。 weblogic.jdbc.extensions.PoolDisabledSQLException: weblogic.common.resourcepool.ResourceDisabledException: Pool dsA is Suspended, cannot allocate resources to applications.. WebLogic管理対象サーバ Server1 データソース dsA 接続プール データソースdsA を中断 Suspened 29 Copyright© 2011, Oracle. All rights reserved.
  30. 30. データソース再開• データソース中断時、再開すると、すぐにアプリケーションから利用可能になる。 WebLogic管理対象サーバ Server1 データソース dsA 接続プール データソースdsAを再開 Running 30 Copyright© 2011, Oracle. All rights reserved.
  31. 31. WebLogic起動時• WebLogic起動時に、データソースが自動的に初期化され、接続プール中に「初期容量」で指定した 数の接続が作成され、アプリケーションから利用可能になる。 WebLogic管理対象サーバ Server1 データソース dsA 接続プール WebLogic Server 起動時に初期化 Running 31 Copyright© 2011, Oracle. All rights reserved.
  32. 32. WebLogic起動時にDBが停止している場合• WebLogic起動時にデータベースが停止している場合、接続プールが 「初期容量」>0 かつ• 「接続作成の再試行間隔」 = 0で設定されているデータソースは初期化に失敗する。• 初期化に失敗後、データベースを起動しても、データソースは利用可能にならない。下記は、その場 合、WebLogicのサーバーログに出力される例外<2010/01/12 16時50分09秒 JST> <Warning> <JDBC> <BEA-001129> <Received exceptionwhile 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 stacktraceCaused 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) 32 Copyright© 2011, Oracle. All rights reserved. Truncated. see log file for complete stacktrace>
  33. 33. データソース初期化に失敗した場合の対処方法• 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() 33 Copyright© 2011, Oracle. All rights reserved.
  34. 34. アプリケーション接続要求時• アプリケーションがデータソースを利用して接続を要求した時、データソースの接続プールに未使用 接続があれば、それを「予約」してアプリケーションが利用する。• アプリケーションは利用後接続をリリースすると、接続プールに接続が戻される。 WebLogic管理対象サーバ Server1 データソース dsA ① getConnection() 接続プール アプリケーション で予約 ② 使用 ③ Connectionの Close()でリリース 34 Copyright© 2011, Oracle. All rights reserved.
  35. 35. 接続要求時に未使用接続が無い場合①• 接続プール中の接続数が最大容量に達していない場合は、プール中に「増分容量」で指定した分、 新たな接続が生成され、アプリケーションはそれを予約、使用することが可能。 WebLogic管理対象サーバ Server1 データソース dsA 接続プール アプリケーション アプリケーション アプリケーション ① getConnection() で予約 アプリケーション ②現在接続数3、最大容量5なので ③ アプリケーションで利用可能 増分容量1なので、接続を1つ追加作成する 35 Copyright© 2011, Oracle. All rights reserved.
  36. 36. 接続要求時に未使用接続が無い場合②• 接続プール中の接続数が最大容量に達している場合は、接続プールに接続が戻るまで「接続予約 のタイムアウト」で指定した秒数分だけ待機する。• 「接続予約のタイムアウト」で待機しても接続を得られなかった場合、下記例外が発生する。• 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 接続プール アプリケーション アプリケーション アプリケーション アプリケーション アプリケーション ②現在使用数5、最大容量5のため、 アプリケーション ① getConnection() で予約 アプリは「接続予約のタイムアウト」まで待機。 タイムアウトになると例外発生 36 Copyright© 2011, Oracle. All rights reserved.
  37. 37. 接続プールの縮小• WebLogicが起動し、接続プールが初期化された後、「縮小頻度」で設定した時間が経過したとき、 接続プールが「初期容量」以上に増加していた場合、接続プール中の未使用の接続数は、「初期容 量」値まで自動的に縮小される。その後も、「縮小頻度」の間隔で縮小処理が行われる。• 使用中の接続は縮小対象にはならないが、それにより「初期容量」まで縮小できない場合は使用後 に即縮小される。(縮小間隔もリセットされる。)• 「初期容量」 =「最大容量」の場合は、当然ながら縮小されない。• 縮小処理は、管理コンソールから手動で行うことも可能。 WebLogic管理対象サーバ Server1初期化 縮小 縮小 データソース dsA 接続プール 縮小頻度 縮小頻度データソース初期化後「縮小頻度」 900秒の間隔で「初期容量」 3まで縮小 37 Copyright© 2011, Oracle. All rights reserved.
  38. 38. データベース再起動時• 今回の前提のように「予約時にテスト」=Falseかつ「テスト頻度」=0が設定されているデータソースで、 接続プールに正常に接続が作成された後、データベースが再起動した場合、接続プール中の全接 続は無効となり、アプリケーションが接続要求を行うと下記例外が発生する(Oracle Database10g の場合)• java.sql.SQLRecoverableException: ソケットから読み込むデータはこれ以上ありません。• この場合、次のスライドの対処を行わない限りアプリケーションはデータソースを利用できない。 WebLogic管理対象サーバ Server1 データソース dsA ③ getConnection() ②DB再起動 接続プール アプリケーション で予約 ④ 使用時に 例外発生 ①接続プールに 正常に接続を作成 停止 起動 38 Copyright© 2011, Oracle. All rights reserved.
  39. 39. データベース再起動時の対処方法• 今回の前提のように「予約時にテスト」=Falseかつ「テスト頻度」=0が設定されているデータソースで、 接続プールに正常に接続が作成された後、データベースが再起動した場合、接続プール中の全接 続は無効となり、アプリケーションはデータソースを利用できなくなる。• この場合は、管理コンソールを利用し、データソースの「停止」、「起動」またはデータソースの「リセッ ト」を行い、接続プールに有効な接続を再作成することで、再度アプリケーションから利用可能となる。 WebLogic管理対象サーバ Server1 データソース dsA ③データソースを 「停止(強制停止)」->「起動」 接続プール ②DB再起動 または「リセット」 することでアプリから 再度利用可能になる ①接続プールに 正常に接続を作成 停止 起動 39 Copyright© 2011, Oracle. All rights reserved.
  40. 40. データベース再起動時の問題の予防策①• データソースの接続プールに接続が作成された後にデータベースが再起動した場合の問題は、 下記パラメータを設定することで予防することができる。• 「予約時にテスト」をTrueにし、「テスト対象の表名」に有効なSQLまたは表名を設定する。• 「予約時にテスト」をTrueにすると、アプリケーションが接続要求時に、接続プールの接続が有効か 実際にSQLを発行してテストを行う。もしSQLが成功しない場合はその接続を破棄し、新たに接続を 作成する。(アプリケーションでは例外が発生せず、正常に接続を取得できる。)• ただし、接続要求都度にSQLを発行するため、理論上、DB側の負荷が幾ばくか高まる WebLogic管理対象サーバ Server1 「予約時にテスト」=trueの場合 データソース dsA ③ getConnection() ②DB再起動 接続プール アプリケーション で予約 ⑤正常に接続を 利用可能 ④「テスト対象の表名」 で指定したSQLを発行し ①接続プールに 接続の有効性をテスト。 停止 起動 正常に接続を作成 無効接続の場合、 その接続を破棄、 再作成する。 40 Copyright© 2011, Oracle. All rights reserved.
  41. 41. [参考] 予約時テストのログ• 「予約時にテスト」をTrueにし、「テスト対象の表名」に有効なSQLまたは表名を設定した場合、アプリ ケーションが接続要求を行った時に接続テストが行われる。• DBの再起動などで接続プールの接続が無効になった状態で、接続テストが行われるとサーバーロ グに下記のようなログが生成される。<2010/01/15 15時32分40秒 JST> <Error> <JDBC> <BEA-001112> <Test "SELECT 1 FROM DUAL" set up for pool "dsA" failed with exception: "java.sql.SQLRecoverableException: ソケットから読み込むデータはこれ以上ありません。".> 41 Copyright© 2011, Oracle. All rights reserved.
  42. 42. データベース再起動時問題の予防策②(推奨)• データベース再起動時には、データソースの接続プールに無効接続が発生するが、無効接続が長期 間接続プールに滞留すると、JDBCサブシステム自体が不安定になり WebLogicプロセスが 「Failed」ステータスに移行する可能性が高い。そのため、データベース再起動時の問題の予防策と しては、「予約時のテスト」 = True のみならず、「テスト頻度」を0以外の値を設定することを推奨する。• 例えば「テスト頻度」を60に設定すると、接続プールの未使用接続を60秒単位でテストを行い、無効 であれば破棄、再作成を行う。 WebLogic管理対象サーバ Server1 「予約時にテスト」=trueの場合 データソース dsA ③ getConnection() ②DB再起動 接続プールアプリケーション で予約⑤正常に接続を 利用可能 ④「テスト対象の表名」 で指定したSQLを発行し接続の有 効性をテスト。 ①接続プールに 無効接続の場合、その接続 正常に接続を作成 停止 起動 を破棄、再作成する。未使用接続 も「テスト頻度」 で指定した間隔でテスト、無効接 続の場合、その接続 を破棄、再作成する。 Copyright© 2011, Oracle. All rights reserved. 42
  43. 43. [参考] アイドルプール接続を信頼する秒数• 「テスト頻度」>0 で設定すると、データベース再起動時の無効接続の破棄に役立つが、正常運用時 は指定した間隔でデータベースに対してSQLを発行し続けるため、データベース側の負荷を増やして しまうことになる。• 「アイドルプール接続を信頼する秒数」を指定すると、最近正常に使用された接続に対して、接続テス トを行わせないことが可能。• 例えば、「アイドルプール接続を信頼する秒数」を30に指定した場合、接続プールに戻されてから30 秒以内に再度予約された接続については、次回の接続テストをスキップさせる。• 「アイドルプール接続を信頼する秒数」の指定値が高いと、接続プール中の接続の信頼性は低下す るが、テスト回避によるオーバーヘッド削減で性能は向上する可能性がある。• 逆に「アイドルプール接続を信頼する秒数」の指定値が低いと、接続プール中の接続の信頼性は向 上するが、テスト頻度が高まり、性能は务化する可能性がある。 43 Copyright© 2011, Oracle. All rights reserved.
  44. 44. <Insert Picture Here>WebLogic11gのJDBCデータソースの監視 Copyright© 2011, Oracle. All rights reserved. 44
  45. 45. JDBCデータソースの監視• WebLogicでは、JDBCデータソースの構成情報や実行時の統計情報を MBeanとして監視可能。• 監視を行うツールとして、管理コンソールやWLST、WLDFコンソール拡張、JMX APIや任意のMBean ブラウザ等を利用可能• 下表は、JDBCデータソース関連の主要なMBean 種類 MBean名 説明 ConfigurationBean JDBCDataSourceBean データソースを表す。下記4つのMBeanの親となる。 JDBCDriverParamsBean データソースのJDBC ドライバ設定を表す。 JDBCConnectionPoolParamsBean データソースの接続プールの設定を表す。 JDBCDataSourceParamsBean データソースの設定を表す。 JDBCXAParamsBean データソースのXAトランザクションの設定を表す。 Runtime Bean JDBCServiceRuntimeMBean JDBC サブシステムを表し、使用可能な 下記2つの MBeanのリストにアクセスするためのメソッドを提供 JDBCDriverRuntimeMBean サーバがメモリにロードした JDBC ドライバを表す。 JDBCDataSourceRuntimeMBean サーバやクラスタにデプロイされた JDBC データ ソ ースを表す。 45 Copyright© 2011, Oracle. All rights reserved.
  46. 46. [参考] 実行時の統計情報の項目①• Rutime Beanによる実行時の統計情報の主要な項目 管理コンソールの監視項目名 JDBCDataSourceRuntimeMBeanの属性名 説明 アクティブな接続の平均数 ActiveConnectionsAverageCount 使用中接続の平均数 現在アクティブな接続の数 ActiveConnectionsCurrentCount 現在使用中の接続数 アクティブな接続の最大数 ActiveConnectionsHighCount 同時に使用された接続の最大数 接続遅延時間(msec) ConnectionDelayTime 物理接続の作成に要した平均時間 接続の総数 ConnectionsTotalCount データ・ソースで作成されたデータベ ース接続の累計数 現在の容量 CurrCapacity 接続プール中の接続数 予約に失敗した要求の数 FailedReserveRequestCount アプリが接続予約に失敗した数 再接続の失敗数 FailuresToReconnectCount データソースが物理接続のリフレッシ ュに失敗した回数 リークした接続数 LeakedConnectionCount アプリがcloseしなかった接続数 使用可能数 NumAvailable 接続プール中の使用可能な接続数 使用不可数 NumUnavailable 接続プール中の未使用の接続数 予約された要求の数 ReserveRequestCount 接続要求の現在の累積数。 46 Copyright© 2011, Oracle. All rights reserved.
  47. 47. [参考] 実行時の統計情報の項目②管理コンソールの監視項目名 JDBCDataSourceRuntimeMBeanの属性名 説明プリペアド・ステートメント・ PrepStmtCacheAccessCount 文キャッシュにアクセスされた累計数キャッシュのアクセス数プリペアド・ステートメント・ PrepStmtCacheAddCount 文キャッシュに追加された文の現在のキャッシュの追加数 累積数プリペアド・ステートメント・ PrepStmtCacheCurrentSize 文キャッシュの現在の数キャッシュの現在サイズプリペアド・ステートメント PrepStmtCacheDeleteCount キャッシュから削除された文の数・キャッシュの削除数プリペアド・ステートメント・ PrepStmtCacheHitCount 文キャッシュが使用された数キャッシュのヒット数プリペアド・ステートメント・ PrepStmtCacheMissCount 文キャッシュが使用されなかった数キャッシュの失敗数最大待機時間(秒) WaitSecondsHighCount 接続待機の最大時間接続待機の現在数 WaitingForConnectionCurrentCount 接続待機している現在の要求数接続待機の失敗総数 WaitingForConnectionFailureTotal 接続待機後、接続予約に失敗した総数接続待機の最大数 WaitingForConnectionHighCount 接続待機した要求の最大数接続待機の成功総数 WaitingForConnectionSuccessTotal 接続待機後、接続を予約できた総数接続待機の総数 WaitingForConnectionTotal 接続待機した要求数の総数 47 Copyright© 2011, Oracle. All rights reserved.
  48. 48. 管理コンソールによる監視例• 接続プールの「最大容量」値が適切かどうかを監視する例• 下記例では、「最大容量」を2、「接続予約のタイムアウト」を10秒に設定 これらを総合すると最大容量が不足しており、最低でも20 (2 + 18)に する必要があると判断できる。 「最大容量」の 「接続予約のタイム 待機の最大数が 予約失敗が 2まで達成する アウト」まで待機している 18発生。 多数発生 ことがある。 リクエストがある。 48 Copyright© 2011, Oracle. All rights reserved.
  49. 49. WLDFコンソール拡張による監視例• 接続プールの状況を自動的にリフレッシュさせつつ、時系列に確認したい場合などはWLDFコンソール 拡張を活用するとよい。 49 Copyright© 2011, Oracle. All rights reserved.
  50. 50. <Insert Picture Here>WebLogic11g JDBCデータソースのデバッグ Copyright© 2011, Oracle. All rights reserved. 50
  51. 51. データソースのデバッグ• WebLogicでは、データソースやその中に含まれる接続プ ールの状況、またはアプリケーションが発行している JDBC APIやSQLの内容などの詳細情報をデバッグ用に 取得・表示する下記の機能を提供している。 • 実行時の統計情報の監視 • 管理コンソールや、任意のJMX MBeanブラウザで参照可能(前 のスライドで説明) • プロファイル機能を利用したWLDF(WebLogic診断フレームワー ク)による監視 • デバッグ・ログの出力 • JRockit Flight Recorderを利用したプロファイリング 51 Copyright© 2011, Oracle. All rights reserved.
  52. 52. 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 JDBC ドライバ レベルでのロギングを有効化する。 ( weblogic.jdbc.driverlogging) (オラクルの場合、デバッグ用JDBCドライバが必要。) デバッグ対象(*上表1~4) WebLogic JDBC Driver JDBCデータソース 52 Copyright© 2011, Oracle. All rights reserved.
  53. 53. 管理コンソールでの指定方法• 「ドメイン構造」で「環境」- 「サーバー」を選択、表からサーバ名を選択後、デバッグタブを選択し• 「weblogic - jdbc 」の階層からスコープを指定して「有効化」ボタンを選択し、アクティブ化。 53 Copyright© 2011, Oracle. All rights reserved.
  54. 54. JavaVMオプションとWLSTでの指定方法 • JavaVMオプションでの指定方法 • -Dweblogic.debug.DebugJDBCSQL=true • -Dweblogic.log.StdoutSeverity="Debug" • WLSTでの指定方法 • 下記例のようなスクリプトを実行する。(下記例中の「Server1 」は 管理対象サーバ名)connect(„weblogic‟ ,‟welcome1‟, „t3://localhost:7001‟)edit()cd(Servers/Server1/ServerDebug/Server1)startEdit()set(DebugJDBCSQL,true)save()activate() 54 Copyright© 2011, Oracle. All rights reserved.
  55. 55. データソースデバッグ・ログの出力例####<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 returnsweblogic.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 returnsweblogic.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> 55 Copyright© 2011, Oracle. All rights reserved.
  56. 56. <Insert Picture Here>WebLogic11g JDBCデータソースにおける Oracle JDBC Driverのデバッグ Copyright© 2011, Oracle. All rights reserved. 56
  57. 57. 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を起動 Oracle Database デバッグ対象 WebLogic Oracle JDBC Driver JDBCデータソース 57 Copyright© 2011, Oracle. All rights reserved.
  58. 58. ① 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.SETLOCALset PRE_CLASSPATH=D:¥oracle¥server1032¥wlserver_10.3¥server¥ext¥jdbc¥oracle¥11g¥ojdbc6_g.jarset DOMAIN_HOME=D:¥Oracle¥server1032¥user_projects¥domains¥domainProdcall "%DOMAIN_HOME%¥bin¥startWebLogic.cmd" %*ENDLOCAL 58 Copyright© 2011, Oracle. All rights reserved.
  59. 59. ② ログ設定ファイルを作成、WebLogicのドメイン・ディレクトリに 格納。• JDBCのデバッグ・ログのプロパティファイルを作成し、WebLogicのドメイン・ディレクトリに格納する。• 下記では、デバッグ・ログをD:¥temp¥jdbc.logとして出力している例• ファイル名は任意でよい。(当資料では、下記例をOracleJDBCLog.propertiesという名で扱う).level=SEVEREhandlers=java.util.logging.FileHandleroracle.jdbc.level=FINEoracle.jdbc.handlers=java.util.logging.FileHandlerjava.util.logging.FileHandler.level=FINEjava.util.logging.FileHandler.pattern = d:¥¥temp¥¥jdbc.logjava.util.logging.FileHandler.count = 1java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 59 Copyright© 2011, Oracle. All rights reserved.
  60. 60. ③ 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.SETLOCALset JAVA_OPTIONS=-Djava.util.logging.config.file=OracleJDBCLog.properties -Doracle.jdbc.Trace=trueset PRE_CLASSPATH=D:¥oracle¥server1032¥wlserver_10.3¥server¥ext¥jdbc¥oracle¥11g¥ojdbc6_g.jarset DOMAIN_HOME=D:¥Oracle¥server1032¥user_projects¥domains¥domainProdcall "%DOMAIN_HOME%¥bin¥startWebLogic.cmd" %*ENDLOCAL 60 Copyright© 2011, Oracle. All rights reserved.
  61. 61. 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 61 Copyright© 2011, Oracle. All rights reserved.
  62. 62. <Insert Picture Here>WebLogic11g JDBCデータソースにおける推奨/注意事 項 Copyright© 2011, Oracle. All rights reserved. 62
  63. 63. JDBCデータソース構成における推奨/注意事項• WebLogic11gのJDBCデータソース構成における下記4 点の推奨、注意事項について次スライドより説明 • 接続プールの容量について • 接続プールのテストについて • ステートメント・キャッシュについて • 他アプリケーション・サーバーからの移行時の注意点について 63 Copyright© 2011, Oracle. All rights reserved.
  64. 64. 1. 接続プールの容量について①• 接続プールの容量における推奨事項。 • 接続プールの「初期容量」や「最大容量」の値は同じにする。 • 接続プールの初期容量と最大容量が異なる場合、同時リクエスト 数によっては接続プール内で新たにDBへの物理接続処理が発 生し得る。また接続プールの縮小処理も発生し得る。このDBへの 物理接続や縮小時の切断処理は決して軽くない。 • そのため運用中に接続プール中の接続が増減しないように初期 容量」や「最大容量」の値は同じにすることを推奨する。 64 Copyright© 2011, Oracle. All rights reserved.
  65. 65. 1. 接続プールの容量について②• 接続プールの容量における推奨事項。 • WebLogicで同時実行される最大スレッド数 <= 接続プールの 「最大容量」にする。 • WebLogic上のアプリケーションはスレッドにて処理されるが、同 時実行スレッド数が多くなると、それに対応できる接続プール中の 接続が無ければ接続予約時でスレッドの待機が発生してしまい、 性能に影響を与えてしまう。(アプリの中でDBアクセスを行わない 処理の比率が高い場合はこの限りでない) • WebLogicで同時実行される最大スレッド数はワークマネジャー機 能でサーバまたはアプリケーション別に指定できる。その際に、最 大スレッド数=特定の接続プールの最大容量として指定すること も可能。 65 Copyright© 2011, Oracle. All rights reserved.
  66. 66. 2. 接続プールのテストについて①• 接続プールのテストにおける推奨事項。 • 接続プールでテスト機能を設定するか否かは、データベース障害 時の対応における要件と、データベース・サーバ側の負荷状況を 鑑みて判断する。 • データベース・サーバ側の負荷(CPU使用率など)が非常に高い 場合、接続プールのテスト機能は極力使用しない方がよい。 • (シングル構成の)データベースが運用中に、障害等で再起動して しまった場合で、その際にWebLogicサーバまたはデータソースの 再起動などの手動操作を行うことが許容されない場合は、「接続 予約時のテスト」をtrueにし、かつ「テスト頻度」も設定し、接続テス トを実施させる。 66 Copyright© 2011, Oracle. All rights reserved.
  67. 67. 2. 接続プールのテストについて②• 接続プールのテストにおける注意事項。 • WebLogicとデータベースの間にFirewall等が設置されている場 合、FireWallが接続プール中の接続とDB間のアイドルな通信を 一定間隔で自動切断させないようにする必要がある。 • FireWallによっては、アイドルとなった通信を自動的に無効化する 機能を提供するが、接続プールは、常時DBとの通信を保持する ため、この影響を受ける可能性がある。 • その場合、FireWall側でその機能を無効化する。できない場合は FireWallがアイドル通信を自動切断するより早い間隔で、接続プ ールの「テスト頻度」を設定する。 67 Copyright© 2011, Oracle. All rights reserved.
  68. 68. 3. ステートメント・キャッシュについて①• ステートメント・キャッシュにおける注意事項。 • 「ステートメント・キャッシュ数」 ×接続プールの「最大容量」×接 続プール数がデータベース側で許容されるオープン・カーソル数 を超えないようにする必要がある。 • ステートメント・キャッシュ機能により、PreparedStatementがキャ ッシュされデータベースのカーソルをオープンしたままの状態で維 持される。(データベース実装に依存) • 「ステートメント・キャッシュ数」は、一つの接続当りのキャッシュ数 になるため最大同時キャッシュ数がデータベースの許容オープン カーソル数を超えないようにする必要がある。 68 Copyright© 2011, Oracle. All rights reserved.
  69. 69. 3. ステートメント・キャッシュについて②• ステートメント・キャッシュにおける注意事項。 • ステートメント・キャッシュが有効な状態では、運用中のデータベ ースの表定義を変更(列追加など)は、基本的に避ける。 • ステートメント・キャッシュが有効な状態(「ステートメント・キャッシ ュ数」が0より大きい場合)で、キャッシュされた PreparedStatementで解析対象のSQL内に含まれるテーブルな どの定義を変更すると、次回キャッシュしたPreparedStatementを 使用時にSQL Exceptionが発生するため。 • その場合、管理コンソールで「文キャッシュのクリア」の操作が必 要。(Oracle Database 10gでは、下記のような例外が発生す る。) java.sql.SQLException: プロトコル違反です。 at oracle.jdbc.driver.SQLStateMapping.newSQLException 69 Copyright© 2011, Oracle. All rights reserved.
  70. 70. <Insert Picture Here>Appendix: 管理コンソールを用いたJDBCデータソースの構成手順 Copyright© 2011, Oracle. All rights reserved. 70
  71. 71. JDBCデータソースの作成①• 管理コンソールにログインして下図の操作を行います。 ①「チェンジ センタ」で「ロックして編集」ボタンを選択 ③「JDBCデータソースの概要」で「新規 作成」ボタンを選択 ②「ドメイン構造」で 「サービス」-「JDBC」-「データソース」を選択 71 Copyright© 2011, Oracle. All rights reserved.
  72. 72. JDBCデータソースの作成②• データソース名やJNDI名などを指定します。 ①「名前」で任意の名前を入力 ②「JNDI名」で任意の値を入力 ③データベースの種類やドライバを選 択して「次へ」ボタンを選択。 当資料では「Oracle」「Oracle Driver (Thin) for Service Connections」を選 択。 72 Copyright© 2011, Oracle. All rights reserved.
  73. 73. JDBCデータソースの作成③• トランザクション・オプションを選択して「次へ」ボタンを選択します。• 当資料ではデフォルトのまま。 73 Copyright© 2011, Oracle. All rights reserved.
  74. 74. JDBCデータソースの作成④• データベースの接続プロパティを設定 DB接続に必要な 情報を入力。 74 Copyright© 2011, Oracle. All rights reserved.
  75. 75. JDBCデータソースの作成⑤• 「構成のテスト」ボタンを選択し、接続テストが正常処理されることを確認したら 「次へ」ボタンを選択します。 75 Copyright© 2011, Oracle. All rights reserved.
  76. 76. JDBCデータソースの作成⑥• 「サーバ」で対象となるサーバを選択して「終了」ボタンを選択しま す。 76 Copyright© 2011, Oracle. All rights reserved.
  77. 77. JDBCデータソースの作成⑦• 「変更のアクティブ化」ボタンを選択して構成内容を確定させます。 ボタン選択後、「すべての変更がアクティブ 化されました。再起動は不要です。 」 のメッセージが表示されることを確認 77 Copyright© 2011, Oracle. All rights reserved.
  78. 78. 接続プールの設定①• 作成したデータソースのリンクを選択します。 78 Copyright© 2011, Oracle. All rights reserved.
  79. 79. 接続プールの設定②• 「接続プール」タブ画面を表示します。 ②「接続プール 」タブを選択 ①「チェンジ センタ」で 「ロックして編集」ボタンを選択 79 Copyright© 2011, Oracle. All rights reserved.
  80. 80. 接続プールの設定③• 「初期容量」と「最大容量」に任意の値に設定して保存ボタンを選択します。 80 Copyright© 2011, Oracle. All rights reserved.
  81. 81. 接続プールの設定④• 「変更のアクティブ化」ボタンを選択して構成内容を確定させます。 ボタン選択後、「すべての変更がアクティブ 化されました。再起動は不要です。 」 のメッセージが表示されることを確認 81 Copyright© 2011, Oracle. All rights reserved.
  82. 82. 接続プールの監視設定①• 作成したデータソースの「監視」画面を表示します。 ①「監視 」タブを選択 ②「統計 」タブを選択 ③「この表のカスタマイズ 」 リンクを選択 82 Copyright© 2011, Oracle. All rights reserved.
  83. 83. 接続プールの監視設定② ①任意の項目を選択。• 監視したい項目を選択します。 当資料では、「現在アクティブな 接続数 」、 「アクティブな接続の最大数」、 「接続遅延時間」、 「最大使用可能数」 ②「適用」ボタンを選択 を追加 83 Copyright© 2011, Oracle. All rights reserved.
  84. 84. 接続プールの監視設定③• 選択した項目が表示されていることを確認します。 84 Copyright© 2011, Oracle. All rights reserved.
  85. 85. [参考] データソース作成後の接続テスト• データソースを作成後に、そのデータソースの接続テスト を行うには「テスト対象のテーブル名」に適切なSQLまた は表名を指定しておく必要があります。 • 「チェンジ センタ」で「ロックして編集」ボタンを選択 • 「ドメイン構造」で「サービス」-「JDBC」-「データソース」を選択 • 「JDBCデータソースの概要」で、テストするデータソー スの名前リンクを選択し「接続プール」タブを選択。 • 画面下部の「詳細」リンクを選択 • 「テスト対象のテーブル名」に適切なテーブル名または SQL文が指定されていることを確認し、「保存」ボタンを 選択後、「変更のアクティブ化」ボタンを選択 • 「モニタ」タブ、「テスト」タブで「サーバ」を指定して 「データソースのテスト」ボタンを選択して結果を確認 85 Copyright© 2011, Oracle. All rights reserved.
  86. 86. オラクルのミドルウェア関連情報 twitter.com/OracleMiddle_jp/最新情報つぶやき中 最新情報OracleMiddle_jp おすすめ情報 セミナ情報 などなど slideshare.net/OracleMiddleJP 製品資料 顧客事例 ホワイトペーパー などなど Copyright© 2011, Oracle. All rights reserved. 86
  87. 87. OTNセミナー オンデマンド コンテンツ ダイセミで実施された技術コンテンツを動画で配信中!! ダイセミのライブ感はそのままに、お好きな時間で受講頂けます。 最新情報つぶやき中 OracleMiddle_jp ・セミナ情報 ・お勧め情報 ・公開予告 など OTN オンデマンド※掲載のコンテンツ内容は予告なく変更になる可能性があります。 期間限定での配信コンテンツも含まれております。お早めにダウンロード頂くことをお勧めいたします。 Copyright© 2011, Oracle. All rights reserved. 87
  88. 88. Oracle エンジニアのための技術情報サイト オラクルエンジニア通信 最新情報つぶやき中 http://blogs.oracle.com/oracle4engineer/ oracletechnetjp• 技術資料 • ダイセミの過去資料や製品ホワイト ペーパー、スキルアップ資料などを 多様な方法で検索できます • キーワード検索、レベル別、カテゴ リ別、製品・機能別• コラム • オラクル製品に関する技術コラムを 毎週お届けします • 決してニッチではなく、誰もが明日 から使える技術の「あ、そうだったん こんな資料が人気です だ!」をお届けします  6か月ぶりに資料ダウンロードランキングの首位が交代! 新王者はOracle Database構築資料でした。  データベースの性能管理手法について、Statspack派も Enterprise Manager派も目からウロコの技術特集公開中 オラクルエンジニア通信 Copyright© 2011, Oracle. All rights reserved. 88
  89. 89. 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コンテンツ オン デマンドか、セミナ実施時間内にダウンロード頂くようお願い致します。 Copyright© 2011, Oracle. All rights reserved. 89
  90. 90. ITプロジェクト全般に渡る無償支援サービス Oracle Direct Conciergeサービス■パフォーマンス診断サービス ■システム構成診断サービス•Webシステム ボトルネック診断サービス NEW •Oracle Database構成相談サービス•データベースパフォーマンス 診断サービス •サーバー統合支援サービス •仮想化アセスメントサービス■移行支援サービス •メインフレーム資産活用相談サービス•SQL Serverからの移行支援サービス •BI EEアセスメントサービス•DB2からの移行支援サービス •簡易業務診断サービス•Sybaseからの移行支援サービス•MySQLからの移行支援サービス ■バージョンアップ支援サービス•Postgre SQLからの移行支援サービス •Oracle Databaseバージョンアップ支援サービス•Accessからの移行支援サービス •Weblogic Serverバージョンアップ支援サービス NEW•Oracle Application ServerからWeblogicへ •Oracle Developer/2000(Froms/Reports)移行支援サービス NEW Webアップグレード相談サービス オラクル社のエンジニアが 直接ご支援します お気軽にご活用ください! オラクル 無償支援 検索 Copyright© 2011, Oracle. All rights reserved. 90
  91. 91. 1日5組限定! 製品無償評価サービス 提供シナリオ一例 ・データベースチューニング ・無停止アップグレード ・アプリケーション性能・負荷検証 ・Webシステム障害解析 インストールすることなく、すぐに体験いただけます • サービスご提供までの流れ 1. お問合せフォームより「製品評価サービス希望」と必要事項を明記し送信下さい 2. 弊社より接続方法手順書およびハンズオン手順書を送付致します 3. 当日は、弊社サーバー環境でインターネット越しに製品を体感頂けます ※サービスご提供には事前予約が必要です Web問い合わせフォーム「ダイデモ」をキーワードに検索することで申し込みホームページにアクセスできます http://www.oracle.com/jp/direct/services/didemo-195748-ja.html Copyright© 2011, Oracle. All rights reserved. 91

×