アプリケーション開発: クライアント・アプリケーションのプログラミング

| | |

DB2 Universal JDBC ドライバーでは DB2 for VM/VSE に対するタイプ 4 の接続はサポートされない

|

DB2 Universal JDBC ドライバーは、DB2 for VM/VSE データベースに対するタイプ 4 の接続をサポートしていません。「アプリケーション開発ガイド: クライアント・アプリケーションのプログラミング」のトピック『Windows Java 環境のセットアップ』と『DB2 Universal JDBC ドライバーのインストール』、および DB2 UDB Information Center では、DB2 Universal JDBC ドライバーが DB2 for VM/VSE データベースへのタイプ 4 の接続をサポートしていると述べていますが、これは誤りです。

DB2 Universal JDBC ドライバー接続コンセントレーターおよび Sysplex ワークロード・バランシング

DB2 UDB for z/OS(R) サーバーへのアクセスに DB2 Universal JDBC Driver type 4 connectivity を使用する Java アプリケーションは、接続コンセントレーターと Sysplex ワークロード・バランシング機能の利点を活用することができます。

それらの機能は、DB2 Connect の接続コンセントレーターと Sysplex ワークロード・バランシング機能に似ています。

DB2 Universal JDBC ドライバーの接続コンセントレーターは、DB2 UDB for z/OS(R) データベース・サーバーが多数のクライアント・アプリケーションをサポートするのに必要なリソース数を減らすことができます。つまり、1 つの物理接続が多数の接続オブジェクトによって使用されるようにすることで、データベース・サーバーへの物理接続の総数が減らされます。

DB2 Universal JDBC ドライバーの Sysplex ワークロード・バランシング機能は、データ共用グループの可用性を高めることができます。このドライバーは、データ共用グループのメンバーの状況情報を頻繁に取得するからです。 このドライバーはその情報を使って、次のトランザクションのルーティング先のデータ共用メンバーを判別します。 Sysplex ワークロード・バランシングにより、DB2 UDB for z/OS サーバーとWorkload Manager for z/OS (WLM) が、作業をデータ共用グループのメンバーに効率よく分散させ、しかも、データ共用グループの中のあるメンバーに障害が起きた場合は別のメンバーにその作業を転送させます。

DB2 Universal JDBC ドライバーは、トランスポート・オブジェクトとグローバル・トランスポート・オブジェクト・プールを使って、接続コンセントレーターと Sysplex ワークロード・バランシングをサポートします。 データベース・サーバーへの各物理接続ごとに、トランスポート・オブジェクトが 1 つあります。 接続コンセントレーターと Sysplex ワークロード・バランシングを使用可能にする場合、最大数のトランスポート・オブジェクトを設定することによって、どの時点でもデータベース・サーバーへの最大数の物理接続が用意されるように設定します。

ドライバー・レベルでは、DB2 Universal JDBC ドライバーの構成プロパティーを使って、トランスポート・オブジェクトの数に対する限度を設定します。

接続レベルで、DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシングを使用可能および使用不可にし、そして DataSource プロパティーを使って、トランスポート・オブジェクトの数に対する限度を設定します。

以下のいずれかの方法で、グローバル・トランスポート・オブジェクト・プールをモニターすることができます。

接続コンセントレーターおよび Sysplex ワークロード・バランシング用の DB2 Universal JDBC ドライバー構成プロパティー

接続コンセントレーターおよび Sysplex ワークロード・バランシングに対して、以下の構成プロパティーがそれぞれ使用されます。

db2.jcc.dumpPool
作成されるサマリー統計に加えて、作成されるグローバル・トランスポート・プール・イベントの統計のタイプを指定します。 グローバル・トランスポート・プールは、接続コンセントレーターと Sysplex ワークロード・バランシングに対して使用されます。

db2.jcc.dumpPool のデータ・タイプは整数 (int) です。 他のどの統計が作成されるよりも前に、db2.jcc.dumpPoolStatisticsOnSchedule と db2.jcc.dumpPoolStatisticsOnScheduleFile 構成プロパティーも統計の作成用に設定する必要があります。

db2.jcc.dumpPool プロパティーには、以下のタイプの統計を 1 つ以上指定することができます。

複数のイベント・タイプをトレースするには、トレースしたいイベント・タイプの値を加算します。 たとえば、DUMP_GET_OBJECT イベントと DUMP_CREATE_OBJECT イベントをトレースしたいと仮定します。 これらの値に相当する数値は 2 と 16 なので、db2.jcc.dumpPool 値には 18 を指定します。

デフォルトは 0 です。これは、グローバル・トランスポート・プールのサマリー統計だけが作成されることを意味します。

db2.jcc.dumpPoolStatisticsOnSchedule
グローバル・トランスポート・プールの統計が、db2.jcc.dumpPoolStatisticsOnScheduleFile 構成プロパティーに指定されたファイルに書き込まれる頻度を秒単位で指定します。 グローバル・トランスポート・プールは、接続コンセントレーターと Sysplex ワークロード・バランシングに対して使用されます。

デフォルトは -1 です。これは、グローバル・トランスポート・プールの統計は作成されないことを意味します。

db2.jcc.dumpPoolStatisticsOnScheduleFile
グローバル・トランスポート・プールの統計を作成するファイルの名前を指定します。 グローバル・トランスポート・プールは、接続コンセントレーターと Sysplex ワークロード・バランシングに対して使用されます。

db2.jcc.dumpPoolStatisticsOnScheduleFile 構成プロパティーを指定しないと、グローバル・トランスポート・プールの統計は作成されません。

db2.jcc.maxTransportObjectIdleTime
未使用のトランスポート・オブジェクトが、グローバル・トランスポート・オブジェクト・プール内に置かれてからこのプールから削除されるまでの期間を秒数で指定します。 トランスポート・オブジェクトは、接続コンセントレーターと Sysplex ワークロード・バランシングに対して使用されます。

db2.jcc.maxTransportObjectIdleTime 構成プロパティーのデフォルト値は 60 です。 db2.jcc.maxTransportObjectIdleTime を 0 より小さい値に設定すると、未使用のトランスポート・オブジェクトは即時にプールから削除されます。 このアクションは、重大な性能低下の原因になる可能性があるので、お勧めしません

db2.jcc.maxTransportObjectWaitTime
db2.jcc.maxTransportObjects 値に達した場合に、アプリケーションがトランスポート・オブジェクトを待機する最長期間を秒数で指定します。 トランスポート・オブジェクトは、接続コンセントレーターと Sysplex ワークロード・バランシングに対して使用されます。 アプリケーションが、db2.jcc.maxTransportObjectWaitTime 値よりも長い期間待機していると、グローバル・トランスポート・オブジェクト・プールは SQLException をスローします。

db2.jcc.maxTransportObjectWaitTime 構成プロパティーのデフォルト値は -1 です。 負の値は、アプリケーションはいつまでも待機することを意味します。

db2.jcc.maxTransportObjects
接続コンセントレーターと Sysplex ワークロード・バランシング用のグローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクト数の上限を指定します。 プール内のトランスポート・オブジェクトの数が db2.jcc.maxTransportObjects 値に達すると、db2.jcc.maxTransportObjectIdleTime 値を超えた期間未使用のままであるトランスポート・オブジェクトは、プールから削除されます。

db2.jcc.maxTransportObjects 構成プロパティーのデフォルト値は -1 です。これは、グローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクト数には制限がないことを意味します。

db2.jcc.minTransportObjects
接続コンセントレーターと Sysplex ワークロード・バランシング用のグローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクト数の下限を指定します。 JVM の作成時には、プール内にはトランスポート・オブジェクトはありません。 トランスポート・オブジェクトは、必要に応じてプールに追加されます。 db2.jcc.minTransportObjects 値に達した後は、JVM が存続するかぎり、グローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクトの数が db2.jcc.minTransportObjects 値より小さくなることはありません。

db2.jcc.minTransportObjects 構成プロパティーのデフォルト値は 0 です。0 以下のすべての値は、グローバル・トランスポート・オブジェクト・プールは空になってもかまわないことを意味します。

接続コンセントレーターおよび Sysplex ワークロード・バランシング用の DB2 Universal JDBC ドライバー DataSource プロパティー

以下の各 DB2 Universal JDBC ドライバー DataSource プロパティーが、接続コンセントレーターおよび Sysplex ワークロード・バランシングで使用されます。

enableConnectionConcentrator
DB2 Universal JDBC ドライバーの接続コンセントレーター機能を使用可能にするかどうかを指示します。 接続コンセントレーター機能は、DB2 UDB for z/OS サーバーへの接続に対してのみ使用することができます。

enableConnectionConcentrator プロパティーのデータ・タイプはブールです。 デフォルトは false です。 ただし、enableSysplexWLB を true に設定した場合、デフォルトは true になります。

enableSysplexWLB
DB2 Universal JDBC ドライバーの Sysplex ワークロード・バランシング機能を使用可能にするかどうかを指示します。 Sysplex ワークロード・バランシング機能は、DB2 UDB for z/OS サーバーへの接続に対してのみ使用することができます。

enableSysplexWLB プロパティーのデータ・タイプはブールです。 デフォルトは false です。 ただし、enableSysplexWLB を true に設定した場合、enableConnectionConcentrator はデフォルトで true に設定されます。

maxTransportObjects
関連した DataSource オブジェクトとのすべての接続で使用できるトランスポート・オブジェクトの最大数を指定します。 トランスポート・オブジェクトは、接続コンセントレーターと Sysplex ワークロード・バランシングに対して使用されます。 接続コンセントレーターまたは Sysplex ワークロード・バランシングの使用を有効にするように enableConnectionConcentrator または enableSysplexWLB プロパティーが設定されていない場合、maxTransportObjects 値は無視されます。

このプロパティーのデータ・タイプは整数 (int) です。

maxTransportObjects 値に達していない場合に、グローバル・トランスポート・オブジェクト・プール内に使用可能なトランスポート・オブジェクトがないと、そのプールで新規のトランスポート・オブジェクトが作成されます。 maxTransportObjects 値に達している場合は、アプリケーションは、db2.jcc.maxTransportObjectWaitTime 構成プロパティーで指定された期間待機します。 その期間が経過した後、プール内に使用可能なトランスポート・オブジェクトがまだない場合、プールは SQLException をスローします。

maxTransportObjects プロパティーが、db2.jcc.maxTransportObjects 構成プロパティーをオーバーライドすることはありません。 maxTransportObjects プロパティーには、他の DataSource オブジェクトからの接続に対する効力はありません。 maxTransportObjects 値のほうが db2.jcc.maxTransportObjects 値より大きくても、maxTransportObjects によって db2.jcc.maxTransportObjects 値が増やされることはありません。

maxTransportObjects プロパティーのデフォルト値は -1 です。これは、DataSource 用のトランスポート・オブジェクトの数は、ドライバーの db2.jcc.maxTransportObjects 値によってのみ制限を受けることを意味します。

WebSphere Application Server で DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシング機能を使用可能にする例

以下に示す手順は、WebSphere(R) Application Server で DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシングの機能を使用可能にする例を示しています。

前提条件

サーバーの要件は次のとおりです。

クライアントの要件は次のとおりです。

手順

WebSphere Application Server で DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシングの機能を使用可能にするには、次のようにします。

  1. 以下のコマンドを、z/OS 上ではコマンド行プロセッサーで、UNIX(R) ではシステム・サービスで発行して、DB2 Universal JDBC ドライバーが接続コンセントレーターと Sysplex ワークロード・バランシングの機能をサポートする正しいレベルであることを確認します。
    java com.ibm.db2.jcc.DB2Jcc -version
    出力で次のような行を見つけます。
    [ibm][db2][jcc] Driver: IBM DB2 JDBC Universal Driver Architecture n n
    n は、2.7 以上でなければなりません。
  2. ドライバーのもとで作成されるすべての DataSource インスタンスに対して接続コンセントレーターまたは Sysplex ワークロード・バランシングが使用可能になるように DB2 Universal JDBC ドライバーの構成プロパティーを設定します。

    構成プロパティーを、DB2JccConfiguration.properties ファイルに設定します。

    1. DB2JccConfiguration.properties ファイルを作成するか、または既存の DB2JccConfiguration.properties ファイルを編集します。
    2. 以下の構成プロパティーを設定します。
      • db2.jcc.minTransportObjects
      • db2.jcc.maxTransportObjects
      • db2.jcc.maxTransportObjectWaitTime
      • db2.jcc.dumpPool
      • db2.jcc.dumpPoolStatisticsOnScheduleFile
      次のような設定から開始します。
      db2.jcc.minTransportObjects=0
      db2.jcc.maxTransportObjects=1500
      db2.jcc.maxTransportObjectWaitTime=-1
      db2.jcc.dumpPool=0
      db2.jcc.dumpPoolStatisticsOnScheduleFile=
        /home/WAS/logs/srv1/poolstats
      
    3. DB2JccConfiguration.properties のディレクトリー・パスを、WebSphere Application Server の DB2 Universal JDBC ドライバー・クラスパスに追加します。
  3. 接続コンセントレーターまたは Sysplex ワークロード・バランシングの機能が使用可能になるように、DB2 Universal JDBC ドライバーのデータ・ソース・プロパティーを設定します。

    WebSphere Application Server の管理コンソールで、アプリケーションがデータベース・サーバーに接続するのに使用するデータ・ソースに対して次のようなプロパティーを設定します。

    • enableSysplexWLB
    • enableConnectionConcentrator
    • maxTransportObjects
    Sysplex ワークロード・バランシング機能に加えて、接続コンセントレーター機能も必要であると想定します。 次のような設定から開始します。
    表 26. DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシング機能用のデータ・ソース・プロパティーの設定例
    プロパティー 設定
    enableSysplexWLB true1
    maxTransportObjects 100
    注:
    1. enableSysplexWLB プロパティーが true に設定されるので、enableConnectionConcentrator プロパティーは、デフォルトで true に設定されます。
  4. WebSphere Application Server を再始動します。

DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシング機能のモニター方法

DB2 Universal JDBC ドライバーの接続コンセントレーターと Sysplex ワークロード・バランシングの機能をモニターするには、グローバル・トランスポート・オブジェクト・プールをモニターする必要があります。 以下のいずれかの方法で、グローバル・トランスポート・オブジェクト・プールをモニターすることができます。

グローバル・トランスポート・オブジェクト・プールのモニターのための構成プロパティー

db2.jcc.dumpPool、db2.jcc.dumpPoolStatisticsOnSchedule、および db2.jcc.dumpPoolStatisticsOnScheduleFile 構成プロパティーによって、グローバル・トランスポート・オブジェクト・プールのトレースを制御します。

たとえば、以下の一連の構成プロパティーの設定では、Sysplex エラー・メッセージとダンプ・プール・エラー・メッセージが 60 秒ごとに /home/WAS/logs/srv1/poolstats というファイルに書き込まれることになります。

db2.jcc.dumpPool=DUMP_SYSPLEX_MSG|DUMP_POOL_ERROR
db2.jcc.dumpPoolStatisticsOnSchedule=60
db2.jcc.dumpPoolStatisticsOnScheduleFile=/home/WAS/logs/srv1/poolstats

プール統計ファイル内の項目は次のようになります。

time Scheduled PoolStatistics npr:2575 nsr:2575 lwroc:439 
hwroc:1764 coc:372 aooc:362 rmoc:362 nbr:2872 tbt:857520 tpo:10

各フィールドの意味は次のとおりです。

npr
プールの作成以降にプールに対して DB2 Universal JDBC ドライバーから出された要求の総数。
nsr
プールの作成以降にプールに対して DB2 Universal JDBC ドライバーから出されて正常に完了した要求の数。 正常に完了した要求とは、プールからオブジェクトが戻されたことを意味します。
lwroc
再利用されたがプール内になかったオブジェクトの数。 これは、接続オブジェクトがトランザクション境界でトランスポート・オブジェクトを解放した場合に生じることがあります。 後で、その接続オブジェクトがトランスポート・オブジェクトを必要としたときに、元のトランスポート・オブジェクトが他のどの接続オブジェクトによってもまだ使用されていなければ、その接続オブジェクトは、そのトランスポート・オブジェクトを使用することができます。
hwroc
プールから再利用されたオブジェクトの数。
coc
プールの作成以降に DB2 Universal JDBC ドライバーが作成したオブジェクトの数。
aooc
db2.jcc.maxTransportObjectIdleTime 構成プロパティーで指定されていたアイドル時間を超過し、プールから削除されたオブジェクトの数。
rmoc
プールの作成以降にプールから削除されたオブジェクトの数。
nbr
プールが最大容量に達したために、プールに対して DB2 Universal JDBC ドライバーから出されたがプールによってブロックされた要求の数。 ブロックされた要求が正常に完了するのは、db2.jcc.maxTransportObjectWaitTime 構成値を超えて例外がスローされる前にオブジェクトがプールに戻された場合です。
tbt
プールでブロックされた要求のミリ秒単位の合計時間。 アプリケーションが複数のスレッドを使用する場合、この時間は、アプリケーションの実行経過時間よりはるかに長くなる可能性があります。
tpo
現在プール内にあるオブジェクトの数。
グローバル・トランスポート・オブジェクト・プールのモニターのためのアプリケーション・プログラミング・インターフェース

グローバル・トランスポート・オブジェクト・プールに関する統計を収集するアプリケーションを作成することができます。 そのようなアプリケーションは、DB2PoolMonitor クラスにオブジェクトを作成し、プールに関する情報を取得するためにメソッドを呼び出します。

たとえば、以下のコードは、グローバル・トランスポート・オブジェクト・プールをモニターするためのオブジェクトを作成します。

import com.ibm.db2.jcc.DB2PoolMonitor;
DB2PoolMonitor transportObjectPoolMonitor =  
	DB2PoolMonitor.getPoolMonitor (DB2PoolMonitor.TRANSPORT_OBJECT);

DB2PoolMonitor オブジェクトの作成後、以下のメソッドを使ってグローバル・トランスポート・オブジェクト・プールをモニターすることができます。

getMonitorVersion
形式:
public int getMonitorVersion()

DB2 Universal JDBC ドライバーに付属している DB2PoolMonitor クラスのバージョンを取得します。

totalRequestsToPool
形式:
public int totalRequestsToPool()

プールの作成以降にプールに対して DB2 Universal JDBC ドライバーから出された要求の総数を取得します。

successfullRequestsFromPool
形式:
public int successfullRequestsFromPool()

プールの作成以降にプールに対して DB2 Universal JDBC ドライバーから出されて正常に完了した要求の数を取得します。 正常に完了した要求とは、プールからオブジェクトが戻されたことを意味します。

numberOfRequestsBlocked
形式:
public int numberOfRequestsBlocked()

DB2 Universal JDBC ドライバーがプールに出した要求のうち、プールが最大容量に達したためにプールによりブロックされた要求の数を取得します。 ブロックされた要求が正常に完了するのは、db2.jcc.maxTransportObjectWaitTime 構成値を超えて例外がスローされる前にオブジェクトがプールに戻された場合です。

totalTimeBlocked
形式:
public long totalTimeBlocked()

プールでブロックされた要求のミリ秒単位の合計時間を取得します。 アプリケーションが複数のスレッドを使用する場合、この時間は、アプリケーションの実行経過時間よりはるかに長くなる可能性があります。

lightWeightReusedObjectCount
形式:
public int lightWeightReusedObjectCount()

再利用されたがプール内になかったオブジェクトの数を取得します。 これは、接続オブジェクトがトランザクション境界でトランスポート・オブジェクトを解放した場合に生じることがあります。 後で、その接続オブジェクトがトランスポート・オブジェクトを必要としたときに、元のトランスポート・オブジェクトが他のどの接続オブジェクトによってもまだ使用されていなければ、その接続オブジェクトは、そのトランスポート・オブジェクトを使用することができます。

heavyWeightReusedObjectCount
形式:
public int heavyWeightReusedObjectCount()

プールから再利用されたオブジェクトの数を取得します。

createdObjectCount
形式:
public int createdObjectCount()

プールの作成以降に DB2 Universal JDBC ドライバーが作成したオブジェクトの数を取得します。

agedOutObjectCount
形式:
public int agedOutObjectCount()

db2.jcc.maxTransportObjectIdleTime 構成プロパティーで指定されていたアイドル時間を超過し、プールから削除されたオブジェクトの数を取得します。

removedObjectCount
形式:
public int removedObjectCount()

プールの作成以降にプールから削除されたオブジェクトの数を取得します。

totalPoolObjects
形式:
public int totalPoolObjects()

現在プール内にあるオブジェクトの数。

OleDbReportIsLongForLongTypes CLI/ODBC 構成キーワード

OleDbReportIsLongForLongTypes キーワードは、以下のデータベース・サーバーでサポートされます。

キーワードの説明:
OLE DB フラグを DBCOLUMNFLAGS_ISLONG で LONG データ・タイプにします。
db2cli.ini キーワードの構文:
OleDbReportIsLongForLongTypes = 0 | 1
同等のステートメント属性:
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
デフォルト設定:
LONG タイプ (LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC、および LONG VARGRAPHIC FOR BIT DATA) には DBCOLUMNFLAGS_ISLONG フラグが設定されていません。これにより列が WHERE 節で使用されることがあります。
使用上の注意:
 

OLE DB のクライアント・カーソル・エンジンと OLE DB .NET Data Provider の CommandBuilder は、IBM(R) DB2(R) OLE DB Provider により提供される列情報に基づいて更新および削除ステートメントを生成します。生成されたステートメントの WHERE 節に LONG タイプが使用されていると、LONG タイプは等価演算子での検索に使用できないため、ステートメントは失敗します。キーワード OleDbReportIsLongForLongTypes を 1 に設定すると、IBM DB2 OLE DB Provider は、DBCOLUMNFLAGS_ISLONG フラグを設定して、LONG タイプ (LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC、および LONG VARGRAPHIC FOR BIT DATA) を報告するようにします。これにより WHERE 節に長い列が使用されないようになります。

OleDbSQLColumnsSortByOrdinal CLI/ODBC 構成キーワード

OleDbSQLColumnsSortByOrdinal キーワードは、以下のデータベース・サーバーでサポートされます。

キーワードの説明:
OLE DB の IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) が、ORDINAL_POSITION 列でソートされた行セットを戻します。
db2cli.ini キーワードの構文:
OleDbSQLColumnsSortByOrdinal = 0 | 1
同等のステートメント属性:
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
デフォルト設定:
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) は、TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME 列でソートされた行セットを戻します。
使用上の注意:
 

Microsoft(R) OLE DB 仕様では、IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) が、TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME 列でソートされた行セットを戻すことが必要です。 IBM DB2 OLE DB Provider は、この仕様に準拠しています。ただし、Microsoft ODBC Bridge provider (MSDASQL) を使用するアプリケーションは通常、ORDINAL_POSITION でソートされた行セットを取得するようコード化されています。 OleDbSQLColumnsSortByOrdinal キーワードを 1 に設定すると、プロバイダーは ORDINAL_POSITION でソートされた行セットを戻します。

IBM DB2 OLE DB Provider 用の DB2 Data Source プロパティー・グループ

IBM DB2 OLE DB Provider には新規のプロパティー・グループ、DB2 Data Source が追加されました。 DB2 Data Source のプロパティー・セットは DBPROPSET_DB2DATASOURCE です。

プロパティー・セットの GUID は、{0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}} です。

DBPROPSET_DB2DATASOURCE には、次の 3 つのプロパティーがあります。

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Property group: DB2 Data Source
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Report IsLong for Long Types

OLE DB のクライアント・カーソル・エンジンと OLE DB .NET Data Provider の CommandBuilder は、IBM DB2 OLE DB Provider により提供される列情報に基づいて更新および削除ステートメントを生成します。生成されたステートメントの WHERE 節に LONG タイプが使用されていると、LONG タイプは等価演算子での検索に使用できないため、ステートメントは失敗します。

表 27. DB2PROP_REPORTISLONGFORLONGTYPES 値
意味
VARIANT_TRUE IBM DB2 OLE DB Provider が、DBCOLUMNFLAGS_ISLONG フラグを設定して、LONG タイプ (LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC、および LONG VARGRAPHIC FOR BIT DATA) を報告するようにします。これにより WHERE 節に長い列が使用されないようになります。
VARIANT_FALSE DBCOLUMNFLAGS_ISLONG は、LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC、および LONG VARGRAPHIC FOR BIT DATA には設定されません。これがデフォルトです。
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Property group: DB2 Data Source
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Return Char as WChar

表 28. DB2PROP_RETURNCHARASWCHAR 値
意味
VARIANT_TRUE OLE DB は、タイプ CHAR、VARCHAR、LONG VARCHAR、または CLOB の列を DBTYPE_WSTR として記述します。ISequentialStream で想定されるデータのコード・ページは、UCS-2 です。これがデフォルトです。
VARIANT_FALSE OLE DB は、タイプ CHAR、VARCHAR、LONG VARCHAR、または CLOB の列を DBTYPE_STR として記述します。ISequentialStream で想定されるデータのコード・ページは、クライアントのローカル・コード・ページです。
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Property group: DB2 Data Source
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Sort By Ordinal

Microsoft OLE DB 仕様では、IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) が、TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME 列でソートされた行セットを戻すことが必要です。 IBM DB2 OLE DB Provider は、この仕様に準拠しています。ただし、Microsoft ODBC Bridge provider (MSDASQL) を使用するアプリケーションは通常、ORDINAL_POSITION でソートされた行セットを取得するようコード化されています。

表 29. DB2PROP_SORTBYORDINAL 値
意味
VARIANT_TRUE プロバイダーは ORDINAL_POSITION でソートされた行セットを戻します。
VARIANT_FALSE プロバイダーは TABLE_CATALOG、TABLE_SCHEMA、 TABLE_NAME、COLUMN_NAME でソートされた行セットを戻します。これがデフォルトです。

DB2Binder 構文図内の誤った URL 構文

トピック『DB2 Universal JDBC ドライバーのインストール』の DB2Binder 構文図では、DB2 Universal JDBC ドライバーの URL 構文が誤って定義されています。DB2Binder の URL 構文の正しい表現を次の図に示します。

DB2Binder の構文
構文図を読む構文図をスキップする>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>
 
>---url jdbc:db2://server-+---------+-/database----------------->
                          '-:--port-'
 
>---user user-ID---password password--+---------------+--------->
                                      '--size integer-'
 
>--+-----------------------------+------------------------------>
   '--collection collection-name-'
 
>--+-------------------------------+--+-------+----------------><
   |              .-,------------. |  '--help-'
   |              V              | |
   '--tracelevel ---trace-option-+-'
 

DB2 Universal JDBC ドライバー・クライアントの転送

クライアント・アプリケーションは、Linux、(TM)UNIX、(R)および Windows(R) 版 DB2 Universal Database(TM) (UDB) の自動クライアント転送機能を使用すると、サーバーとの通信の消失からリカバリーできるため、最小限の中断で作業を継続することができます。

サーバーがロックすると、そのサーバーに接続している各クライアントは通信エラーを受け取り、接続が終了して、アプリケーション・エラーになります。 可用性が重要である場合は、重複セットアップまたはフェイルオーバー・サポートが必要です。 フェイルオーバーは、別のサーバーが失敗したときに、操作を引き継ぐサーバーの機能です。 いずれの場合にも、DB2 Universal JDBC ドライバー・クライアントは、新規サーバーまたは元のサーバーへの接続を再確立しようとします。接続先はフェイルオーバー・ノード上で実行している可能性があります。 接続が再確立された場合、アプリケーションはトランザクション障害を通知する SQLException を受け取りますが、アプリケーションは次のトランザクションを続行できます。

制約事項

手順

データベース管理者がサーバー・インスタンスの特定のデータベースで代替サーバーのロケーションを指定した後、1 次および代替サーバーのロケーションが接続時にクライアントに戻されます。 DB2 Universal JDBC ドライバーは、Referenceable オブジェクト DB2ClientRerouteServerList を作成して、そのインスタンスを一時メモリーに格納します。通信が失われた場合、DB2 Universal JDBC ドライバーは、サーバーから戻されたサーバー情報を使用して、接続の再確立を試行します。

clientRerouteServerListJNDIName DataSource プロパティーは、追加のクライアント転送サポートをクライアントで提供します。clientRerouteServerListJNDIName には次の 2 つの機能があります。

clientRerouteServerListJNDIName は、代替サーバー情報の JNDI リポジトリー内で DB2ClientRerouteServerList インスタンスへの JNDI 参照を識別します。1 次サーバーへの接続が成功すると、そのサーバーからの情報により、clientRerouteServerListJNDIName によって提供される代替サーバー情報が上書きされます。 DB2 Universal JDBC ドライバーは、clientRerouteServerListJNDIName プロパティーが定義されていると、フェイルオーバー後に、更新された情報を JNDI ストアに伝搬しようとします。 clientRerouteServerListJNDIName が指定されると、DB2ClientRerouteServerList に指定された 1 次サーバー情報が接続に使用されます。1 次サーバーが指定されない場合は、データ・ソースに指定された serverName 情報が使用されます。

DB2ClientRerouteServerList は、次の 4 つのプロパティーを持つシリアライズ可能な Java(TM) Bean です。

これらのプロパティーにアクセスする getter および setter メソッドが用意されています。DB2ClientRerouteServerList クラスの定義は、次のとおりです。

package com.ibm.db2.jcc;
public class DB2ClientRerouteServerList
  implements java.io.Serializable,
  javax.naming.Referenceable
{
  public String[] alternateServerName;
  public synchronized void
    setAlternateServerName(String[] alternateServer);
  public String[] getAlternateServerName();
  public int[] alternatePortNumber;
  public synchronized void
    setAlternatePortNumber(int[] alternatePortNumberList);
  public int[] getAlternatePortNumber();
  
  public synchronized void
    setPrimaryServerName (String primaryServerName);
  public String getPrimaryServerName ();
  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
  public int getPrimaryPortNumber ();
}

新しく確立されたフェイルオーバー接続は、サーバー名とポート番号は除き、元のデータ・ソース・プロパティーで構成されます。 さらに、元の接続中に変更されたすべての DB2 UDB 特殊レジスターは、DB2 Universal Driver JDBC ドライバーにより、フェイルオーバー接続で再確立されます。

通信障害が発生すると、DB2 Universal JDBC ドライバーは、まず 1 次サーバーに対するリカバリーを試行します。 これに失敗すると、ドライバーは代替ロケーションに接続しようとします (フェイルオーバー)。 接続が再確立された後、ドライバーは、SQLCODE -4498 とともに java.sql.SQLException をアプリケーションにスローし、 代替サーバーへの接続が自動的に再接続されたことをアプリケーションに通知します。 その後、アプリケーションはトランザクションを再試行できます。

DB2ClientRerouteServerList を永続にするための手順

ストレージをセットアップして DB2ClientRerouteServerList を永続にするには、以下の手順を実行します。

  1. DB2ClientRerouteServerList のインスタンスを作成して、そのインスタンスを JNDI レジストリーにバインドします。 例えば、次のようにします。
    // Create a starting context for naming operations
    InitialContext registry = new InitialContext();
    // Create a DB2ClientRerouteServerList object
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // Set the port number and server name for the primary server
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // Set the  port number and server name for the alternate server
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. DB2ClientRerouteServerList オブジェクトの JNDI 名を DataSource プロパティー clientRerouteServerListJNDIName に割り当てます。例えば、次のようにします。
    datasource.setClientRerouteServerListJNDIName("serverList");

DB2 Universal JDBC ドライバー構成プロパティーのカスタマイズ

DB2 Universal JDBC ドライバーの構成プロパティーによって、そのドライバー全体にわたる有効範囲を持つプロパティー値を設定できます。 それらの設定値は、アプリケーションおよび DataSource インスタンス全体に適用されます。 アプリケーションのソース・コードや DataSource の特性を変更せずに、設定値を変更できます。

それぞれの DB2 Universal JDBC ドライバー構成プロパティー設定の形式は、次のとおりです。

property=value

構成プロパティーが db2.jcc.override で始まる場合は、構成プロパティーはすべての接続に適用でき、同じプロパティー名を持つ Connection または DataSource プロパティーをオーバーライドします。 構成プロパティーが db2.jcc または db2.jcc.default で始まる場合は、構成プロパティー値がデフォルトになります。 その値は Connection または DataSource プロパティー設定値でオーバーライドされます。

手順

構成プロパティーを設定するには、以下のようにします。

以下の DB2 Universal JDBC ドライバー構成プロパティーを設定できます。 すべてのプロパティーはオプションです。

db2.jcc.override.traceFile
DB2 Universal JDBC ドライバーの Java ドライバー・コードのトレースを使用可能に設定し、トレース・ファイル名の基になる名前を指定します。

db2.jcc.override.traceFile プロパティー値の完全修飾ファイル名を指定します。

db2.jcc.override.traceFile プロパティーは、Connection または DataSource オブジェクトの traceFile プロパティーをオーバーライドします。

例えば、以下の設定を db2.jcc.override.traceFile に対して指定すると、DB2 Universal JDBC ドライバー Java コードの、/SYSTEM/tmp/jdbctrace という名前のファイルへのトレースが使用可能に設定されます。

db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

トレース・プロパティーは、IBM ソフトウェア・サポートの指示を受けて設定してください。

db2.jcc.sqljUncustomizedWarningOrException
カスタマイズされていない SQLJ アプリケーションの実行時に DB2 Universal JDBC ドライバーが実行するアクションを指定します。 db2.jcc.sqljUncustomizedWarningOrException には、以下の値を指定できます。
0
DB2 Universal JDBC ドライバーは、カスタマイズされていない SQLJ アプリケーションの実行時に、警告または例外を生成しません。 これがデフォルトです。
1
DB2 Universal JDBC ドライバーは、カスタマイズされていない SQLJ アプリケーションの実行時に、警告を生成します。
2
DB2 Universal JDBC ドライバーは、カスタマイズされていない SQLJ アプリケーションの実行時に、例外を生成します。

db2secFreeToken 関数が除去された

db2secFreeToken 関数 (トークンによって保持される空きメモリー) が、db2secGssapiServerAuthFunctions_1 ユーザー認証プラグイン API の一部ではなくなりました。

カスタム・セキュリティー・プラグインのデプロイメントには注意が必要

セキュリティー・プラグインのデプロイメントが適切にコード化、検討、およびテストされていないと、DB2 Universal Database (UDB) インストールの整合性が損なわれることがあります。DB2 UDB では一般的な種類の多くの障害に対して予防措置を講じていますが、ユーザー作成のセキュリティー・プラグインがデプロイされた場合、完全な整合性を保証できません。

セキュリティー・プラグイン

独自のカスタマイズ済みセキュリティー・プラグインを使用する場合、CLP または動的 SQL ステートメントによって発行される接続ステートメントで、最大 255 文字のユーザー ID を使用できます。

セキュリティー・プラグイン API

db2secGetGroupsForUser、db2secValidatePassword、および db2secGetAuthIDs API の場合、入力パラメーター dbname はヌルでも問題ありません。 その場合、それに対応する長さ入力パラメーター dbnamelen は 0 に設定されます。

セキュリティー・プラグインの命名規則 (Linux および UNIX)

.so は、すべての Linux および UNIX プラットフォームで、ユーザー作成のセキュリティー・プラグイン・ライブラリーのファイル名拡張子として受け入れられるようになりました。

AIX(R) では、セキュリティー・プラグイン・ライブラリーの拡張子は .a または .so とすることができます。 両方のバージョンのプラグイン・ライブラリーが存在する場合は、.a バージョンが使用されます。

PA-RISC 上の HP-UX では、セキュリティー・プラグイン・ライブラリーの拡張子は .sl または .so とすることができます。 両方のバージョンのプラグイン・ライブラリーが存在する場合は、.sl バージョンが使用されます。

他のすべての Linux および UNIX プラットフォームでは、.so が、セキュリティー・プラグイン・ライブラリーに対してサポートされる唯一のファイル名拡張子です。

セキュリティー・プラグイン・ライブラリーに関する制約事項

AIX では、セキュリティー・プラグイン・ライブラリーのファイル名拡張子は .a または .so とすることができます。 プラグイン・ライブラリーをロードするために使用されるメカニズムは、使用される拡張子によって異なります。

ファイル名拡張子が .a のプラグイン・ライブラリー
ファイル名拡張子が .a のプラグイン・ライブラリーは、共用オブジェクト・メンバーを含むアーカイブであると見なされます。 これらのメンバーは、shr.o (32 ビット) または shr64.o (64 ビット) と命名しなければなりません。 単一のアーカイブに 32 ビットと 64 ビットの両方のメンバーを含めて、これを両方のタイプのプラットフォームに配置することができます。

例えば、32 ビットのアーカイブ・スタイル・プラグイン・ライブラリーを作成するには、次のようにします。

  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
  ar rv MyPlugin.a shr.o
ファイル名拡張子が .so のプラグイン・ライブラリー
ファイル名拡張子が .so のプラグイン・ライブラリーは、動的にロード可能な共用オブジェクトであると見なされます。 そのようなオブジェクトは、作成されたときに使用されたコンパイラーおよびリンカー・オプションによって、32 ビットまたは 64 ビットのいずれかになります。 例えば、32 ビットのプラグイン・ライブラリーを作成するには、次のようにします。
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp

AIX 以外の他のすべてのプラットフォームの場合、セキュリティー・プラグイン・ライブラリーは常に動的ロード可能共用オブジェクトであると見なされます。

| | |

DB2 Universal JDBC ドライバー用の GSS-API プラグインのサポート

|

DB2 UDB バージョン 8.2 for Linux、UNIX、Windows のリリースによって、プラグイン (ロード可能なライブラリー) の形式で独自の認証メカニズムを作成することができます。DB2 UDB エンジンは、これらのプラグインをロードし、アクセスしてユーザー認証を実行します。Java で書かれたカスタマー・アプリケーションをサポートするため、DB2 Universal JDBC ドライバーは、DB2 UDB V8.2 フィックスパック 4 でセキュリティー・プラグイン・サポートを提供します。

|

プラグイン認証の実行に DB2 Universal JDBC ドライバーを使用する Java アプリケーションの場合、ユーザーは抽象クラス com.ibm.db2.jcc.DB2JCCPlugin を拡張し、以下のプロパティーを設定することにより、独自のプラグインをインプリメントする必要があります。

| |

次の例に注目してください。

|
      java.util.Properties properties = new java.util.Properties();
|   properties.put("user", "db2admin");
|   properties.put("password", "admindb2");
|   properties.put("pluginName", "gssapi_simple");
|   properties.put("securityMechanism",
|   new String(""+com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY+""));
|   properties.put("plugin", new JCCSimpleGSSPlugin());
|   Connection con = java.sql.DriverManager.getConnection(url, properties);

GSS-API セキュリティー・プラグインはマルチフロー認証をサポートしない

GSS-API 認証は、クライアントからサーバーへの 1 つのトークンのフロー、およびサーバーからのクライアントへの 1 つのトークンのフローに制限されています。これらのトークンは、クライアントの場合 gss_init_sec_context()、サーバーの場合 gss_accept_sec_context() で取得できます。GSS-API プラグインが追加フローを試みると、セキュリティー・プラグインの予期しないエラーが発生し、接続が失敗します。

GSS-API セキュリティー・プラグインはメッセージ暗号化と署名をサポートしない

メッセージ暗号化と署名は、GSS-API セキュリティー・プラグインでは使用できません。

スタンドアロン・アプリケーションのトランザクションの暗黙的な終了

オペレーティング・システムに関係なく、アプリケーションの終了 (正常または異常) が生じると必ず、未解決の作業単位が暗黙的にロールバックします。

分散トランザクション・サポート

DB2 Universal Database (UDB) バージョン 8.2 の「新機能」の『DB2 Universal JDBC ドライバーの改善』セクションにおいて分散トランザクション・サポートの情報が誤っています。 このセクションの最後の文は不正確です。正しい情報は、以下のとおりです。

バージョン 8.2 では、DB2 UDB は、XA 仕様に準拠する分散トランザクション処理をサポートします。 このサポートで、Java 2 プラットフォーム Enterprise Edition (J2EE) Java トランザクション・サービス (JTS) および Java Transaction API (JTA) 仕様を実装します。

[ ページのトップ |前ページ | 次ページ | 目次 ]