Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
WebLogic Server勉強会@東京LT
Oracle JDBCドライバプロパティの活用
ソフトウェアサービス本部 ミドルウェアサポート部
山田 貴裕
2013/12/19

Copyright (c)2013 ITOCHU Techno...
はじめに

• 発表する内容は個人の見解であり、所属する組織の公式な見解
ではありません。
• 資料の内容は正確を期するよう注意しておりますが、妥当性や
正確性について保証するものではありません。
• 環境
– 基本的にWebLogic Ser...
アジェンダ

• WLSデータソースでのドライバプロパティ設定
• Oracle JDBC Thin Driverで指定したほうがよいプロパティ
• 補足

3

Copyright (c)2013 ITOCHU Techno-Solution...
アジェンダ

• WLSデータソースでのドライバプロパティ設定
• Oracle JDBC Thin Driverで指定したほうがよいプロパティ
• 補足

4

Copyright (c)2013 ITOCHU Techno-Solution...
管理コンソールからのドライバプロパティ設定

[サービス]→[データソース]→<データソース名>→[構成]→[接続プール]

JDBCドライバごとの固有のプロパティを
<キー>=<値> の形式で指定

上記と同様だが、以下の形式で指定
<キー>...
データソース設定ファイルへの反映のされ方

設定ファイル例 – <WLSドメイン>/config/jdbc/<JDBCデータソース名>-jdbc.xml
<?xml version='1.0' encoding='UTF-8'?>
<jdbc-...
内部的に行われる処理イメージ

String url = "設定ファイルのurl";
String password = "設定ファイルのpasswordを復号化した内容";

Properties info = new Properties(...
アジェンダ

• WLSデータソースでのドライバプロパティ設定
• Oracle JDBC Thin Driverで指定したほうがよいプロパティ
• 補足

8

Copyright (c)2013 ITOCHU Techno-Solution...
指定したほうがよいプロパティ(1) - oracle.net.CONNECT_TIMEOUT

• oracle.net.CONNECT_TIMEOUT=<ミリ秒>
– データベース接続時のタイムアウト
例) タイムアウトを10秒に指定
ora...
[参考] JDBCLoginTimeoutSecondsの設定

• WLST (WebLogic Scripting Tool)で変更
– WLST を起動
$ . <WL_HOME>/server/bin/setWLSEnv.sh
$ ja...
指定したほうがよいプロパティ(2) - oracle.jdbc.ReadTimeout

• oracle.jdbc.ReadTimeout=<ミリ秒>
– ソケット読込時のタイムアウト
例) タイムアウトを60秒に指定
oracle.jdbc...
文タイムアウトとoracle.jdbc.ReadTimeoutの関係

• 文タイムアウト
– Oracle JDBC Thin Driverでは、実行中のSQLをキャンセルする
– 前提として、ネットワークとDBが正しく機能していること
[S...
アジェンダ

• WLSデータソースでのドライバプロパティ設定
• Oracle JDBC Thin Driverで指定したほうがよいプロパティ
• 補足

13

Copyright (c)2013 ITOCHU Techno-Solutio...
補足

• oracle.net.CONNECT_TIMEOUTやoracle.jdbc.ReadTimeout
は、WLSのマニュアルにも記載
[Oracle RACでのマルチ・データ・ソースの使用 - 構成の追加考慮]
http://doc...
まとめ

• WLSデータソースでは、ドライバ固有プロパティを設定可能
• Oracle JDBC Thin Driverでは以下のタイムアウトを設定すべし
– oracle.net.CONNECT_TIMEOUT
• データベース接続時のタイ...
Copyright (c)2013 ITOCHU Techno-Solutions Corporation
Upcoming SlideShare
Loading in …5
×

Oracle JDBCドライバプロパティの活用

28,077 views

Published on

2013年12月19日に開催されたWebLogic Server勉強会@東京のLTセッションでCTC (OracleACE) 山田 貴裕氏が使用した「Oracle JDBCドライバプロパティの活用」資料です。

Published in: Technology
  • Be the first to comment

Oracle JDBCドライバプロパティの活用

  1. 1. WebLogic Server勉強会@東京LT Oracle JDBCドライバプロパティの活用 ソフトウェアサービス本部 ミドルウェアサポート部 山田 貴裕 2013/12/19 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  2. 2. はじめに • 発表する内容は個人の見解であり、所属する組織の公式な見解 ではありません。 • 資料の内容は正確を期するよう注意しておりますが、妥当性や 正確性について保証するものではありません。 • 環境 – 基本的にWebLogic Server (WLS) のバージョンには依存しません。 • WLS 9.x ~ WLS 12c – Oracle JDBC Thin Driverのみ • 10g以降のドライバ (11g以降の最新を推奨) • OCI Driverは対象外 2 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  3. 3. アジェンダ • WLSデータソースでのドライバプロパティ設定 • Oracle JDBC Thin Driverで指定したほうがよいプロパティ • 補足 3 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  4. 4. アジェンダ • WLSデータソースでのドライバプロパティ設定 • Oracle JDBC Thin Driverで指定したほうがよいプロパティ • 補足 4 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  5. 5. 管理コンソールからのドライバプロパティ設定 [サービス]→[データソース]→<データソース名>→[構成]→[接続プール] JDBCドライバごとの固有のプロパティを <キー>=<値> の形式で指定 上記と同様だが、以下の形式で指定 <キー>=<システムプロパティ名> ※WLS10.3.4以降で利用可能 例) user=app.db.user ↓ java -Dapp.db.user=user1 ~ weblogic.Server 5 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  6. 6. データソース設定ファイルへの反映のされ方 設定ファイル例 – <WLSドメイン>/config/jdbc/<JDBCデータソース名>-jdbc.xml <?xml version='1.0' encoding='UTF-8'?> <jdbc-data-source xmlns=...> <name>sampleDS</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>user1</value> </property> </properties> <password-encrypted>{AES}…</password-encrypted> </jdbc-driver-params> <jdbc-connection-pool-params> <initial-capacity>5</initial-capacity> <max-capacity>5</max-capacity> <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name> </jdbc-connection-pool-params> <jdbc-data-source-params> <jndi-name>jdbc/sampleDS</jndi-name> <global-transactions-protocol>OnePhaseCommit</global-transactions-protocol> </jdbc-data-source-params> </jdbc-data-source> JDBCドライバに渡される情報 JDBC接続URL JDBCドライバ JDBCドライバプロパティ パスワード(WLS内で暗号化) WLSデータソース・接続プールとしての設定情報 6 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  7. 7. 内部的に行われる処理イメージ String url = "設定ファイルのurl"; String password = "設定ファイルのpasswordを復号化した内容"; Properties info = new Properties(); info.setProperty("password", password); for (DriverProperty property : "設定ファイルのproperties") { info.setProperty(property.getName(), property.getValue()); } Connection conn = DriverManager.getConnection(url, info); 作成されたコネクションは接続プールに格納され、 WLSのデータソース経由で利用可能になる 7 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  8. 8. アジェンダ • WLSデータソースでのドライバプロパティ設定 • Oracle JDBC Thin Driverで指定したほうがよいプロパティ • 補足 8 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  9. 9. 指定したほうがよいプロパティ(1) - oracle.net.CONNECT_TIMEOUT • oracle.net.CONNECT_TIMEOUT=<ミリ秒> – データベース接続時のタイムアウト 例) タイムアウトを10秒に指定 oracle.net.CONNECT_TIMEOUT=10000 – 以下のような状況で有効 • DBリスナーに負荷がかかる場合 例) 接続プールの容量確保により、リスナーに大量の接続要求が一度にかかる • ネットワーク的な問題で接続時に時間がかかる場合 例) WLS起動時にDBサーバーに接続できない 例) Oracle RACでのフェイルオーバー • 代替手段 – java.sql.DriverManager.setLoginTimeoutを利用 – WLSではServerMBeanのJDBCLoginTimeoutSecondsにより設定 [応答しないデータベースによって生じるサーバー起動時のハングの最小化] http://docs.oracle.com/cd/E28613_01/web.1211/b65892/ds_deploy.htm#i1203054 9 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  10. 10. [参考] JDBCLoginTimeoutSecondsの設定 • WLST (WebLogic Scripting Tool)で変更 – WLST を起動 $ . <WL_HOME>/server/bin/setWLSEnv.sh $ java weblogic.WLST – WLST での変更 connect('weblogic', 'welcome1', 't3://localhost:7001') edit() startEdit() cd('/Servers/ManagedServer_1') # サーバーごとに指定 cmo.setJDBCLoginTimeoutSeconds(10) # 単位は秒 save() validate() showChanges() activate() exit() – 設定を有効化するには、WLSを再起動 10 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  11. 11. 指定したほうがよいプロパティ(2) - oracle.jdbc.ReadTimeout • oracle.jdbc.ReadTimeout=<ミリ秒> – ソケット読込時のタイムアウト 例) タイムアウトを60秒に指定 oracle.jdbc.ReadTimeout=60000 – 以下のような状況で有効 • DBからの応答が極端に遅延する場合 例) DBがハングアップ 例) SQL実行が遅すぎたり、ロック待ちになってしまう (注意点あり) • 代替手段? – [接続プール]→[詳細]→[文タイムアウト] – java.sql.Statement#setQueryTimeoutを呼び出し • 単位は秒 11 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  12. 12. 文タイムアウトとoracle.jdbc.ReadTimeoutの関係 • 文タイムアウト – Oracle JDBC Thin Driverでは、実行中のSQLをキャンセルする – 前提として、ネットワークとDBが正しく機能していること [Statement.cancelの使用] http://docs.oracle.com/cd/E16338_01/java.112/b56281/apxtblsh.htm#BACDAICJ • oracle.jdbc.ReadTimeout – 読込待ちのソケットを切断するだけなので、SQLはキャンセルされない – Oracle DB側でEXPIRE_TIMEも指定するとよい • 文タイムアウトを基本的には利用し、oracle.jdbc.ReadTimeoutを 保険として併用するとベター – 文タイムアウト(単位:秒) < oracle.jdbc.ReadTimeout(単位:ミリ秒) 12 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  13. 13. アジェンダ • WLSデータソースでのドライバプロパティ設定 • Oracle JDBC Thin Driverで指定したほうがよいプロパティ • 補足 13 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  14. 14. 補足 • oracle.net.CONNECT_TIMEOUTやoracle.jdbc.ReadTimeout は、WLSのマニュアルにも記載 [Oracle RACでのマルチ・データ・ソースの使用 - 構成の追加考慮] http://docs.oracle.com/cd/E28613_01/web.1211/b65892/generic_oracle _rac.htm#BHCFCEAC – RAC環境以外でも有用 • 11g以降のドライバではシステムプロパティでも指定可能 例) -Doracle.net.CONNECT_TIMEOUT=10000 -Doracle.jdbc.ReadTimeout=60000 • 他に指定できそうなプロパティ – JDBCドライバのJavadocを参照 OracleConnectionのField Summary「CONNECTION_PROPERTY_THIN_*」 http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleCon nection.html#field_summary 14 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  15. 15. まとめ • WLSデータソースでは、ドライバ固有プロパティを設定可能 • Oracle JDBC Thin Driverでは以下のタイムアウトを設定すべし – oracle.net.CONNECT_TIMEOUT • データベース接続時のタイムアウト – oracle.jdbc.ReadTimeout • ソケット読込時のタイムアウト 設定例 15 Copyright (c)2013 ITOCHU Techno-Solutions Corporation
  16. 16. Copyright (c)2013 ITOCHU Techno-Solutions Corporation

×