プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理
12c (12.2.1.3.0)
E90329-05
目次へ移動
目次

前
次

10 共有プールのデータ・ソースの使用

共有プールにより、複数のデータ・ソース定義で基になる接続プールを共有する機能が提供されます。この機能により、データ・ソースがアプリケーションによって頻繁には使用されない場合、または長時間実行のトランザクション処理に関係していない場合に、接続の使用率と密度が向上します。Oracle Container Database (CDB)環境に接続するように構成すると、共有プールで複数のプラガブル・データベース(PDB)サービスへの接続を簡単に管理できます。

この章では、共有プールを構成および使用する方法について説明します。この章の内容は以下のとおりです。

共有プールの仕組み

アプリケーション・コンポーネントがデータ・ソースから接続をリクエストすると、共有プールはデータ・ソースのデータベース名とサービスに一致する接続の検索を試みます。既存の接続が見つかった場合は、それがアプリケーションに返されます。そうでない場合は、別のデータベースに関連付けられている使用可能な接続が予約され、リクエスト中のデータ・ソースのために利用されます。

ノート:

共有プールに使用可能な接続がなく、容量が許す場合は、共通サービス用の新しい接続が作成され、接続をリクエストしている共有データ・ソース用に利用されます。

共有プールのデータ・ソースを使用する場合の要件および考慮事項

共有プールを使用するための要件を学習し、理解します。

  • 共有プール機能を使用するには、Oracle 12.2データベースおよび12.2 JDBC/UCP/ONSのクライアント・ライブラリが必要です。

  • 特定の共有プールのJNDI名を指定するすべての共有データ・ソース定義には、共有プールのデータ・ソース定義と互換性のある構成属性が必要です。

  • 一意のPDBサービスを定義する各共有データ・ソースに対して、個別のONSサブスクリプションを管理する必要があります。

  • 共有プール機能は、汎用およびActive GridLinkタイプのデータ・ソースをサポートします。

    ノート:

    汎用の共有データ・ソースは、MDS構成内のメンバーのデータ・ソースとして使用することはできず、実行時に例外が発生し、MDSのデプロイメントが失敗する可能性があります。
  • 共有接続プールは、PDB名、サービス名、およびRACインスタンス名(AGL)に基づく接続の照合をサポートします

  • 共有プールでは、スレッドに固定の最適化、アプリケーション起動のPDB切替え、およびIDベースのプールとBI偽装IDのオプションはサポートされません。

共有プールの構成

WebLogic Server固有のドライバ・プロパティを設定し、データベース・プロパティを構成することで、共有プールを構成できます。

共有プール用のWebLogic Server固有のドライバ・プロパティの構成

ご使用の環境で共有プールを構成するには、データ・ソースに次のプロパティを設定する必要があります。

共有プール定義の設定

  • 共有プール属性weblogic.jdbc.sharedPool=trueを設定します。

    ノート:

    この属性は、そのデータ・ソース定義が共有接続プールを表すかどうかを示します。この属性をfalse(デフォルト)に設定すると、そのデータ・ソースを共有プールとして参照するデータ・ソースはデプロイメントで例外が発生します。

共有データ・ソース定義の設定

  • 共有プールのJNDI名weblogic.jdbc.sharedPoolJNDIName=<jndiname>を設定します

    ノート:

    JNDI名でバインドされたデータ・ソースが共有プールとして構成されていない場合、デプロイメントで例外が発生します。
  • 共有データ・ソースに関連付けられているPDBの名前weblogic.jdbc.pdbName=<pdb>を設定します。

    ノート:

    共有データ・ソースでPDB名のプロパティを指定していない場合、getConnection()呼出しはルート・コンテナに関連付けられたJDBC接続、または共有プール構成のデフォルト・サービスを返します。
  • PDBサービス名を設定して、特定のPDBに対して接続が再設定されたときに、JDBC接続に設定されるサービスの名前を指定できます。

    weblogic.jdbc.pdbServiceName=<service>

    ノート:

    PDBサービス名の属性はオプションです。共有データ・ソース構成で指定されていない場合、接続は共有プールのデータ・ソースのデフォルト・サービスに関連付けられます。
  • Proxy Userプロパティを設定して、共有データ・ソースの接続を再利用するときに、JDBC接続に設定されるプロキシ・ユーザーの名前とパスワードを指定できます。

    weblogic.jdbc.pdbProxy.<proxy-user>=<proxy-password>

    ノート:

    プロキシ・ユーザーは、接続がPDB/サービスに切り替えられた場合にのみ設定されます。プロキシ・ユーザーの属性とロール名の属性の両方が指定されている場合、プロキシ・ユーザーが優先され、そのロールはデータベース・セッションには設定されません。
  • Roleプロパティを設定して、共有データ・ソース用に再利用されるときに、JDBC接続にパスワード保護されたロールを設定するように指定することもできます。共有データ・ソース用のパスワード保護されたロールは、いくつでも構成できます。

    weblogic.jdbc.pdbRole.<role-name>=<role-password>

    ノート:

    Proxy User属性も設定されている場合は、それが優先され、ロールは設定されません。

ノート:

プロキシ認証またはパスワード保護されたロールを設定して、共有データ・ソースを保護できます。任意の共有プールに対して、これらのオプションのうちの1つのみを使用できます。

共有プール用のデータベース構成

共有プールをサポートするようにOracleデータベースを構成するには、共有プールのデータ・ソース構成属性で共通データベースのユーザーを指定する必要があります。この共通ユーザーは、共有データ・ソースに接続されているすべてのPDBに存在する必要があります。

この共通ユーザーには、次の権限が必要です。

  • grant execute on dbms_service_prvt to c##user;

  • grant set container to c##user;

共有プールのデータ・ソース構成では、CDBの共通サービスを含むURLを指定する必要があります。

パスワードで保護されたロールは、共有データ・ソースによって接続される各PD​​Bで構成されている共通ユーザーに対して定義する必要があります

共有プールの構成用のWLSTスクリプトの例

import os
def createJDBCSystemResource(owner, resourceName, driver, url, user, password):
  systemResource=owner.createJDBCSystemResource(resourceName)
  systemResource.setName(resourceName)
  jdbcResource=systemResource.getJDBCResource()
  jdbcResource.setName(resourceName)
  driverParams=jdbcResource.getJDBCDriverParams()
  if driver:
    driverParams.setDriverName(driver)
  if url:
    driverParams.setUrl(dburl)
  properties = driverParams.getProperties()
  if user:
    properties.createProperty('user', user)
  if password:
    driverParams.setPassword(dbpassword)
  return systemResource
def createSharedPoolDS(owner, resourceName, driver, url, user, password):
   systemResource = createJDBCSystemResource(owner, resourceName, driver, url, user, password)
   systemResource.getJDBCResource().getJDBCDriverParams().getProperties().createProperty('weblogic.jdbc.sharedPool', 'true')
   return systemResource
def createSharingDS(owner, resourceName, sharedPoolJNDIName, pdbName, pdbServiceName, roleName, rolePassword):
  systemResource = createJDBCSystemResource(owner, resourceName, driver=None, url=None, user=None, password=None)
  properties=systemResource.getJDBCResource().getJDBCDriverParams().getProperties()
  properties.createProperty('weblogic.jdbc.sharedPoolJNDIName', sharedPoolJNDIName)
  if pdbName:
    properties.createProperty("weblogic.jdbc.pdbName", pdbName)
  if pdbServiceName:
    properties.createProperty("weblogic.jdbc.pdbServiceName", pdbServiceName)
  if roleName:
    roleprop=properties.createProperty("weblogic.jdbc.pdbRole."+roleName)
  if rolePassword:
     roleprop.setEncryptedValue(rolePassword)
  return systemResource
servername='myserver'
sharedpoolname='sharedpool'
sharingds1name='sharingds1'
sharingds2name='sharingds2'
driver='oracle.jdbc.OracleDriver'
dburl='jdbc:oracle:thin:@host:1521/orcl'
dbuser='c##1'
dbpassword='xyzzy'
pdb1='pdb1'
pdb1service='coke'
pdb1role='cokerole'
pdb1rolepwd='cokepwd'
pdb2='pdb2'
pdb2service='pepsi'
pdb2role='pepsirole'
pdb2rolepwd='pepsipwd'
connect('weblogic', 'weblogic', 't3://localhost:7001')
edit()
# create shared pool datasource
startEdit()
spds=createSharedPoolDS(cmo, sharedpoolname, driver, dburl, dbuser, dbpassword)
spds.addTarget(getMBean('/Servers/'+servername))
activate()
startEdit()
# create sharing datasource 1
sharingds1=createSharingDS(owner=cmo, resourceName=sharingds1name, sharedPoolJNDIName=sharedpoolname, pdbName=pdb1, pdbServiceName=pdb1service, roleName=pdb1role, rolePassword=pdb1rolepwd)
sharingds1.addTarget(getMBean('/Servers/'+servername))
# create sharing datasource 2
sharingds2=createSharingDS(owner=cmo, resourceName=sharingds2name, sharedPoolJNDIName=sharedpoolname, pdbName=pdb2, pdbServiceName=pdb2service, roleName=pdb2role, rolePassword=pdb2rolepwd) 
sharingds2.addTarget(getMBean('/Servers/'+servername))
activate()
exit()