ノート:
共有プールに使用可能な接続がなく、容量が許す場合は、共通サービス用の新しい接続が作成され、接続をリクエストしている共有データ・ソース用に利用されます。共有プールを使用するための要件を学習し、理解します。
共有プール機能を使用するには、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.jdbc.sharedPool=true
を設定します。
ノート:
この属性は、そのデータ・ソース定義が共有接続プールを表すかどうかを示します。この属性をfalse(デフォルト)に設定すると、そのデータ・ソースを共有プールとして参照するデータ・ソースはデプロイメントで例外が発生します。共有データ・ソース定義の設定
weblogic.jdbc.sharedPoolJNDIName=<jndiname>
を設定しますノート:
JNDI名でバインドされたデータ・ソースが共有プールとして構成されていない場合、デプロイメントで例外が発生します。ノート:
共有データ・ソースで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つのみを使用できます。この共通ユーザーには、次の権限が必要です。
grant execute on dbms_service_prvt to c##user;
grant set container to c##user;
共有プールのデータ・ソース構成では、CDBの共通サービスを含むURLを指定する必要があります。
パスワードで保護されたロールは、共有データ・ソースによって接続される各PDBで構成されている共通ユーザーに対して定義する必要があります
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()