[WLS] Setting V$SESSION for a WLS Datasource

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/setting_v_session_for_a

全てのOracleデータベース接続は、セッションと呼ばれるデータベースプロセスと関わって動作します。v$sessionビューにはアクティブなデータベースセッションに関するたくさんの情報が含まれています。デフォルトでは、Oracle Thin Driverを使うと、v$session.programに"JDBC Thin Client"という値が設定されます。SQL*Plusや数多くのデータベースのバックグラウンドプログラムとJavaアプリケーションを区別しますが、付加情報がないため、Javaのすべての接続が同じように見えてしまいます。Oracle Thinドライバにある接続プロパティを使って、簡単にv$sessionにこの情報と別の値を設定することができます。次の接続プロパティをサポートしています。
  • v$session.osuser
  • v$session.process
  • v$session.machine
  • v$session.terminal
  • v$session.program
これらを設定すると、データベース側のセッションに対応する値が設定されます。これらの値は、V$SESSIONビューから使用できるようになります。

固定値をデータソースに関連づけたいならば、通常の接続プロパティに値を直接設定するのが簡単です。ランタイムで値が動的に変わる場合にはもっと興味深いのです。例えば、複数のサーバが一つのドメインで動作しており、その情報がサーバで固有のものでなければならない場合、1個の固定値を使った通常のクラスタ展開では役に立たず、各サーバ個別にDataSourceを展開し、これらのプロパティに対し一意の値を持つよう記述子(Descriptor)を手で編集するというやり方では管理できません。このような場合には、システムプロパティを使用して簡単に取り扱うことができます。指定された値は、アプリケーション·サーバーのコマンドラインで設定されたJavaシステムプロパティであると解釈されます。この値はSystem.getProperty()を使用して取得し、接続プロパティの値として設定されます。WebLogic Server 12.1.3にはEncrypted Propertyという新しいプロパティがありますが、それについては別のエントリで説明する予定です。

bin/startWebLogic.shを使ってサーバを起動する場合、コマンドラインで -Dweblogic.Name=${SERVER_NAME} としますが、v$session.program システムプロパティの接続プロパティを"weblogic.Name"に設定すると、セッションプログラムの値は、接続しているWebLogic Serverに一致します。
接続プロパティはWebLogic Server管理コンソールの[接続プール]タブで、データソース構成を編集することで設定できます。プロパティは[プロパティ]と[システム・プロパティ]テキストボックスで設定します。
[訳注]
以下はWebLogic Server 12.1.3のプロパティ値設定画面のスクリーンショットです。

仮にテキスト値に4個の値を設定したとしましょう。一つはシステム・プロパティです。以下はディスクリプタの例です。
<property>
  <name>v$session.osuser</name>
  <value>test1</value>
</property>
<property>
  <name>v$session.process</name>
  <value>test2</value>
</property>
<property>
  <name>v$session.machine</name>
  <value>test3</value>
</property>
<property>
  <name>v$session.terminal</name>
  <value>test4</value>
</property>
<property>
  <name>v$session.program</name>
  <sys-prop-value>weblogic.Name</sys-prop-value>
</property>
もしくは、これらの値をオンライン、もしくはオフラインのWLSTで設定することもできます。以下はオフラインWLSTスクリプトの例です。
cd('/JDBCSystemResource/myds/JdbcResource/myds')
cd('JDBCDriverParams/NO_NAME_0')
cd('Properties/NO_NAME_0')
create('v$session.program','Property')
cd('Property')
cd('v$session.program')
set('SysPropValue', 'weblogic.Name')
$SERVER_NAME がmyserverである場合、クエリをかけると、以下のような応答が返ってきます。
SQL> select program, osuser, process, machine, terminal
  from v$session where program = 'myserver';
myserver test1 test2 test3 test4
サーバー名が明らかでない場合は、v$session.programに WebLogic Server$ SERVER_NAME を設定することができます。-Djdbc.process=<PID>を設定して、特定のWebLogic Serverのサーバプロセスに接続を紐付けることもできます。WebLogic Serverのデータソース名をv$session.programの値に追加したいと思うかもしれません。Javaの値 user.name を osuser に設定することができます。

システムプロパティを使用すると、特に大規模な構成では、接続ソースに関する情報を追跡する上で、強力な機能になることでしょう。

0 件のコメント:

コメントを投稿