oracle weblogic server + oracle database 連携の基礎から応用
TRANSCRIPT
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Oracle WebLogic Server + Oracle Database 連携の基礎から応用 第55回 WebLogic Server 勉強会
日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔 2015年10月22日
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
Oracleは、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
2
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
お話すること
1. データソースの作成
2. データソースの設定
3. データソースの監視
4. Active GridLink for RAC
3
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの作成
4
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースとは?
•アプリケーションに対して論理名(JNDI名)を使ってデータベース接続(Connectionオブジェクト)を提供するファクトリ・オブジェクト
• WebLogic Serverのデータソースは接続プールから接続を取得する
–データソースはサーバー起動時、またはデプロイ時に作成される
–接続プール • データベース接続を効率よく使用するためにグループ化して管理する仕組み
5
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Java EE アプリケーションのデータベースアクセス データソースを使用してデータベース接続を取得
6
WebLogic Server
@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "WebLogic"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理 }
Dat
aSo
urc
e
JNDIツリー
デプロイ時にバインド
接続・SQL 実行
JDB
C
JNDI ルックアップ
データベース
DB 接続オブジェクトを効率利用するために接続プールを使用
アプリケーションは接続オブジェクトをデータ・ソースを介して取得
切断時は接続プールに接続オブジェクトを返却
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
WebLogic Server WebAppA
データソースの作成方法
7
スコープ 作成方法 更新 モジュール追加/削除 監視
アプリケーション IDE, XMLエディタ デロイメントプラン × ◯
システム 管理コンソール, WLST JMX ○ ◯
WebAppC DataSourceA
データベース
DataSourceB
WebAppB
アプリケーション・スコープのデータソースは、アプリケーションの一部としてデプロイされる。モジュールの定義は、デプロイメント記述子( XML ファイル )で行う。 他のアプリケーションからも参照可能
システム・スコープのデータソースは、システム・リソースとしてデプロイされ、 サーバー上のすべてのアプリケーションから利用できる。モジュールの定義は、管理コンソールやWLST で行う。
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
•データソースの種類を確認 • DB 接続のための情報確認
8
データソースを作成する前に
種類 説明
汎用データソース クラスタ化されていない単一のデータベースへの接続に使用
マルチ・データソース
複数の(汎用)データソースをグループ化し、データソース間での負荷分散やフェイルオーバ機能を提供する ⇒ クラスタ化されたデータベース(Oracle RAC など)への接続に使用
GridLink データソース Oracle RAC の機能をフル活用するために構成するデータソース
確認項目
DB 接続 • ホスト名 / ポート番号 • ユーザ名 / パスワード • 最大接続数
JDBC ドライバ • JDBCドライバクラス名 • JDBC URL 書式
WebLogic Server に同梱されていない JDBCドライバを使用する場合は 事前に入手+起動 CLASSPATH に追加する
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 9
データソースの作成 (1) データ・ソースを作成するには、チェンジ・センターで [ロックして編集] を選択 通常のデータ・ソースを作成する場合は、 [新規] – [汎用データ・ソース] を選択する
JNDI 名は、アプリケーションがデータ・ソースのルックアップに使用する名前を指定 JPA の場合は、persistence.xml で指定する <jta-data-souce> 要素の値
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 10
データソースの作成 (2)
非XA ドライバ (Type 4) を選択した場合は、 トランザクション・オプションを設定
「グローバル・トランザクションのサポート」は、原則として有効化
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 11
データソースの作成 (3)
データソースの設定ファイル ($DOMAIN/config/jdbc/xxxxx-jdbc.xml) ではパスワードが暗号化される
TIPS: テスト表の設定
Oracle Database を使用する場合は、 SQL ISVALID を使用可能 (12.1.3 〜)
データベース接続可能な場合は、 [接続のテスト] を実行可能
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
12
データソースの作成 (4)
デプロイ対象は任意のサーバー(複数サーバーも可)、クラスタを指定可能 TIPS: データソースの対象を複数サーバーにする場合 データベースへの接続数 = データソースの設定(容量) x 対象数
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの設定
13
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 14
データソースの設定 TIPS: 容量設定などはデフォルト値のままでは 運用環境に適さないケースがほとんどのため、 設定を見直すことを推奨 (とくに容量設定)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "WebLogic"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理 }
@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "WebLogic"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理 }
@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "WebLogic"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理 }
データソースの設定 容量とアクティブな接続
•容量 … 接続プール(WLS)とデータベースとの間の接続
•アクティブな接続 … アプリケーションが使用している接続
15
@Resource(name = "jdbc/test") DataSource ds; try (Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement(QUERY)) { pstmt.setString(1, "WebLogic"); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // .... } } catch (SQLException e) { // 例外処理 }
DataSource
データベース
容量 アクティブな接続
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの設定 容量 = 接続プールの接続オブジェクトの数
16
•初期容量 … 接続プール作成時の物理接続数 初期容量分作成できないとデプロイ失敗
•最大容量 … 接続プールの最大物理接続数 •最小容量 … 縮小時の最小物理接続数 (WLS12c〜)
* 下位互換のため初期容量は最小容量が構成されていない場合に使用される。また、増加容量は常に1になる
* 原則として『初期容量=最大容量』と考えて良いが、容量設定が大きい場合は、初期容量 < 最大容量とすることもあり。この場合、縮小も考慮に入れるので必要に応じて最小容量も設定
•縮小頻度 … 増加した容量を最小容量まで縮小するまでの秒数。 0で無効化
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの設定 接続テスト
17
•テスト頻度 … 未使用の接続がテストされる頻度(秒)。テストに失敗した接続は再作成される
•予約時に接続をテスト … クライアントが接続を予約する(DataSource#getConnection)前にテストを行う正常な接続を返すことを保証できるがリクエスト毎にテストのオーバーヘッドが発生する * テスト設定時はテスト対象の表名を必ず指定する
•テスト対象の表名 … 接続テストに使用する表名。接頭辞に「SQL」を指定すると任意のSQL文を指定可能
•アイドル・プール接続を信頼する秒数 … 接続の予約時または未使用の接続テスト時に、接続が有効であると信頼しテストをスキップできる秒数 接続テストによるオーバーヘッドの低減のための設定
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの設定 接続テスト失敗時の制御 (12.1.2 〜)
18
•無効化されるまでリフレッシュに失敗した接続の数 …使用不能な接続の置換の連続失敗数が設定した値に達した場合に、データソースの「状態」を Suspended にして無効化する。無効化されたデータソースでは、定期的にリフレッシュ・プロセスが実行され、データベース回復後に接続を再作成してデータソースが有効化される
= DB接続切断時の接続リクエストの遅延を最小化する設定
•フラッシュされるまでのテストの失敗数 … 接続テストの連続失敗数が設定した値に達した場合に、接続プールのすべての接続を閉じて、後続の接続リクエストに対して新しい接続を返す
= DB接続切断時の接続テストの遅延を最小化する設定
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの設定 接続予約の待機
•接続予約を待機するリクエストの制御 … データソースの容量を上回る接続リクエストがあった場合に、実行スレッドが長時間ブロックされる状況を回避
–接続予約のタイムアウト … 接続予約時に利用できる接続がない場合の待機 秒数 (タイムアウトした予約要求にはPoolLimitSQLExceptionを返す)
• 待機なし … -1, タイムアウトなし … 0, デフォルト値 … 10
–接続の最大待機数 … 接続予約を待機できる最大数 • 待機なし … 0, デフォルト値 … MAX_INT (事実上無制限)
19
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
データソースの監視
20
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 21
データソースの監視
必要な属性を選択して表を カスタマイズする • 「現在○○数」… モニタ時点のスナップショット
• 「最大○○数」… 最大負荷情報
• データソースの[監視]タブの表に行が表示されていればデータソースはデプロイ済み
• デプロイされたコンポーネントからアクセスできるかどうかは各サーバの JNDI ツリーも確認
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
監視対象のデータソースの属性
22
名前 MBean属性名 説明
現在の容量 現在の最大容量
CurrCapacity CurrCapacityHighCount
データソースの接続プールにある 現在の接続オブジェクトの数
現在アクティブな接続の数 アクティブな接続の最大数
ActiveConnectionsCurrentCount ActiveConnectionsHighCount
アプリケーションが使用中の接続の数
接続待機の現在数 最大待機時間 接続待機の失敗総数
WaitingForConnectionCurrentCount WaitSecondsHighCount WaitingForConnectionFailureTotal
接続待機中の接続リクエスト数(待ちスレッド数)
失敗総数は接続を取得できなかった数
状態 State
データソースの状態 •Running - 通常の状態。データソースは有効 •Suspend - データソースが無効化されている •Shutdown - データソースが停止されている •Overloaded - プール内のすべてのリソースが使用中 •Unknown - 状態が不明
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
1. import traceback
2. import datetime
3.
4. # プロパティ
5. pHostName='localhost'
6. pPortNumber='7001'
7. pServerName='Server1'
8. pDataSourceName='xeDataSource'
9. pAdminUserName='weblogic'
10. pAdminUserPasswd='welcome1'
11. pFilePath='/u01/work/domains/domain1/Server1_DSLog.txt'
12. pBeanLoc=pServerName + '/JDBCServiceRuntime/' + pServerName + '/JDBCDataSourceRuntimeMBeans/' + pDataSourceName
13. # JDBCDataSourceRuntimeMBean の情報を返す関数
14. def getConnectionPoolInfo(JDBCDataSourceRuntime):
15. # 現在アクティブな接続数
16. oActiveConnectionsCurrentCount = JDBCDataSourceRuntime.getActiveConnectionsCurrentCount()
17. # 現在の容量を取得
18. oCurrCapacity = JDBCDataSourceRuntime.getCurrCapacity()
19. # 接続待機の現在数を取得
20. oWaitingForConnectionCurrentCount = JDBCDataSourceRuntime.getWaitingForConnectionCurrentCount()
21. head = "----------[" + datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') + "]----------"
22. sActiveConnectionsCurrentCount = "現在アクティブな接続数 : " + str(oActiveConnectionsCurrentCount)
23. sReserveRequestCount = "現在の容量 : " + str(oCurrCapacity)
24. sNumAvailable = "接続待機の現在数 : " + str(oWaitingForConnectionCurrentCount)
25. # 取得した情報を返す
26. return [head,sActiveConnectionsCurrentCount,sReserveRequestCount,sNumAvailable]
23
WLST スクリプトによるデータソースの監視 (1)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
27. # ファイル出力用関数
28. def outputFile(oList):
29. # 追記モード
30. f = open(pFilePath, 'a')
31. # ファイル出力
32. for i in range(0,len(oJDBCDataSourceRuntimeInf)):
33. f.write(oList[i] + "¥n")
34. f.close()
35.
36. # サーバーに接続
37. connect(pAdminUserName,pAdminUserPasswd,'t3://' + pHostName + ':' + pPortNumber)
38. # domainRuntimeMbean に接続
39. domainRuntime()
40. cd ('ServerRuntimes')
41. # JDBCDataSourceRuntimeMBean を取得
42. oJDBCDataSourceRuntimeMBean = getMBean(pBeanLoc)
43. while(true):
44. try:
45. # JDBCDataSourceRuntimeMBean 取得
46. oJDBCDataSourceRuntimeInf = getConnectionPoolInfo(oJDBCDataSourceRuntimeMBean)
47. # JDBCDataSourceRuntimeMBean を Stdout 出力
48. for i in range(0,len(oJDBCDataSourceRuntimeInf)):
49. print oJDBCDataSourceRuntimeInf[i]
50. # JDBCDataSourceRuntimeMBean をファイル出力
51. outputFile(oJDBCDataSourceRuntimeInf)
52. # 10秒待機
53. Thread.sleep(10000)
54. except:
55. print "<<<error>>>"
56. traceback.print_exc()
57. break
24
WLST スクリプトによるデータソースの監視 (2)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
25
WLST スクリプトによるデータソースの監視 (3)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 26
データソースのプロファイル情報
データソースではデータソースやステートメントの使用状況をプロファイルとして収集可能 • データソースの名前(PoolName) • 接続ID, スレッドID etc (ID) • スレッドのスタックトレース(User) • タイムスタンプ(Timestanp) など
プロファイル情報はデータソース・ログファイルに出力される (デフォルトは$DOMAIN/servers/<server>/logs/datasource.log)
• サーバーログやHTTPログ同様にログファイル名やローテーション設定が可能 ([サーバー]-[ロギング]-[データソース])
• 管理コンソールの[診断]-[ログファイル]-[DataSourceLog]からも参照可能
TIPS: 管理コンソールのログ出力はWLDF問い合わせ式でフィルタリング可能 (例: PROFILETYPE LIKE '%RESV.FAIL%')
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Active GridLink for RAC
27
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
GridLink データソース Active GridLink for RAC
•構成容易性の向上
– Single Client Access Name(SCAN) 対応
•可用性の向上
– RACからの通知による高速接続フェールオーバー(FCF)
•性能の向上
– RACの負荷状況を考慮した実行時接続ロードバランシング(RLCB)
– XAトランザクション・アフィニティ
– Webセッション・アフィニティ(WLS12.1.1〜)
28
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
GridLink データソースの機能
WebLogic Server
GridLink データソース
80% 20% Oracle RAC
ONS Client
ON
S Daem
on
ON
S D
aem
on
• 実行時接続ロードバランシング(RCLB)
• アフィニティ (XAトランザクション/ Webセッション)
WebLogic Server
GridLink データソース
Oracle RAC
ONS Client
ON
S Daem
on
ON
S D
aem
on
XA / Session
• 高速接続フェイルオーバー(FCF)
WebLogic Server
GridLink データソース
Oracle RAC
ONS Client
ON
S Daem
on
ON
S D
aem
on
29
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
オラクルユニバーシティからのお知らせ
30
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
オラクルユニバーシティからのお知らせ
• WebLogic Serverの管理方法やトラブルシューティング・パフォーマンスチューニングの手法を体系的に学習したい方に最適な研修コースをご提供しています。
– Classroomトレーニングだけでなく、Live Virtual Classや『Oracle トレーニング・オンデマンド』など多様な受講形態から選択いただけます。
31
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
コース内容
■Oracle WebLogic Server概要
■ドメインの作成
■Administration Console
■ドメインのモニタリング ■アプリケーションのデプロイメント
■WebLogic Server セキュリティ ■ドメインのバックアップおよびリカバリ
■WebLogic Serverのインストールおよびパッチ適用
■サーバーの起動および停止
■JDBCデータソースの構成
■ノードマネージャ ■WebLogic Serverクラスタリング
■トランザクション・サービスのコンフィグレーション
受講前提条件 ・Linux の基本的な操作方法の理解 ・Java EE の基礎知識(サーブレットや JSP など) ※推奨
対象者 ・Oracle WebLogic Server 管理者
・Javaアプリケーション開発者
・アーキテクト
コース日程 5日間 日程の詳細は Oracle University Webサイト にてご確認ください。
受講料 定価¥374,850(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。
Oracle WebLogic Server 12c の運用管理スキルをしっかり習得 待望のWebLogic Server 12c(12.1.2)対応研修は絶賛提供中です。
このコースでは、アプリケーション・サーバー管理者がOracle WebLogic Server 12cのインストールおよび設定方法を習得することができま
す。管理コンソールやコマンドラインツール(WLST)などを使用してドメインを構成する方法やJava EEアプリケーションをサーバーにデ
プロイする方法についても説明します。さらに、Oracle WebLogic Server のプロキシとしてOracle HTTP Serverを設定し、WebLogic Serverク
ラスタによるアプリケーションのフェイルオーバーとロードバランシングをサポートする方法など、環境構築に必要なスキルとWebLogic
Serverのモニタリングやログ情報の収集など運用に必要なスキルを実機演習を通して習得できます。さらに、Oracle WebLogic Server 12cで
強化されたActive GridLink for RACの構成方法やWebLogic Server 12.1.2の新機能である動的クラスタなど注目の新機能もカバーします。
Oracle WebLogic Server 12c: 管理 I ミドルウェア
開催日程 ■ 2015年 3月 12日 (月) 〜 21日 (金)
32
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
コース内容
■トラブルシューティング: 概要
■WebLogic Server 診断フレームワーク: 概要
■診断インストゥルメンテーション
■JVM のトラブルシューティング
■サーバーのトラブルシューティング
■アプリケーションのトラブルシューティング
■JDBC のトラブルシューティング
■ノード・マネージャのトラブルシューティング
■クラスタのトラブルシューティング
■セキュリティのトラブルシューティング
受講前提条件 ・Oracle WebLogic Server 管理 I 受講相当の知識 ・Linux の基本的な操作方法の理解
対象者 ・Oracle WebLogic Server 管理者
・サポートエンジニア
・アーキテクト
コース日程 2日間 日程の詳細は Oracle University Webサイト にてご確認ください。
受講料 定価¥152,224(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。
アプリケーション・サーバー運用時に発生する トラブルのパターンと対処方法を知る
このコースでは、JVM、WebLogic Server、Java EE アプリケーションのデプロイメント、データソース、ノード・マネージャ、クラスタ
およびセキュリティなどWebLogic Serverの運用に不可欠な各機能について、よく発生する問題のトラブルシューティング手法について
説明します。WebLogic Server管理コンソール、モニタリング・ダッシュボード、WebLogic診断フレームワーク、およびJava Flight
Recorderなど、トラブルシューティングを支援する各種ツールを活用した問題の切り分けやデバッグ方法、およびその対処方法について
実践的な演習を通して学習することができます。
Oracle WebLogic Server 12c: トラブルシューティング ミドルウェア
開催日程 ■ 2015年 3月 9日 (月) 〜 13日 (金)
33
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 34
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 35