ユニバーサル接続プール・データ・ソースの使用
ユニバーサル接続プール(UCP)データ・ソースは、Oracle Universal Connection Poolingを使用してOracle Databaseに接続するユーザー用のオプションとして提供されています。UCPは、Oracle WebLogic Server接続プーリングに対する代替接続プーリング・テクノロジを提供します。
- ユニバーサル接続プール・データ・ソースとは
ユニバーサル接続プール・データ・ソースは、UCPを使用してOracle Databaseに接続するユーザー用のオプションとして提供されています。UCPは、Oracle WebLogic Server接続プーリングに対する代替接続プーリング・テクノロジを提供します。 - ユニバーサル接続プール・データ・ソースの構成
WebLogicドメインにユニバーサル接続プール・データ・ソースを構成する場合は、WebLogic Server管理コンソール、WebLogic Scripting Tool (WLST)またはFusion Middleware Controlを使用できます。 - ユニバーサル接続プール・マルチ・テナント共有プールのサポート
この機能を使用するには、UCPデータ・ソースをJVMにロードする前に、ユニバーサル接続プール(UCP) MT共有プールのサポートXML構成ファイルのURIをoracle.UCP.jdbc.xmlConfigFile
システム・プロパティを使用して指定する必要があります。 - ユニバーサル接続プールJDBCリソースのモニタリング
WebLogic Sever管理コンソールまたはJDBCUCPDataSourceRuntimeMBean
やJDBCDataSourceRuntimeMBean
を使用するユニバーサル接続プールJDBCリソースのモニタリングについて学習します。 - Oracle Shardingのサポート
シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。
親トピック: JDBCデータ・ソース・タイプ
ユニバーサル接続プール・データ・ソースとは
ノート:
通常、Oracleデータベースとの接続を確立するために、汎用データ・ソース、マルチ・データ・ソースまたはActive GridLinkデータ・ソースをOracle WebLogic Serverで使用することをお薦めします。UCPデータ・ソースを使用する場合、WebLogic Serverでは次のサポートが提供されます:
-
汎用データ・ソース、マルチ・データ・ソースまたはActive GridLinkデータ・ソースの代替データ・ソースとしての構成。
-
データ・ソースのデプロイおよびアンデプロイ。
-
基本的なモニタリングおよび統計:
-
ConnectionsTotalCount
-
CurrCapacity
-
FailedReserveRequestCount
-
ActiveConnectionsHighCount
-
ActiveConnectionsCurrentCount
-
-
Oracle簡易ドライバ、XAドライバおよびJDBCリプレイ・ドライバ対応ドライバでの動作保証。
UCPデータ・ソースでは、次の機能はサポートされません:
-
WebLogic Serverトランザクション・マネージャ(1フェーズ、LLR、JTS、JDBC TLog、決定子リソースなど)
-
追加のライフサイクル操作(中断、再開、停止、強制停止、開始など)。
-
任意の接続プールの汎用サポート。
-
Oracle WebLogic Serverセキュリティ・オプション。
-
前にリストされているもの以外のJDBCドライバ。
-
JMS、リース、EJBなどのOracle WebLogic Serverデータ操作。
-
UCPデータ・ソースに対するRMIアクセス。
UCPデータ・ソースの実装は、疎結合されており、アプリケーションによる新しいUCP機能の使用をサポートするためにucp.jar
を切り替えることができます。UCPデータ・ソースは、アプリケーション・スコープ環境/アプリケーション・パッケージ化環境またはスタンドアロン・モジュール環境ではサポートされません。
Oracle Universal Connection Poolの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。
親トピック: ユニバーサル接続プール・データ・ソースの使用
ユニバーサル接続プール・データ・ソースの構成
WebLogicドメインにユニバーサル接続プール・データ・ソースを構成する場合は、WebLogic Server管理コンソール、WebLogic Scripting Tool (WLST)またはFusion Middleware Controlを使用できます。
WebLogic Server管理コンソールとWLSTによる方法は、次のトピックを参照してください:
WebLogic Server管理コンソールでのUCPの構成
WebLogic Server管理コンソールでユニバーサル接続プール(UCP)データ・ソースを作成する手順は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのユニバーサル接続プール・データ・ソースの作成を参照してください。この手順には、データ・ソースの構成ウィザードにアクセスする方法も含まれます。
次の各項では、WebLogic Server管理コンソールからデータ・ソースの構成ウィザードを使用して、データ・ソースを作成するために使用する基本ステップの概要について説明します。
JDBCデータ・ソースのプロパティの設定
「JDBCデータ・ソースのプロパティ」セクションには、データ・ソースのアイデンティティとデータベース接続でのデータの処理方法を決定するオプションが含まれます。これらのプロパティを構成するためのガイドラインは、次のとおりです。
-
データ・ソース名 - 「名前」フィールドにUCPデータ・ソースの名前を入力します。JDBCデータ・ソースの名前は、WebLogicドメイン内でデータ・ソースを識別するために使用されます。システム・リソース・データ・ソースの場合、そのリソース以外のすべてのJDBCシステム・リソース(データ・ソースを含む)間で一意の名前にする必要があります。名前の競合を避けるために、データ・ソースの名前は、その他の構成オブジェクト(サーバー、アプリケーション、クラスタ、JMSキュー、JMSトピック、JMSサーバーなど)の名前の間でも一意にする必要があります。
-
スコープ - 使用可能なスコープのリストからデータ・ソースのスコープを選択します。スコープは、「グローバル」(ドメイン・レベル)または既存の「リソース・グループ」や「リソース・グループ・テンプレート」に設定できます。
-
JNDI名 - 「JNDI名」フィールドにUCPデータ・ソースのJNDI名を入力します。単一の名前または複数の名前でJNDIツリーにバインドされるように、データ・ソースを構成します。単一のJDBC接続プールを指す複数のデータ・ソースを含む従来の構成のかわりに、複数JNDI名のデータ・ソースを使用できます。詳細は、『Oracle WebLogic Server JNDIアプリケーションの開発』を参照してください。
-
「データベースのタイプ」および「ドライバ」 - UCPデータ・ソースは、Thin XA、非XAおよびJDBCリプレイ・ドライバという3つのOracleドライバで動作保証されています。メニューから必要なドライバを選択します。
表4-4に、ドライバとJDBC接続ファクトリのサポートされる組合せを示します
表4-4 UCPデータ・ソースでサポートされるドライバと接続ファクトリの組合せ
ドライバ | ファクトリ(ConnectionFactoryClassName) |
---|---|
oracle.ucp.jdbc.PoolDataSourceImpl (デフォルト) |
oracle.ucp.jdbc.PoolDataSourceImpl |
oracle.ucp.jdbc.PoolXADataSourceImpl |
oracle.jdbc.xa.client.OracleXADataSource |
oracle.ucp.jdbc.PoolDataSourceImpl |
oracle.jdbc.replay.OracleDataSourceImpl |
ノート:
現時点では、JDBCリプレイ・ドライバはXAトランザクションをサポートしていません。
表4-4のリストにある非XAドライバを表のXAファクトリと一緒に指定すると、エラーが発生します。表に含まれない値を指定しても、それらは検証されません。
jdbc-driver-params
にdriver-name
が指定されていない場合、デフォルトでoracle.ucp.jdbc.PoolDataSourceImpl
に設定されます。
サポートされるドライバ名を指定したが、ConnectionFactoryClassName
接続プロパティを指定しないと、表4-4の対応するエントリが使用されます。サポートされるドライバ名を指定しない場合、エラーが生成されます。
接続プロパティの設定
接続プロパティは、データ・ソースとDBMSとの間の接続を構成するために使用します。管理コンソールでUCPデータ・ソースの接続プロパティを入力する場合、2つの方法があります。
ウィザードの「接続プロパティ」ページには、UCPドライバに使用できるすべての接続プロパティが表示されるため、適切な値を入力できます。別の方法として、「データベース接続のテスト」ページの「プロパティ」テキスト・ボックスに、propertyName=value
という書式を使用して直接プロパティを入力することで、プロパティを構成できます。「接続プロパティ」ページで入力した値は、「プロパティ」テキスト・ボックスにすでにリストされています。
表4-5では、UCPデータ・ソースで構成できる接続プロパティについて説明します。UCPのプロパティの詳細は、次を参照してください: クラスPoolDataSourceImpl(『Oracle Universal Connection Pool for JDBC Java APIリファレンス』)。属性は、PoolDataSourceImpl
クラスのセッターによって決定されます。set接頭辞なしの属性名を使用してください。名前の大文字と小文字は区別されません。
表4-5 ユニバーサル接続プールのプロパティ
プロパティ | データ型 | 説明 |
---|---|---|
AbandonedConnectionTimeout |
|
中止接続タイムアウトを設定します。 有効値の範囲は、0から |
|
|
接続ファクトリのクラス名を設定します。 |
|
|
接続ファクトリの複数の接続ファクトリ・プロパティを設定します。 |
|
|
接続ファクトリの1つの接続ファクトリ・プロパティを設定します。 |
|
|
接続収集の発生時に収集できる接続の最大数を設定します。 |
|
|
接続プールの接続収集が発生するときに使用可能な接続の数を設定します。 |
|
|
接続ラベリングで接続を高コストとして識別するコスト値を設定します。 |
|
|
接続プール名を設定します。 |
|
|
接続ファクトリの複数の接続プロパティを設定します。 |
|
|
接続ファクトリの1つの接続プロパティを設定します。 |
|
|
使用中の接続をクライアントが解放するまでの待機時間(秒)を設定します。 有効値の範囲は、0から |
|
|
データベース名を設定します。 |
|
|
データ・ソース名を設定します。 |
|
|
データ・ソースの説明を設定します。 |
|
|
このプール対応のデータ・ソースを使用してアクセスされる接続プールの高速接続フェイルオーバー(FCF)を有効化します。有効な値は、trueおよびfalseです。 |
|
|
接続ラベリングの高コストの接続再使用しきい値を設定します。 |
|
|
非アクティブ接続タイムアウトを設定します。 有効値の範囲は、0から |
|
|
初期プール・サイズを設定します。 有効値の範囲は、0から |
|
|
ログイン・タイムアウトを設定します。 |
|
|
接続再使用数プロパティを設定します。 |
|
|
接続再使用時間プロパティを設定します。 |
|
|
プールで使用可能な接続のアイドル・タイムアウトを設定します。 |
|
|
接続の最大数を設定します。 有効値の範囲は、1から |
|
|
接続でプールするかキャッシュできる文の最大数を設定します。 |
|
|
接続の最小数を設定します。 有効値の範囲は、0から |
|
|
データ・ソース・ネットワーク・プロトコルを設定します。 |
|
|
リモートONSサブスクリプションに使用される構成文字列を設定します。 |
|
|
接続を取得するためのパスワードを設定します。 |
|
|
データベース・ポート番号を設定します。 |
|
|
プロパティ・サイクル(秒)を設定します。 |
|
|
データ・ソース・ロール名を設定します。 |
|
|
データベース・サーバー名を設定します。 |
|
|
|
|
|
|
|
|
接続を使用中のままにできる最大時間(秒)を設定します。 |
|
|
データベースへの接続を取得するためにデータ・ソースで使用するURLを設定します。 |
|
|
接続を取得するためのユーザー名を設定します。 |
|
|
流用した接続を最初に検証するかどうかを設定します。有効な値は、 |
ノート:
通常の文字列リテラルに加え、システム・プロパティと暗号化プロパティがサポートされます。Oracle WebLogic Server管理コンソール・オンライン・ヘルプの次のトピックを参照してください。jdbc-driver-params
URLが設定されている場合、URLプロパティは無視されます。encrypted-passwordが設定されている場合、パスワード・プロパティは無視されます。
属性ConnectionFactoryProperty、ConnectionFactoryProperties、ConnectionProperty
およびConnectionFactoryProperties
は、「name1=value1,name2=value2...
」という形式の値を受け入れます。
データベース接続のテスト
「データベース接続のテスト」ページでは、プロパティの自由形式の値を入力し、データ・ソース構成をファイナライズする前に、表名またはSQL文を使用してデータベース接続をテストできます。必要に応じて、Properties属性とSystem Properties属性を使用すると、追加の構成情報をテストできます。
ターゲットの選択
新しいUCPデータ・ソースのデプロイ先として1つ以上のターゲットを選択します。ターゲットを選択していない場合でもデータ・ソースは作成されますが、デプロイされません。そのデータ・ソースは、後でデプロイする必要があります。
親トピック: ユニバーサル接続プール・データ・ソースの構成
WLSTを使用したUCPの構成
他のデータ・ソース・タイプを作成するのと同じ方法で、WebLogic Scripting Tool (WLST)を使用してUCPデータ・ソースを作成できます。ただし、UCPデータ・ソースのほうが属性は少なくなります。
UCPデータ・ソースの構成要素は、次のとおりです。
name
-
datasource-type=UCP
-
jdbc-driver-params url
-
jdbc-driver-params property - user
-
jdbc-driver-params password-encrypted
-
jdbc-data-source-params jndi-name
-
jdbc-driver-params other properties
WebLogic Serverデータ・ソース・ディスクリプタからの他の要素は、認識されません。他の要素を指定しても、無視されます。
例4-2に、UCPデータ・ソースを作成するためのサンプルWLSTスクリプトを示します
例4-2 UCPデータ・ソースを作成するためのサンプルWLSTスクリプト
import sys, socket
import os
hostname = socket.gethostname()
connect("username","password","t3://"+hostname+":7001")
edit()
startEdit()
serverName="AdminServer"
serverBean = getMBean('/Servers/'+serverName)
host='%s.us.example.com' %hostname
print 'Creating UCP datasource'
domain = getMBean("/")
startEdit()
resourceName='ucpDS'
print "Creating datasource ds in domain"
systemResource=domain.createJDBCSystemResource(resourceName)
systemResource.setName(resourceName)
jdbcResource=systemResource.getJDBCResource()
jdbcResource.setName(resourceName)
jdbcResource.setDatasourceType('UCP')
driverParams=jdbcResource.getJDBCDriverParams()
driverParams.setDriverName('oracle.ucp.jdbc.PoolDataSourceImpl')
driverParams.setUrl('jdbc:oracle:thin:@dbhost:1521/otrade')
properties = driverParams.getProperties()
properties.createProperty('user', 'dbuser')
properties.createProperty('ConnectionFactoryClassName', 'oracle.jdbc.pool.OracleDataSource')
driverParams.setPassword('PASSWD')
jdbcDataSourceParams=jdbcResource.getJDBCDataSourceParams()
jdbcDataSourceParams.addJNDIName(resourceName)
jdbcDataSourceParams.setGlobalTransactionsProtocol('None')
cd('/SystemResources/' + resourceName )
set('Targets',jarray.array([ObjectName('com.bea:Name=' + serverName + ',Type=Server')], ObjectName))
save()
activate()
ノート:
このサンプルWLSTスクリプトは、汎用データ・ソースを作成するためにも使用できます。これはUCPデータ・ソースの基礎としてWebLogic Serverに用意されています。:EXAMPLES_HOME\wl_server\examples\src\examples\wlst\online\jdbc_data_source_creation.py
ここでEXAMPLES_HOME
は、WebLogic Serverのコード・サンプルを構成するディレクトリです。WebLogic Scripting Toolの理解のWLSTオンライン・サンプル・スクリプトを参照してください。
親トピック: ユニバーサル接続プール・データ・ソースの構成
ユニバーサル接続プール・マルチテナント共有プールのサポート
この機能を使用するには、UCPデータ・ソースをJVMにロードする前に、ユニバーサル接続プール(UCP) MT共有プールのサポートXML構成ファイルのURIをoracle.UCP.jdbc.xmlConfigFile
システム・プロパティを使用して指定する必要があります。
これは、Weblogic Serverの起動時にコマンドラインに設定できます。これでは不都合な場合もあるため、XmlConfigFile
接続プロパティを設定することもできます。接続プロパティによる方法を使用する場合は、たとえそれがXMLファイルを使用していなくても、WebLogic Serverで構成されているすべてのUCPデータ・ソースに対して設定する必要があります。そのフォーマットは通常、file:///path/file.xml
のようなものです。
-
名前 – データ・ソースの名前
-
データ・ソース・タイプ – UCP
-
ドライバのクラス名 –
oracle.ucp.jdbc.PoolDataSourceImpl
またはoracle.ucp.jdbc.PoolXADataSourceImpl
-
DataSourceFromConfiguration
プロパティ – XMLファイル内のデータ・ソース名 -
XmlConfigFile
プロパティ – システム・プロパティとして設定されていない場合は、オプションでXMLファイルのURIを設定 -
JNDI名 - データ・ソース・オブジェクトがマップされているJNDI名
例:
import sys, socket import os hostname = socket.gethostname() connect("weblogic","server_password","t3://"+hostname+":7001") edit() startEdit() serverName="myserver" print 'Creating UCP datasource' domain = getMBean("/") startEdit() resourceName='ds5' print "Creating datasource ds in domain" systemResource=domain.createJDBCSystemResource(resourceName) systemResource.setName(resourceName) jdbcResource=systemResource.getJDBCResource() jdbcResource.setName(resourceName) jdbcResource.setDatasourceType('UCP') driverParams=jdbcResource.getJDBCDriverParams() driverParams.setDriverName('oracle.ucp.jdbc.PoolDataSourceImpl') properties = driverParams.getProperties() properties.createProperty('DataSourceFromConfiguration', 'pds1') properties.createProperty('XmlConfigFile', 'file:///SharedPoolDemo.xml') jdbcDataSourceParams=jdbcResource.getJDBCDataSourceParams() jdbcDataSourceParams.addJNDIName(resourceName) cd('/SystemResources/' + resourceName ) set('Targets',jarray.array([ObjectName('com.bea:Name=' + serverName + ',Type=Server')], ObjectName)) save() activate()
UCPのXMLファイルは次のようになります:<?xml version="1.0" encoding="UTF-8"?> <ucp-properties> <connection-pool connection-pool-name="pool1" connection-factory-class-name="oracle.jdbc.pool.OracleDataSource" url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=dbhost)(PORT=5521))(CONNECT_DATA= (SERVICE_NAME=dbhostservice)))" user="system" password="manager" initial-pool-size="4" min-pool-size="2" max-pool-size="10" shared="true" > <data-source data-source-name="pds1" user="system" password="manager" service="pdb1_service" description="pdb1 data source" /> <data-source data-source-name="pds2" user="system" password="manager" service="pdb2_service" description="pdb2 data source" /> </connection-pool> </ucp-properties>
親トピック: ユニバーサル接続プール・データ・ソースの使用
ユニバーサル接続プールJDBCリソースのモニタリング
WebLogic Sever管理コンソールまたはJDBCUCPDataSourceRuntimeMBean
やJDBCDataSourceRuntimeMBean
を使用するユニバーサル接続プールJDBCリソースのモニタリングについて学習します。
JDBCUCPDataSourceRuntimeMBean
には、データ・ソースの現在の状態を取得するメソッドと、データ・ソースに関する統計を取得するメソッドが用意されています。取得できる統計には、平均のアクティブな接続数、現在のアクティブな接続数、最大のアクティブな接続数などがあります。このMBeanは、JDBCDataSourceRuntimeMBean
を拡張して、JDBCサービスから他のJDBC MBeanのリストとともにそれを返すことができるようにします。Oracle WebLogic Server MBeanリファレンスのJDBCUCPDataSourceRuntimeMBeanを参照してください。
実行時の統計に加え、テストに成功すると、testPool()
操作はNULLを返しますが、それ以外の場合はエラー文字列を返します(他のデータ・ソース・タイプと同様)。プールのテストが実行されるのは、検証用に実行するSQL文字列(SELECT 1 from DUAL
など)がSQLForValidateConnection
に設定されている場合のみです。操作の残りは、アクションを実行しません。
JDBCのモニタリングの詳細は、「WebLogic JDBCリソースのモニタリング」を参照してください
親トピック: ユニバーサル接続プール・データ・ソースの使用
Oracle Shardingのサポート
シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。
Oracle Shardingは12.2のUCPで使用可能であり、ネイティブのUCPデータ・ソース機能を介してWebLogic Serverによって表に現れます。『Oracle Shardingの使用』のOracle Shardingの概要を参照してください。
JNDI参照を使用してUCPデータ・ソースにアクセスすると、次のJavaコードのようにシャーディングAPIを使用できます:
import javax.naming.Context;
import javax.naming.InitialContext;
import java.sql.Connection;
import oracle.ucp.jdbc.PoolDataSource;
Context cts = new InitialContext();
/// Look up the data source using JNDI
PoolDatasource pds = (PoolDataSource) ctx.lookup("ShardedDB");
// Create a key corresponding to sharding key columns, to access the correct shard
OracleShardingKey key = pds.createShardingKeyBuilder().subkey(100, JDBCType.NUMERIC).build();
// Fetch a connection to the shard corresponding to the key
Connection conn = pds.createconnectionBuilder().shardingKey(key).build();
// Use the above connection for performing shard specific operations
親トピック: ユニバーサル接続プール・データ・ソースの使用