Oracle® JDBC for Rdb

リリース・ノート

リリース7.2.5.2

部品番号: E06184-01

原典情報: Oracle JDBC for Rdb Release Notes, Release 7.2.5.2

2008年5月


Oracle JDBC for Rdbリリース・ノート, リリース7.2.5.2

部品番号: E06184-01

Copyright © 2005, 2008 Oracle Corporation. All rights reserved.

制限付権利の説明

このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所有権のある情報が含まれています。このプログラムの使用または開示は、オラクル社およびその関連会社との契約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権と工業所有権に関する法律により保護されています。

このプログラムのリバース・エンジニアリング、逆アセンブル、逆コンパイル等は禁止されています。

このドキュメントの情報は、予告なしに変更される場合があります。オラクル社およびその関連会社は、このドキュメントに誤りが無いことの保証は致し兼ねます。これらのプログラムのライセンス契約で許諾されている場合を除き、プログラムを形式、手段(電子的または機械的)、目的に関係なく、複製または転用することはできません。

このプログラムが米国政府機関、もしくは米国政府機関に代わってこのプログラムをライセンスまたは使用する者に提供される場合は、次の注意が適用されます。

U.S. GOVERNMENT RIGHTS

Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.

このプログラムは、核、航空、大量輸送、医療あるいはその他の本質的に危険を伴うアプリケーションで使用されることを意図しておりません。このプログラムをかかる目的で使用する際、上述のアプリケーションを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。万一かかるプログラムの使用に起因して損害が発生いたしましても、オラクル社およびその関連会社は一切責任を負いかねます。

Oracleは米国Oracle Corporationの登録商標です。記載されているその他すべての会社名および製品名は、それらを識別する目的にのみ使用されており、それぞれの所有者の商標である可能性があります。

このプログラムは、第三者のWebサイトへリンクし、第三者のコンテンツ、製品、サービスへアクセスすることがあります。オラクル社およびその関連会社は第三者のWebサイトで提供されるコンテンツについては、一切の責任を負いかねます。当該コンテンツの利用は、お客様の責任になります。第三者の製品またはサービスを購入する場合は、第三者と直接の取引となります。オラクル社およびその関連会社は、第三者の製品およびサービスの品質、契約の履行(製品またはサービスの提供、保証義務を含む)に関しては責任を負いかねます。また、第三者との取引により損失や損害が発生いたしましても、オラクル社およびその関連会社は一切の責任を負いかねます。



目次

はじめに. 5

このマニュアルの目的5

対象読者. 5

ドキュメントの構成. 5

表記規則. 5

第1章     インストールおよびドキュメント. 7

1.1 ドキュメントへのアクセス. 7

1.2 システムおよびソフトウェアの要件. 8

1.3 インストール. 9

1.3.1 Oracle JDBC for Rdbキットの内容10

1.3.2 インストール手順. 11

第2章     Oracle JDBC for Rdbリリース7.2.5.2で提供される拡張機能. 16

2.1 DEC_KANJIおよびDEC_HANZIのサポートの有効化. 16

第3章     修正された問題. 17

3.1 ResultSet.getBigDecimal()がシステムの結果セットで機能しない. 17

3.2 16進表記法を使用した場合にトレース・レベルの設定に失敗する17

3.3 SELECT文のAS句でのデリミタ付き識別子の問題17

3.4 "DEFAULT"サーバー定義の構成ファイルの問題18

3.5 ユーザー制限が有効化されている場合にプール・サーバーによって互換性のないプールされたサーバーが選択される19

3.6 トレースでSQLDAをダンプする場合の潜在的な問題19

第4章     既知の問題および回避策. 21

4.1 PreparedStatementおよびパラメータ・マーカーの使用方法. 21

4.2 OpenVMSでのJava Fast VMの使用方法. 22

4.3 Oracle SQL/Services Management GUIおよびJDBCディスパッチャの使用方法. 22

4.4 制限. 23

第5章     以前のリリースの新機能および修正. 26

5.1 リリース7.2.5.1の新機能. 26

5.1.1 SQLDAダンピング. 26

5.1.2 プール・サーバーでのfailSAFE IP. 26

5.1.3 マルチ・プロセスのネイティブ接続でのHandshakeTriesおよびHandshakeWait. 26

5.1.4 サーバー・アクセス・セキュリティの拡張機能. 26

5.1.5 結合での複数のBLOBフィールドの使用制限が解除された27

5.2 リリース7.2.5.1での修正. 27

5.2.1 ResultSet.getLast()コールの後で不正な行数が返される28

5.2.2 人物を使用した場合にプール・サーバーがプールされたサーバーの起動に失敗する28

5.2.3 一部の問合せでSELECT構文のリストの最後の列にアクセスできない29

5.2.4 クライアントの異常終了によりエグゼキュータの再利用ができなくなる30

5.2.5 ネイティブ・ドライバでのDECIMAL列の問題30

5.2.6 エグゼキュータの起動時に'EFN xx is not available'というメッセージが表示される30

5.2.7 プール・サーバーによる自動再起動チェック時の余分なログ・メッセージ31

5.2.8 コントローラを使用して起動したサーバーのログ・ファイルが正しく設定されない31

5.3 リリース7.2.5の新機能. 31

5.3.1 人物. 32

5.4 リリース7.2.5での修正. 32

5.4.1 V7.2-41 Oracle JDBC for Rdbキットで不正なSQLSRV_JDBC_SERVER_STARTUP72がインストールされる32

5.4.2 アイドル時でもマルチ・プロセス・サーバーによって継続的にDIOアクティビティが表示される. 32

5.4.3 事前起動済で再利用されたエグゼキュータに対してクライアントのidleTimeoutが機能しない. 33

5.4.4 DatabaseMetaData.getTablesに対して生成された問合せでの構文エラー. 33

5.4.5 コントローラでのクライアントの表示により接続済シン・サーバーがクラッシュする34

5.5 リリース7.2.4.1の新機能. 35

5.5.1 クライアントおよびサーバーのタイムアウト機能. 35

5.5.2 エグゼキュータ名の接頭辞. 35

5.6 リリース7.2.4.1での修正. 35

5.6.1 リリース・ノートに記述されているRDBJDBCCFG.XMLのインストール・ディレクトリが不正である. 35

5.6.2 マルチ・プロセスおよびプール・サーバーによって人物が正しく処理されない. 36

5.6.3 高負荷のシステムでマルチ・プロセス・サーバー/エグゼキュータのハンドシェイク・タイムアウトが短すぎる  36

5.6.4 構成変数srv.idleTimeoutとsrv.bindTimoutの問題およびSSLサーバーでの使用方法  37

5.6.5 IA64の問題により文字列索引付けの処理時に配列範囲外の例外が発生する  38

5.6.6 SQLテキスト内のコメントが正しく処理されない. 38

5.6.7 プリコンパイルされた文によりマルチ・プロセス・サーバーでメモリー・リークが発生する. 39

5.7 リリース7.2.4での修正. 39

5.7.1 単一データ行の最大サイズが65,272オクテットに増加された. 39

5.7.2 プール・サーバーで別の接続のオーバーラップ・ウィンドウが検出される. 40

5.7.3 SSLサーバーの情報がXML形式の構成ファイルから正しく設定されない. 40

 



 

はじめに

このマニュアルの目的

Oracle JDBC for Rdbリリース・ノートでは、新機能、ソフトウェアへの修正、制限、回避策および問題の概要を説明します。また、7.2.4、7.2.4.1、7.2.5および7.2.5.1の各リリースで提供された新機能および修正も記述しています。これらのリリース・ノートは、AlphaサーバーおよびIntegrityサーバーの両方のOracle JDBC for Rdb for OpenVMSを対象としています。

対象読者

このドキュメントは、次を担当するユーザーを対象としています。

·         システム管理

·         データベース管理

·         アプリケーション・プログラミング

ドキュメントの構成

このドキュメントは、次の5つの章で構成されています。

第1章

ドキュメントの場所およびインストール手順の説明

第2章

このリリースの新機能および技術上の変更の説明

第3章

このリリースで修正されたソフトウェア・エラーの説明

第4章

既知の問題、制限および回避策の説明

第5章

リリース7.2.4、7.2.4.1、7.2.5および7.2.5.1の新機能および修正されたソフトウェア・エラーの説明

表記規則

Oracle JDBC for Rdbは、JDBCとも表記されます。

Hewlett-Packard社は、HP社とも表記されます。

 

 

このマニュアルでは、次の表記規則を使用します。

word

書式例に含まれる小文字の単語は、ユーザーが指定する構文要素を表します。

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します。

{ }

中カッコは、カッコ内の項目からいずれか1つを選択する必要があることを表します。

...

水平の省略記号は、前にある項目を繰り返すことができることを示します。

.
.
.

例の中の垂直の省略記号は、例に直接関連しない情報が省略されていることを示します。

 



 

第1章     インストールおよびドキュメント

この章では、Oracle JDBC for Rdbリリース7.2.5.2に関するインストールおよびドキュメントの情報を提供します。

1.1 ドキュメントへのアクセス

リリース・ノートおよびOracle JDBC for Rdbのドキュメントは、次のいずれかの方法で、インストール前にPCSIキットから抽出できます。

·         リリース・ノートのコピーを抽出するには、PCSIキットの場所(デバイス名およびディレクトリ)を指定したPCSI$SOURCEを定義します。次に、DCLプロンプトで、PRODUCT EXTRACT RELEASE_NOTESコマンドの後に製品名を続けて入力します。

$ DEFINE PCSI$SOURCE DKA400:[KITS]
$ PRODUCT EXTRACT RELEASE_NOTES RDBJDBC72 

·         ソフトウェア製品キットに含まれているファイルのリストを抽出するには、PCSIキットの場所(デバイス名およびディレクトリ)を指定したPCSI$SOURCEを定義します。次に、DCLプロンプトで、PRODUCT LISTコマンドの後に製品名を続けて入力します。

$ DEFINE PCSI$SOURCE DKA400:[KITS]
$ PRODUCT LIST RDBJDBC72 

·         ファイルを指定して抽出するには、PCSIキットの場所(デバイス名およびディレクトリ)を指定したPCSI$SOURCEを定義します。次に、DCLプロンプトで、PRODUCT EXTRACT FILEコマンドの後に製品名とファイル名を続けて入力します。

$ DEFINE PCSI$SOURCE DKA400:[KITS]
$ PRODUCT EXTRACT FILE RDBJDBC72/SELECT=filename.ext 

Oracle JDBC for Rdbのドキュメントは、MetaLinkおよびOTNからも入手できます。

インストールの実行後には、Oracle JDBC for Rdbリリース・ノートはSYS$HELPディレクトリにコピーされます。

 

1.2 システムおよびソフトウェアの要件

Oracle JDBC for Rdbを使用するには、次のソフトウェア製品をインストールする必要があります。

ソフトウェア

最低バージョン

Alpha

Integrity

HP OpenVMS

V7.3-2

V8.2-1

HP Java tm SDK/RTE

V1.4.1

V1.4-21

Oracle Rdb

V7.1-24

V7.2

 


注意

Oracle JDBC for RdbのこれまでのV7.2リリースでは、必要なOracle Rdbの最低バージョンがV7.2でした。 この要件は緩和され、今リリースではOracle JDBC for Rdb V7.1リリースの要件と同じになっています。 Integrityでは、従来どおりV7.2 Oracle Rdbが必要最低バージョンです。


クライアント・サイドでは、Oracle JDBC for Rdbシン・ドライバを使用するために次のソフトウェア製品をインストールする必要があります。

ソフトウェア

最低バージョン

Java tmSDK/RTE

V1.4.1

 

Oracle SQL/Servicesを使用してOracle JDBC for Rdbサーバーを起動および停止する必要がある場合は、次の製品をインストールする必要があります。

ソフトウェア

最低バージョン

Alpha

Integrity

Oracle SQL/Services

V7.1.6

V7.2

 

 

Hewlett-Packard Java for OpenVMSシステムのインストールに関する詳細は、次のWebサイトで検索できます。

http://www.hp.com/java 

HPのJava for OpenVMSシステムのドキュメントは、次のWebサイトで検索できます。

http://www.compaq.com/java/documentation/index.html - Java 2
http://h18012.www1.hp.com/java/documentation/index.html 

Javaアプリケーションに関するHPの推奨事項に基づいて、Oracleでは、シン・サーバー(特にマルチ・プロセス・サーバー)の起動に使用するアカウントでの最低の割当て制限の設定を次のように推奨します。

UAF Fillm

4096

Channelcnt

4096

Wsdef

2048

Wsquo

4096

Wsextent and Wsmax

16384

Pgflquo

1500000

bytlm

1000000

biolm

150

diolm

150

tqelm

100

これらのプロセスの割当て制限にあわせて、システムの割当て制限を適切に設定してください。

OpenVMSの割当て制限および必要リソースのうち、Javaによって要求されるものについては、Java for OpenVMSのリリース・ノートを参照してください。

また、OpenVMSの割当て制限についての、Oracle Rdbでの推奨事項については、Oracle Rdbのドキュメントを参照してください。

 

1.3 インストール

この項では、Oracle JDBC for Rdbのインストール方法を説明し、サンプル・ログを示します。

1.3.1 Oracle JDBC for Rdbキットの内容

Oracle JDBC for Rdbキットでは、製品のインストールを簡略化するために、OpenVMS Polycenterが使用されています。OpenVMS Polycenterの使用方法は、OpenVMSのドキュメントを参照してください。

Oracle JDBC for Rdbキットの製品インストール・ファイルには、ORCL-pppVMS-RDBJDBC72-V0702-xxxxxx-1.PCSIという名前が付いています。pppはプラットフォーム、xxxxxxはこのキットのビルド・インスタンスです。次に例を示します。

  ORCL-AXPVMS-RDBJDBC72-V0702-5V0672-1.PCSI 
別例:
  ORCL-I64VMS-RDBJDBC72-V0702-5V0672-1.PCSI

インストール・ファイルは、Rdbソフトウェア配布CDのRDBJDBCディレクトリにあります。Oracle JDBC for RdbキットをWebから入手した場合、インストール・ファイルはRDBJDBCV72xxxxx.ZIPファイルに含まれています。xxxxxはキットのビルド・インスタンスを表します。

インストール・キットは次のファイルで構成されます。

 

BUILD_CERTS.COM

SSLに対する証明書作成のコマンド・プロシージャの例

RDBJDBCCHECKUP.CLASS

このキットのインストールの検証に使用する

RDBJDBCCHECKUP.JAVA

このキットのインストールの検証に使用する

RDBJDBCEXEC72.EXE

マルチ・プロセス・サーバーと連動するエグゼキュータ・イメージ

RDBJDBCCFG.XML

XML形式の構成ファイルの例

RDBJDBCSHR72.EXE

Oracle Rdbデータベースのアクセスに必要な共有イメージ

RDBJDBCMPSHR72.EXE

マルチ・プロセスOracle Rdbデータベースのアクセスに必要な共有イメージ

RDBJDBC_EXECCLI.COM

CLIヘルパー・コマンド・プロシージャ

RDBJDBC_INSTALL.COM

インストール時にPolycenterで使用されるインストール・コマンド・プロシージャ

RDBJDBC_STARTEXEC.COM

Oracle JDBC for Rdbマルチ・プロセス・サーバーでエグゼキュータ・プロセスの起動に使用されるコマンド・プロシージャ

RDBJDBC_STARTSRV.COM

Oracle JDBC for RdbコントローラからOracle JDBC for Rdbサーバーを起動する場合に使用されるコマンド・プロシージャ

RDBNATIVE.JAR

Oracle JDBC for Rdbネイティブ・ドライバのクラスが含まれているJava Jarファイル

RDBTHIN.JAR

Oracle JDBC for Rdbシン・ドライバのクラスが含まれているJava Jarファイル

RDBTHINSRV.JAR

Oracle JDBC for Rdbサーバーのクラスが含まれているJava Jarファイル

RDBTHINCONTROL.JAR

Oracle JDBC for Rdbコントローラのクラスが含まれているJava Jarファイル

RDBTHINSRVPOOL.JAR

Oracle JDBC for Rdbプール・サーバーのクラスが含まれているJava Jarファイル

RDBJDBC_FAQ.TXT(HTML、PDF)

よくある質問

NATIVEDRIVERSANDJDEV.TXT(HTML)

Oracle JDBC for Rdbドライバを処理するためのOracle Developerの変更方法

RDBJDBC_<version>_RELNOTES.PDF(HTML)

Oracle JDBC for Rdbリリース・ノート

RDBJDBC_<version>.RELEASE_NOTES

Oracle JDBC for Rdbリリース・ノートのテキスト版

RDBJDBC_USERGUIDE.HTML(PDF)

ユーザー・ガイド

SQLSRV_JDBC_SERVER_STARTUP71.COM SQLSRV_JDBC_SERVER_STARTUP72.COM

 

Oracle SQL/ServicesでOracle JDBC for Rdbサーバーの起動に使用されるコマンド・プロシージャ

1.3.2  インストール手順

Oracle JDBC for Rdbキットをインストールするには、次の手順を実行します。

1.      ZIP形式のキットを入手した場合は、次のように一時ディレクトリにキット・ファイルをリストアします。

$ unzip RDBJDBCV72xxxx.ZIP -d MY_DIR 


これによってOracle JDBC for RdbのPolycenterキットが解凍され、PCSIファイルORCL-pppVMS-RDBJDBC72-V0702-xxxxxx-1.PCSIへのアクセスが可能になります。pppはプラットフォーム、xxxxxxはこのキットのビルド・インスタンスです。

2.      Polycenter PRODUCTコマンドを使用してキットをインストールします。
キットのバージョンの詳細が表示され、続行するかどうかをたずねられます。
次に示すALPHAシステムでのインストール例では、キットのビルド・インスタンスが5V0672で、PCSIファイルが含まれているディレクトリがMY_DIRである場合を想定しています。

$ PRODUCT INSTALL RDBJDBC72/SOURCE=MY_DIR
 
The following product has been selected:
     ORCL AXPVMS RDBJDBC72 V7.2-5V0672        Layered Product [Installed]
 
Do you want to continue? [YES]
 
Configuration phase starting ...
 
You will be asked to choose options, if any, for each selected product and for any products that may be installed to satisfy software dependency requirements.
 
ORCL AXPVMS RDBJDBC71 V7.2-5V0672: Oracle JDBC for Rdb
 
    Copyright © 1995, 2006,Oracle Corporation.  All Rights Reserved.
 
This product does not have any configuration options.
 
Execution phase starting ...
 
The following product will be installed to destination:
   ORCL AXPVMS RDBJDBC72 V7.2-5V0672        DISK$AXPVMSSYS:[VMS$COMMON.]
 
Portion done: 0%...10%...30%...40%...50%...60%...70%...80%...90%
 
Oracle JDBC for Rdb has been successfully installed in :
 
DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.0702-5V0672]
 
To help you setup the required logical names, a file named
 RDBJDBC_STARTUP.COM has been added to this installation directory
 
RDBJDBC_STARTUP.COM:
$! Oracle JDBC for Rdb startup command procedure
$!
$ DEFINE/SYSTEM RDB$JDBC_HOME DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.0702-5V0672]
$ DEFINE/SYSTEM RDB$JDBC_LOGS DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.logs]
$ DEFINE/SYSTEM RDB$JDBC_COM  DISK$AXPVMSSYS:[SYS1.SYSCOMMON.rdb$jdbc.com]
$ DEFINE/SYSTEM RDBJDBCSHR RDB$JDBC_HOME:RDBJDBCSHR72.EXE
$ DEFINE/SYSTEM RDBJDBCMPSHR RDB$JDBC_HOME:RDBJDBCMPSHR72.EXE
$ DEFINE/SYSTEM RDBJDBCEXEC RDB$JDBC_HOME:RDBJDBCEXEC72.EXE
 
...100%
 
The following product has been installed:
 
   ORCL AXPVMS RDBJDBC72 V7.2-5V0672        Layered Product 


このインストール手順によって、すべてのキット・ファイルが、sys$common:[rdb$jdbc]ディレクトリ内の適切なOracle JDBC for Rdb製品ディレクトリにコピーされます。
また、sys$common:[rdb$jdbc.logs]およびsys$common:[rdb$jdbc.com]の2つの新しいディレクトリが作成されます(すでに存在する場合を除く)。sys$common:[rdb$jdbc]ディレクトリにrdbjdbccfg.xmlファイルが存在しない場合は、インストール・キットから同ファイルがこのディレクトリにコピーされます。

$ dir sys$common:[rdb$jdbc]/col=1
 
Directory SYS$COMMON:[RDB$JDBC]
 
0702-5V0672.DIR;1
COM.DIR;1
LOGS.DIR;1         


さらに、コマンド・プロシージャSQLSRV_JDBC_SERVER_STARTUP*.COMが、システム固有のSYS$MANAGERディレクトリにコピーされます。

3.      Oracle JDBC for Rdb製品のインストール・ディレクトリにあるコマンド・プロシージャRDBJDBC_STARTUP.COMを使用して、次のように、必要なシステムの論理名を定義します。
RDB$JDBC_HOME(インストール・ホーム)

$ define/system RDB$JDBC_HOME SYS$COMMON:[RDB$JDBC.0702-5V0672] 

 


RDB$JDBC_LOGS(Oracle JDBC for Rdbログ・ディレクトリ)

$ define/system RDB$JDBC_LOGS SYS$COMMON:[RDB$JDBC.LOGS] 


RDB$JDBC_COM(Oracle JDBC for Rdbコマンド・ディレクトリ)

$ define/system RDB$JDBC_COM SYS$COMMON:[RDB$JDBC.COM] 


RDBJDBCSHR(共有イメージRDBJDBCSHR72.EXE)

$ define/system RDBJDBCSHR SYS$COMMON:[RDB$JDBC.0702-5V0672]RDBJDBCSHR72.EXE 


RDBJDBCMPSHR(共有イメージRDBJDBCMPSHR72.EXE)

$ define/system RDBJDBCMPSHR SYS$COMMON:[RDB$JDBC.0702-5V0672]RDBJDBCMPSHR72.EXE 


RDBJDBCEXEC(共有イメージRDBJDBCEXEC72.EXE)

$ define/system RDBJDBCEXEC SYS$COMMON:[RDB$JDBC.0702-5V0672]RDBJDBCEXEC72.EXE 


シン・マルチ・プロセス・サーバーを使用する場合や、シン・コントローラまたはプール・サーバーを使用してサーバー・プロセスを起動する場合は、RDB$JDBC_HOME論理名を定義する必要があります。

4.      Javaコマンドラインで、論理名CLASSPATHまたはJAVA$CLASSPATHを使用するか、もしくは-classpathオプションを使用して、Java CLASSPATHにrdbnative.jarファイルとrdbthin.jarファイルを含めます。次に例を示します。

$ define JAVA$CLASSPATH [],RDB$JDBC_HOME:RDBNATIVE.JAR,RDB$JDBC_HOME:RDBTHIN.JAR 

5.      RDBJDBCCHECKUP.CLASSファイルの"RdbJdbcCheckup" Javaクラスを使用して、インストールをテストします。RDBJDBCCHECKUP.CLASSは、インストール中にRDB$JDBC_HOMEにコピーされます。
このファイルをデフォルト・ディレクトリにコピーしたうえで、Javaを使用して起動します。
ユーザー名とパスワード、およびインストールのテスト対象となるOracle Rdbデータベースを指定するよう求められます。テストが成功すると、"Your JDBC installation is correct."というテキストが表示されます。

$ java "RdbJdbcCheckup"
Please enter information to test connection to the database
user:
password:
database: my_db_dir:personnel
Connecting to the database...Connecting
connected.
Hello World
Your JDBC installation is correct.
$ 


次のコマンドを使用して、シン・サーバーをテストします。

$spawn/nowait/proc=rdbthinsrvtest java -jar rdbthinsrv.jar
$java "RdbJdbcCheckup" "-t"
Please enter information to test connection to the database
user:
password:
database: my_db_dir:personnel
Connecting to the database...Connecting...
connected.
Hello World
Your JDBC installation is correct.
$stop rdbthinsrvtest 

 


注意

Java言語では大文字/小文字が区別されるため、クラス名とメソッド名は、必ず各APIで示されているとおりに指定する必要があります。OpenVMSオペレーティング・システムのデフォルトでは、コマンドライン・パラメータは二重引用符で囲まないかぎり大文字になります。




第2章     Oracle JDBC for Rdbリリース7.2.5.2で提供される拡張機能

この章では、Oracle JDBC for Rdbリリース7.2.5.2の新機能および変更された機能について説明します。

 

2.1 DEC_KANJIおよびDEC_HANZIのサポートの有効化

V7.1.3のOracle JDBC for Rdbドライバでは、Oracle RdbデータベースからDEC_KANJIおよびDEC_HANZIのデータにアクセスするためのサポートが追加されましたが、まだ十分なテストが行われていなかったため、Oracleでは、Oracle JDBC for Rdbドライバを使用してOracle RdbデータベースからDEC_KANJIおよびDEC_HANZIのデータにアクセスしないようお薦めしていました。

今バージョンのOracle JDBC for Rdbドライバでは、PCプラットフォーム上でこれらのキャラクタ・セットをSHIFT_JISと併用するテストが完了したため、これらのキャラクタ・セットの使用に関する制限はなくなりました。

 



第3章  
修正された問題

この章では、Oracle JDBC for Rdbリリース7.2.5.2で修正されたソフトウェア・エラーについて説明します。

3.1 ResultSet.getBigDecimal()がシステムの結果セットに対して機能しない

インスタンス・ビルド20070714で修正済

DatabaseMetaDataメソッドによって返された結果セットの列に対してgetBigDecimal()メソッドをコールすると、次の例外が発生して処理が失敗することがありました。

     java.lang.ArrayIndexOutOfBoundsException: 2

この問題は、現在では修正されています。

3.2 16進表記法を使用した場合にトレース・レベルの設定に失敗する

インスタンス・ビルド20070731で修正済

トレース・レベルについて16進値の解析を行う際、0x7FFFFFFFより大きいトレース・レベル値を使用すると次の例外が発生することがありました。

java.lang.NullPointerException      

    この問題は、現在では修正されています。

3.3 SELECT文のAS句でのデリミタ付き識別子の問題

インスタンス・ビルド20070731で修正済

リリース7.2.5.1で報告された問題として、SELECT文のAS句で使用されているデリミタ付き識別子を解析すると、次の例外が発生する場合があるという問題がありました。

select last_name as "name 1", first_name from employees

SQLException: in <rdbjdbcsrv:prepare_stmt>

%SQL-F-RELNOTDEF, Table FIRST_NAME is not defined in database or schema:42000

  回避策は、次のように、AS句でデリミタ付き識別子を使用しないことです。   

        select last_name as name1, first_name from employees

   この問題は、現在では修正されています。

3.4 "DEFAULT"サーバー定義による構成ファイルの問題

インスタンス・ビルド20080122で修正済

サーバー情報のインストール中に、"DEFAULT"サーバーからプロパティが誤ってコピーされ、各サーバーの構成設定が不適切になる場合がありました。

この問題は、サーバー構成ファイルの"DEFAULT"サーバー定義に、次のプロパティのいずれかが含まれている場合にのみ発生します。

   ssl.default

   ssl.context

   ssl.keyManagerFactory

   ssl.keyStoreType

   ssl.keyStore

   ssl.keyStorePassword

   ssl.trustStore

   ssl.trustStorePassword

<allowPrivUser>

<allowUser>

<allowDatabase>

<allowPrivUser>

 

これらのプロパティのいずれかが"DEFAULT"サーバー定義に使用されている場合、各サーバー構成プロパティ(許可されたデータベース、許可されたユーザーなど)が、対象のサーバーから、同じ構成ファイルに記述されているその他すべてのサーバーへ誤って伝播する可能性があります。

この問題の回避策は、"DEFAULT"サーバー定義にこれらのプロパティを使用せず、必要なサーバー定義にのみ、そのプロパティを含めることです。

Oracle JDBC for Rdbのドキュメントで使用されている構成ファイルの例では、"DEFAULT"サーバー定義に次のプロパティが使用されているため、この問題が発生する可能性があります。

ssl.default="true"

 

     この問題は、現在では修正されています。

3.5 ユーザー制限が有効化されている場合にプール・サーバーが互換性のないサーバーを選択する

インスタンス・ビルド20080122で修正済

プール・サーバーによって制御されているサーバー・プールにおいて、いずれかの参加サーバーがアクセス制限を有効化されており、かつそのサーバーにAllowedUserエントリが1つ以上存在する場合、そのAllowedUserにリクエスト元の接続ユーザー名が含まれていなくても、リクエストされた接続に対する候補サーバーとしてそのサーバーが選択される可能性があります。

この問題が発生した場合、接続リクエストは選択されたサーバーにリダイレクトされますが、接続試行は即座に終了して次の例外が表示されます。

SQLException: Access to server denied

今バージョンでは、最初の接続リクエスト中に情報がプール・サーバーへ正しく渡されるように変更されたため、プール・サーバーは、プール内の候補サーバーが要求元のユーザーを受け入れるかどうかを正しく判断した後で、そのサーバーへと接続リクエストをリダイレクトできるようになりました。

3.6 トレースでSQLDAをダンプする場合の潜在的な問題

インスタンス・ビルド20080125で修正済

以前のバージョンでは、SQLVARデータ領域をダンプするための内部バッファの割当てに問題があったため、サーバーの実行中に予期しない問題が発生し、サーバーが異常終了することがありました。

この問題が発生するのは、接続に対して、またはサーバー全体に対してtracelLevel DUMP SQLDAフラグ・ビットが設定されており、かつダンプするSQLVARのデータ領域長が512オクテットを超える場合のみです。

 

ビット

16進値

10進値

トレース

14

0x00004000

16384

SQLDA情報のダンプ

 

 

この問題の回避策は、tracelevel DUMP SQLDAトレース・フラグ・ビットを設定しないことです。

    この問題は、現在では修正されています。


第4章  
既知の問題および回避策

この章では、Oracle JDBC for Rdbリリース7.2.5.2の既知の問題、制限および回避策について説明します。

4.1 PreparedStatementおよびパラメータ・マーカーの使用方法

Connection.PrepareStatement()メソッドを使用してプリコンパイル済の文を作成する際、Oracle JDBC for Rdbドライバは、Oracle Rdb SQLを呼び出してSQL文をコンパイルし、選択フィールドとパラメータ・マーカーを記述します。このとき、SQLはパラメータ・マーカーの内部用メッセージ表示を作成します。これは、プリコンパイル済の文の実行時にOracle Rdbへ渡される可能性があります。

各パラメータ・マーカーを使用して渡される文字値の最大サイズは、この段階でSQLによって決定されます。SQLが決定したパラメータ最大サイズよりも長い文字列値をアプリケーションが使用しようとすると、一貫性のない結果が返される可能性があります。入力値が長すぎる場合、値はOracle Rdbへ送られる前にSQLによって切り捨てられます。これは、問合せが等価条件の選択である場合には問題ありませんが、その他のブール比較の場合には予期しない結果が返されます。たとえば、次の問合せはレコードを返します。

   Statement stmt = conn.createStatement();
 
   stmt.execute("create table tab (f1 char(3))");
 
   stmt.execute("insert into tab values ('123')");
   PreparedStatement ps;
   ps = conn.prepareStatement( "select f1 from tab where f1 like ?");
   ps.setString(1, "123");
   ps.execute(); 

次の問合せはレコードを返しません。

ps.setString(1, "%123");
ps.execute(); 

この問合せが失敗する理由は、SQLがパラメータのテキスト文字列の最大サイズを3文字(フィールドF1のサイズ)に設定するためです。入力値は、Oracle Rdbに送られる前に%12に切り捨てられるため、レコードと一致しません。

回避策は、入力された問合せを変更して、アプリケーションが使用する入力値を保持できるだけのパラメータ・サイズを割り当てるよう強制することです。次に例を示します。

ps = conn.prepareStatement( "select f1 from tab where" +  
     " cast (f1 as VARCHAR(4)) like ?"); 

これで、正しい値が返されます。

この問題の修正方法は、現在調査中です。

4.2 OpenVMSでのJava Fast VMの使用方法

シン・ドライバの起動時にOpenVMSでJava Fast VMを使用すると、単一のサーバーが同時に処理できるクライアントの数が制限される場合があります。これは、Fast VMを使用することで、Oracle Rdbサブシステムがアクセスできる特定のシステム・メモリーの量が大幅に削減されるためです。

この状況によるメモリー不足の一般的な兆候は、サーバー・プロセスによってCOSI-VASFULLエラーが発行されることです。

メモリー使用量の変更方法の提案事項は、OpenVMS JavaドキュメントのFast VMの使用に関する項を参照してください。

Java VMが使用するヒープ・サイズは、Java VMによって事前に割り当てられるメモリー量の決定において重要です。ヒープ・サイズは-Xmxオプションを使用して設定できます。デフォルトでは、割当て制限およびシステムの物理メモリー・サイズに基づいて、割り当てられるヒープ・サイズが決まります。両方のサイズが非常に大きい場合は、ヒープが必要以上に大きくなる可能性があります。サーバーの起動に使用するコマンドのコマンドラインで-verbosegcを使用すると、現在のヒープ・サイズを確認できます。

また、メモリー使用量は、"-Xglobal"スイッチを使用することで変化する場合もあります。

Fast VMを有効化するとシン・サーバーでCOSI-VASFULLエラーが表示される場合は、問題修正の最初の試みとして、次のスイッチ設定を試すことをお薦めします。

$ java "-Xmx24m" "-Xglobal120m" jar rdbthinsrv.jar 

4.3 Oracle SQL/Services Management GUIおよびJDBCディスパッチャの使用方法

既存のバージョンのOracle SQL/Services Management GUIでは、タイプJDBCのディスパッチャは認識されません。これは、JDBCディスパッチャを定義するとGUIを使用できなくなることを意味します。

Oracle SQL/Servicesの定義からJDBCディスパッチャを削除することで、この問題の発生が抑制されます。

4.4 制限

·         次に示すJDCB 2.0、JDBC 3.0およびJDK 1.4のメソッドは、現在サポートされていません。

Blob.setBytes

Blob.setBinaryStream

Clob.setString

Clob.setAsciiStream

Clob.setCharacterStream

Clob.truncate

Connection.setSavepoint

Connection.rollback(savepoint)

Connection.releaseSavepoint

DatabaseMeteData.getSQLKeywords

PreparedStatement.setRef

PreparedStatement.setArray

PreparedStatement.setNull(int,int,String)

PreparedStatement.setURL(int,URL)

ResultSet.getRef

ResultSet.getArray

ResultSet.updateAsciiStream

ResultSet.updateBinaryStream

ResultSet.updateCharacterStream

ResultSet.updateRef

ResultSet.updateArray

ResultSet.rowUpdated

ResultSet.rowInserted

ResultSet.rowDeleted

ResultSet.updateBytes

Statement.cancel

Statement.setQueryTimeout

Statement.getMoreResults

Statement.executeUpdate(String sql, int autoGeneratedKeys)

Statement.executeUpdate(String sql, int[] columnIndexes)

Statement.executeUpdate(String sql, String[] columnNames)

Statement.execute(String sql, int autoGeneratedKeys)

Statement.execute(String sql, int[] columnIndexes)

Statement.execute(String sql, String[] columnNames)

 

·         次に示すJDBC 2.0およびJDBC 3.0の機能またはデータ型は、サポートされていません。

単一のSQL文で使用できるマーカーおよびフィールドの合計数は、250です。

·         文字列の切捨てに関する警告

Oracle JDBC for Rdbドライバでの文字列の切捨ては、SQL-92の規則に従っており、格納か検索かで異なります。

格納操作で文字列の切捨てが発生した場合、Oracle RdbによってエラーRDB$_TRUN_STOREが示されます。ただし、切り捨てられた文字列がすべて空白の場合はエラーにならないため例外です。検索時に文字列の切捨てが発生した場合は、Oracle RdbによってSQL警告RDMS$K_SQLCODE_TRUNCWARNが示されます。

·         JDBCの数値関数および文字列関数

OCI Services for Oracle Rdbで使用できるようにsql_functions.sqlスクリプトを使用してデータベースを事前に準備した場合を除き、JDBCの標準の数値関数および文字列関数の多くは、Oracle Rdb内でサポートされません。このスクリプトの使用方法の詳細は、Oracle SQL/Servicesのドキュメントを参照してください。 



第5章  
以前のリリースの新機能および修正

 

5.1 リリース7.2.5.1の新機能

この章では、Oracle JDBC for Rdbリリース7.2.5.1の新機能および変更された機能について説明します。

5.1.1 SQLDAダンピング

トレース・レベルを0x00004000(10進値は16384)に設定すると、SQLとの間でやりとりされたSQLDA情報に関する情報が提供されます。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.1.2 プール・サーバーでのfailSAFE IP

リダイレクトされた接続リクエストがfailSAFE IPフェイルオーバー時にも正しくリダイレクトされるように、プール・サーバーを構成できます。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.1.3 マルチ・プロセスのネイティブ接続でのHandshakeTriesおよびHandshakeWait

ネイティブ接続のマルチ・プロセス・オプションは、RdbNativeドライバを使用し、アプリケーションのかわりにエグゼキュータ・サブプロセスを使用してRdb接続を実行することを可能にします。 これにより、メイン・プロセスおよび関連するサブプロセスで使用される最初の通信ハンドシェイク・プロトコルで、ハンドシェイク・オプションを指定できるようになりました。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.1.4 サーバー・アクセス・セキュリティの拡張機能

サーバーを構成して、処理されるデータベースのアクセスを、許可されたユーザー名のリストに制限できます。 そのサーバーを介したデータベースへのアクセスを指定されたユーザーのみに制限する、サーバー構成allowUserが、構成ファイルのサーバー・セクションに追加されました。

また、srv.password構成オプションを使用してサーバー・パスワードを指定できます。これにより、そのサーバーのすべてのユーザーは、追加のパスワードを入力しないとサーバーを介したアクセスを許可されません。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.1.5 結合での複数のBLOBフィールドの使用制限が解除された

以前のバージョンでは次の制限が示されていました。

·         BLOBがSQL結合文から正しく返されるのは、結合セットで指定されている最初の表についてのみです。たとえば、次のSQL文があるとします。

Select ta.blob, tb.blob from table1 ta, table2 tb where ta.name = tb.name 

ta.blobは、結合セット内で最初に参照される表から取得されるため、正しく返されます。tb.blobへのアクセスを試行すると、次のSQLエラーが表示されます。

%SQL-F-BADPREPARE, Cannot use DESCRIBE or EXECUTE on a statement that is not prepared

この制限は解除され、Oracle JDBC for Rdbドライバは、単一の結合文内の複数の表から取得したBLOBフィールドを処理できるようになりました。

ただし、Oracle JDBC for Rdbドライバによって実行される解析の性質により、前述のSELECT文の例のように、結合の2番目以降の表から参照されたすべてのBLOB列は、相関名を使用して修飾する必要があります。

BLOB列名と相関名を組み合せて使用しなかった場合は、BLOBフィールドからデータを取得するときに、次のようなSQL解析エラーが表示されます。これは、BLOBデータにアクセスするための正しい表の特定に必要な情報がドライバに提供されないためです。

SQL-F-FLDNOTCRS, Column <blob col> was not found in the tables in current scope

また、この制限は、BLOBフィールドを含む2つ以上の表の結合に対してSELECT句で"*"を使用した場合でも、同様のSQLエラーが発生することを意味します。

5.2 リリース7.2.5.1での修正

この項では、Oracle JDBC for Rdbリリース7.2.5.1で修正されたソフトウェア・エラーについて説明します。

5.2.1 ResultSet.getLast()コールの後で不正な行数が返される

インスタンス・ビルド20060906で修正済

現在の行数を特定する際の問題により、Scrolling ResultSetsを使用すると、ストリームの終了後、カーソルが絶対位置に配置された後に、ResultSet.getRow()メソッドによって不正な行数が返されます。

この問題は、Oracle JDBC for Rdbネイティブ・ドライバでのみ発生し、Oracle JDBC for Rdbシン・ドライバの使用時には発生しません。

また、ResultSet.afterLast()メソッドをコールした後にResultSet.last()をコールした場合のみ発生します。

ResultSet.afterLast()をコールすると、内部レコード・カウンタが不正に設定され、実際のカウントより1つ多くなります。

次に、この問題の例を示します。

       Statement s2   = conn.createStatement(

            ResultSet.TYPE_SCROLL_INSENSITIVE,

            ResultSet.CONCUR_UPDATABLE);

 

        ResultSet rs = s2.executeQuery("select * from employees");

        rs.afterLast();

        rs.last();

        System.out.println("row number : " + rs.getRow());

        System.out.println("employee_id :" + rs.getString(1));

        rs.close();

        s2.close();

これを、Oracle Rdbのインストールでサンプル・データベースとして提供されるPERSONNELデータベースまたはMF_PERSONNELデータベースのEmployees表で使用した場合は、次の情報が返されます(最後のレコードの行番号は100になる必要があります)。

row number : 101

employee_id :00471

 

5.2.2 人物を使用した場合にプール・サーバーがプールされたサーバーの起動に失敗する

インスタンス・ビルド20061011で修正済

プール・サーバーによるサーバーの自動起動時にサーバー・プロセスの作成に使用される下位プロセスのネーミングの問題により、次の例外が発生します。

%RUN-F-CREPRC, process creation failed

-SYSTEM-F-DUPLNAM, duplicate name

 

 

また、プールされたサーバー・プロセスの起動を試行する際に、次に示す関連例外が表示されます。

 

java.sql.SQLException: Unable to start process, status: 0x164 : substatus -4

 

これらの問題は、人物を使用して、起動されるサーバーのサーバー認可特性を変更した場合のみ発生します。

5.2.3 一部の問合せでSELECT構文のリストの最後の列にアクセスできない

インスタンス・ビルド20061124で修正済

内部データベース・キー情報の処理の問題により、アプリケーションがSELECT構文のリストの最後の列にアクセスできなくなります。 この問題が発生するのは、使用するSELECT問合せが結果のタプルに対して一意のデータベース・キーを提供できない場合のみです。 複数の表から導出された表またはビューを含む問合せでは、この問題が発生します。

  select c1.last_name from (select * from employees c where c.employee_id='00170') c1

この場合は、Resultset.GetString(String columnName)メソッドを使用すると不正なlast_nameが返されます。

  select c1.last_name, c1.first_name from (select * from employees c where c.employee_id='00170') c1

この場合は、名前は正しく返されませんが、姓は正しく返されます。これは、最も外側のSELECT構文のリストの最後の列のみがこの問題の影響を受けるためです。

この問題は、Oracle JDBC for RdbドライバV7.1.3へのコード変更により出現しました。

5.2.4 クライアントの異常終了によりエグゼキュータの再利用ができなくなる

インスタンス・ビルド20061221で修正済

MPサーバーを使用するクライアント・アプリケーションが異常終了したり、クライアント・ソケットが失われた場合は、関連付けられているデータベース接続がサーバーによって切断されますが、内部的な問題により、終了したクライアントに関連付けられているエグゼキュータ・プロセスは、システムにLEF状態で依然として存在します。

異常終了の処理でエグゼキュータ・プロセスが正しく終了されず、なおかつ解放されたエグゼキュータが再利用の空きリストに返されません。 その結果、孤立したエグゼキュータ・プロセスがLEF待機状態でシステムにとどまるにもかかわらず、再利用できなくなります。

 クライアントの異常終了が頻繁に発生すると、非アクティブのエグゼキュータ・プロセスが増加して、最終的にはシステム・リソースの問題および過剰なスワッピングを引き起こします。

5.2.5 ネイティブ・ドライバでのDECIMAL列の問題

インスタンス・ビルド20061221で修正済

ネイティブRdbドライバの問題により、DECIMAL列が不正に返されます。  この問題は、rdbNativeドライバを使用するアプリケーションのみに影響します。

DECIMALデータ型は、内部関数または集計操作による操作後にスケール変更された整数が返された場合にSQLによって使用されることがあります。たとえば、次の問合せがrdbNativeドライバを介して実行された場合には、不正な値が返されます。 

         select distinct salary_amount from salary_history

rdbThinドライバを使用するアプリケーションではこの問題は発生しません。

 

5.2.6 エグゼキュータの起動時に'EFN xx is not available'というメッセージが表示される

インスタンス・ビルド20070302で変更済

Oracle JDBC for Rdbの以前のバージョンでは、新しく作成されたエグゼキュータとのハンドシェイク・プロセスの起動にMPサーバーが使用する共通イベントのフラグ番号の取得を試行して、十分な時間をかけても取得できなかった場合には、クライアント接続の試行が中断され、次の例外が表示されます。

         'EFN xx is not available'

このような場合、サーバーが使用するイベント・フラグは、エグゼキュータ・プロセスを作成するためにサーバーによって前回の試行で設定されたままになっていたにもかかわらず、リソースの問題でプロセスの起動時に失敗した可能性があります。

これまでにサーバー・コードは変更されており、エグゼキュータ・プロセスが正しく起動しなかった場合には、イベント・フラグの使用が正しくクリーンアップされるようになりました。また、イベント・フラグがすでに使用中であることを検出してもサーバーは中断せず、イベント・フラグを使用できない時間はエグゼキュータ・プロセスの作成およびエグゼキュータ・イメージの準備にかかる時間よりかなり長いため、フラグはリセットされ、現行のエグゼキュータの起動が続行されるとみなします。

5.2.7 プール・サーバーによる自動再起動チェック時の余分なログ・メッセージ

インスタンス・ビルド20070306で変更済

プール・サーバーによるプールされたサーバーの可用性チェックの問題により、自動再起動チェックを実行する際に、プールされたサーバーがチェックされるたびに、余分なCLIENT LOSTメッセージが記録されます。 次のメッセージが記録されます。

srv.DBActionHandler <idle> Connection to Client lost

この問題は、現在では修正されています。

5.2.8 コントローラを使用して起動したサーバーのログ・ファイルが正しく設定されない

インスタンス・ビルド20070412で修正済

トレース・メッセージおよび他の出力を記録するためにサーバーで使用されるログ・ファイルは、サーバーおよびコントローラとともに使用される構成ファイルのサーバー指定セクションで設定されます。

新しく起動したサーバー・プロセスにログ・ファイル情報が渡される際の問題により、コントローラのサーバー起動コマンドを使用してサーバーを起動した場合に、正しいログ・ファイル指定がサーバーで使用されなくなります。

この問題は、現在では修正されています。

5.3 リリース7.2.5の新機能

5.3.1 人物

シン・サーバーまたはプール・サーバーの起動時に、起動に使用されたプロセスの権利識別子、割当て制限および認可の属性が自動的に継承されます。サーバーの起動時に使用する人物を指定することで、このデフォルトの動作を上書きできます。その後、サーバーによって起動されるサーバー・プロセスおよびエグゼキュータ・プロセのス権利と認可を決定する際には、サーバーおよびその基礎となるOpenVMSオペレーティング・システムの両方でこの人物が使用されます。

この機能は、7.1.4で導入されましたがリリース・ノートでは省略されました。

 

5.4 リリース7.2.5での修正

この項では、Oracle JDBC for Rdbリリース7.2.5で修正されたソフトウェア・エラーについて説明します。

5.4.1 V7.2-41 Oracle JDBC for Rdbキットで不正なSQLSRV_JDBC_SERVER_STARTUP72がインストールされる

インスタンス・ビルド20060505で修正済

不正なバージョンのSQLSRV_JDBC_SERVER_STARTUP72.COMファイルが誤ってOracle JDBC for RdbのV7.2-41インストール・キットに含まれています。

このバージョンのファイルでは、RDB$JDBC_SQSNAM_*論理名が正しく設定されず、このファイルをSQL/Serviceシン・サーバーの起動時に使用しようとすると問題が発生します。

このファイルに含まれるDCLコマンドの次の行に誤りがあります。

$    nam    :='f$logical("RDB$JDBC_SQSNAM_''port'") 

正しい行は次のとおりです。

$    nam    = f$logical("RDB$JDBC_SQSNAM_''port'") 

この問題は、現在では修正されています。

5.4.2 アイドル時でもマルチ・プロセス・サーバーによって継続的にDIOアクティビティが表示される

インスタンス・ビルド20060505で修正済

連結解除されたマルチ・プロセス・サーバーによるエグゼキュータ・サブプロセスの作成時に割り当てられたエラーおよび出力のチャネルの問題により、サーバー・プロセスは、関連付けられているメールボックスに直接I/Oを継続的に発行します。これは、サーバーのアイドル時でもそのプロセスの直接I/Oカウントが増え続けることからもわかります。

これは、サーバーが正しく機能するのを妨げるものではありませんが、静止したサーバーでのアクティビティとして不正に表示される可能性があります。

回避策は、連結解除されたマルチ・プロセス・サーバーを使用するかわりに、ログイン・セッションでマルチ・プロセス・サーバーを直接起動することです。

この問題は、現在では修正されています。

5.4.3 事前起動済で再利用されたエグゼキュータに対してクライアントのidleTimeoutが機能しない

インスタンス・ビルド20060505で修正済

クライアント接続がアイドル状態になる時間の長さは、シン・サーバーのcli.idleTimeoutパラメータを使用して制限できます。

ただし、事前起動済のエグゼキュータにマルチ・プロセス・サーバーが使用されている場合は、サーバーに対して設定されたクライアントのアイドル・タイムアウト値が無視されます。クライアントが接続時に事前起動済のエグゼキュータを取得した場合、サーバーに対するクライアントのアイドル・タイムアウトがクライアント・コンテキストに正しく転送されず、タイムアウトが発行されません。

また、エグゼキュータが事前に起動していない場合でも、再利用されている場合は、同様の問題が発生して非アクティブ時間が設定されなくなります。

これまでに、サーバーに対して設定されたクライアントのアイドル・タイムアウトは、事前起動済および再利用されているエグゼキュータによって正しく監視されるようになりました。

5.4.4 DatabaseMetaData.getTablesに対して生成された問合せでの構文エラー

インスタンス・ビルド20060620で修正済

JDBC DatabaseMetaData.getTables()メソッドを使用すると、コール元は、接続済データベースで検出された表およびビューの情報を取得できます。このメソッドをコールする際に、検索対象の表タイプのリストを指定できます。

 

 

現在、Oracle JDBC for Rdbドライバでは、このメソッドに対して次のタイプの表が認識されます。

·         TABLE

·         VIEW

·         SYSTEM

·         SYSTEM TABLE

·         SYSTEM VIEW

·         LOCAL TEMPORARY

·         LOCAL TEMPORARY TABLE

·         GLOBAL TEMPORARY

·         GLOBAL TEMPORARY TABLE

·         INFORMATION

·         INFORMATION TABLE

ここに示されていない表のタイプは、ドライバによって無視されます。

ただし、ドライバ・コードの問題により、表タイプのリストがドライバに認識されないタイプで始まる場合には、SQL構文例外が生成されます。たとえば、次の例ではSQL構文エラーが発生します。

  String types[] = {DERIVED, "TABLE", "VIEW", "GLOBAL TEMPORARY"}; 
  ResultSet rs = dbmd.getTables("","", "%" , types); 

この問題の回避策の1つは、タイプの順序を変更して、認識される表タイプのリストに含まれているタイプを最初のタイプとして指定することです。次に例を示します。

 String types[] = ("TABLE",  DERIVED, "VIEW", "GLOBAL TEMPORARY"};   
 ResultSet rs = dbmd.getTables("","", "%" , types); 

この例ではSQLエラーは生成されません。

この問題は、現在では修正されています。

 

5.4.5 コントローラでのクライアントの表示により接続済シン・サーバーがクラッシュする

インスタンス・ビルド20060620で修正済

 

Oracle JDBC for RdbのV7.1-41でのハンドシェイク・プロトコルの変更により、クライアント情報のリクエストへのシン・サーバーの応答に問題が発生しました。

 

Oracle JDBC for RdbコントローラのコマンドラインでSHOW CLIENTコマンドを発行すると、接続されているシン・サーバーによって不当なアクセスが行われ、その結果、サーバー・プロセスが終了します。

 

この問題は、現在では修正されています。

 

5.5 リリース7.2.4.1の新機能

この項では、Oracle JDBC for Rdbリリース7.2.4.1の新機能および技術上の変更について説明します。

5.5.1 クライアントおよびサーバーのタイムアウト機能

サーバー接続またはクライアント接続が切断されるかサーバーが終了するまでの、非アクティブ状態を維持する時間の長さを指定できるようになりました。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.5.2 エグゼキュータ名の接頭辞

マルチ・プロセス・サーバーによって起動されるエグゼキュータの名前の接頭辞を指定できるようになりました。これは、システム上でエグゼキュータ・プロセスを識別するのに役立ちます。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.6 リリース7.2.4.1での修正

この項では、Oracle JDBC for Rdbリリース7.2.4.1で修正されたソフトウェア・エラーについて説明します。

5.6.1 リリース・ノートに記述されているRDBJDBCCFG.XMLのインストール・ディレクトリが不正である

インスタンス・ビルド20060130で修正済

Oracle JDBC for Rdbリリース7.1.2のリリース・ノートには、RDBJDBCCFG.XMLファイルがSYS$COMMON:[RDB$JDBC]ディレクトリにコピーされると誤って記述されています。実際には、RDBJDBCCFG.XMLは、製品のインストール時に次の2つのディレクトリにコピーされます。

·         JDBCメイン・ディレクトリの下にある製品のインストール・ディレクトリ。次に例を示します。

SYS$COMMON:[RDB$JDBC.0701-4V0614] 

·         SYS$COMMON:[RDB$JDBC.COM]ディレクトリ

また、インストール手順によってSYS$COMMON:[RDB$JDBC.COM]ディレクトリのRDBJDBCCFG.XMLファイルが不正に置き換えられ、同じ名前の既存のファイルが上書きされます。

これまでに、このリリース・ノートは修正され、インストール手順では、RDBJDBCCFG.XMLファイルがSYS$COMMON:[RDB$JDBC.COM]ディレクトリにすでに存在しない場合のみ、ファイルがコピーされるようになりました。

5.6.2 マルチ・プロセスおよびプール・サーバーによって人物が正しく処理されない

インスタンス・ビルド20060130で修正済

マルチ・プロセスまたはOracle JDBC for Rdbプール・サーバーと人物機能を併用した場合に、エグゼキュータ・プロセスまたはプールされたサーバー・プロセスの作成の問題により、正しい人物識別子が作成されたプロセスに渡されません。この問題により、次のエラーが発生します。

java.io.IOException: Child creation error: not owner 

JDBCサーバーがエグゼキュータ・サブプロセスおよびプールされたサーバーの起動に使用するJAVA System.exec()メソッドの使用制限により、新しく作成されたプロセスに、セキュリティ情報および人物詳細がコピーされません。

現在では、JDBCサーバーはOpenVMSシステム・サービスCREPRCを使用してプロセスを起動します。また、CREPRCによって、新しいプロセスにセキュリティ情報が正しく転送されます。

5.6.3 高負荷のシステムでマルチ・プロセス・サーバー/エグゼキュータのハンドシェイク・タイムアウトが短すぎる

インスタンス・ビルド20060130で修正済

マルチプロセッサ・サーバーは、エグゼキュータと対話する際に、ハンドシェイク・プロトコルを使用して、エグゼキュータがまだ稼働中で指示を受け入れることをチェックします。デフォルトでは、エグゼキュータがサーバーの同期リクエストに5秒以内に応答しない場合、次の例外が発生して接続が切断されます。

Lost connection to executor 

この同期ハンドシェイクは、エグゼキュータがサーバーに応答し、リクエストされたタスクが完了して次の操作の実行を待機していることを伝えた後に行われます。この同期の失敗は、データベース内でエグゼキュータがビジー状態にある間は発生しません。したがって、問合せのコンパイルや実行に必要なデータベース・ロックまたは時間などによる影響を受けません。エグゼキュータが次のアクションの実行を待機中であることが認識されている場合のみ発生します。

高負荷のシステム、特に単一CPUのシステムでは、この同期ハンドシェイクのウィンドウ内でエグゼキュータ・プロセスが実行のためにスケジュールされず、例外が発生する場合があります。

この同期を実行するために、以前のバージョンのドライバでは、各ポーリング・リクエスト間隔の遅延10ミリ秒で、サーバーがエグゼキュータを最大500回ポーリングします。500回の試行で応答が検出されなかった場合は、サーバーで前述の例外が発生します。

このバージョンのOracle JDBC for Rdbドライバでは、最大ポーリング試行回数および各試行間隔の遅延をサーバー・レベルで指定できます。サーバーが実行されているシステムのプロセス・スケジュールの遅延が延長されている可能性があることを認識していれば、サーバーが同期ハンドシェイク時にタイムアウトしないようにすることができます。次の2つのスイッチが、新たにサーバー定義およびサーバー起動に追加されています。

·         Srv.MPmaxTries: 最大ポーリング試行回数の指定に使用します。

·         Srv.MPtryWait: 各試行間隔での遅延の指定に使用します。

詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.6.4 構成変数srv.idleTimeoutとsrv.bindTimoutの問題およびSSLサーバーでの使用方法

インスタンス・ビルド20060208で修正済

リリース7.1〜3のOracle JDBC for Rdbユーザーズ・ガイドには、srv.idleTimeoutが接続の非アクティブ・タイムアウトに影響すると記述されていますが、これは誤りです。実際には、このスイッチは、サーバーの非アクティブ・タイムアウト期間を表します。また、この機能は以前のバージョンでは十分に機能していませんでした。

srv.bindTimeout構成変数は、サーバーがデータベースの接続を続行する必要があるというクライアントからの確認を待機する時間を制限するためのものです。デフォルト値は0で、サーバーが無限に待機することを意味します。

このタイムアウトは、SSL通信の処理に役立ちます。新しいソケット接続がリクエストされた後にクライアントが接続リクエストを送信するのを待機する時間を制限するために、サーバーによって使用されるためです。SSLが有効化されているサーバーと通信しようとしてクライアントがSSLセキュア・ソケットの使用に失敗した場合は、接続が完了しないためサーバー内のクライアント・スレッドが停止します。srv.bindTimeout値は、中止するまでのこの待機時間を指定します。

この値のデフォルト値は誤って1秒に設定され、srv.bindTimeoutサーバー属性はXML構成ファイル内で無視されていました。つまり、CPUバウンド・システムでは、最初のSSLネゴシエーションにかかる時間が2番目にかかる時間より長く、新しい接続リクエストでTIMOUT失敗が発生する可能性がありました。

これらの問題は修正済です。詳細は、『Oracle JDBC for Rdbユーザーズ・ガイド』を参照してください。

5.6.5 IA64の問題により文字列索引付けの処理時に配列範囲外の例外が発生する

インスタンス・ビルド20060208で修正済

IA64上のJAVAでは、文字列索引付け操作を静的な最終文字列定数を使用して実行すると、まれに次のタイプの例外が発生することがあります。

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1054649176 
at java.lang.String.indexOf(String.java:1266) 
at java.lang.String.indexOf(String.java:1236) 
at java.lang.String.indexOf(String.java:1218) 
at oracle.rdb.jdbc.common.Statement.getTableName(Statement.java:3148) 

この種の例外では必ず、例外名の後の索引値が非常に大きくなります(桁数はここに示したものと常に同じ)。

現在では、getTableNameメソッドは、indexOf以外のメカニズムで操作を実行するように変更されています。そのため、今後この問題は発生しません。

5.6.6 SQLテキスト内のコメントが正しく処理されない

インスタンス・ビルド20060301で修正済

先行コメントまたは埋込みコメントを含むSQLテキストを持つ文を実行またはプリコンパイルすると、文の解析時にエラーが発生する場合があります。

一部のサード・パーティ製品では、コンパイルのためにJDBCドライバに送るテキストで/* comment */などのコメントが使用されます。このスタイルのコメントはOracle Rdbでは正しく処理されますが、JDBCドライバによって文が事前に解析される際の文のタイプの特定時に問題が発生します。

次にSQLテキストの例を示します。

Stmt.Execute(/* This is a comment */ select * from jobs); 

このテキストによって、次のSQLExceptionが発生します。

SQLException: in <rdbjdbcsrv:execute_immediate> %SQL-F-EXESELSTA, Attempted to EXECUTE a SELECT statement:RR000 

JDBCドライバは、文のタイプを正しく特定できず、文を実行するために、基礎となる誤ったSQL操作を使用します。

現在では、ドライバは文のタイプを特定する前にコメントを抽出し、ネイティブSQLをOracle Rdbに送ります。また、ドライバは、CおよびSQLタイプのコメントを正しく解析します。次に例を示します。

/* comment */
! this comment will be terminated at the next line break
-- this comment will be terminated at the next line break
// this comment will be terminated at the next line break 

5.6.7 プリコンパイルされた文によりマルチ・プロセス・サーバーでメモリー・リークが発生する

インスタンス・ビルド20060301で修正済

プリコンパイルされた文の準備中に、マルチ・プロセス・サーバーは、プリコンパイルされる文の中で列およびパラメータ・マーカーに関する一部の情報を保持するサーバーのグローバル共有メモリー・プールからのメモリーを割り当てる必要があります。

コーディングの問題により、このメモリーの一部は、文のコンパイル時に1回だけ割り当てられるのではなく、プリコンパイルされた文が実行されるたびに不正に割り当てられます。このように誤って割り当てられたメモリーが使用後に解放されることはありません。プリコンパイルされた同じ文を複数回実行すると、サーバーが使用できる共有メモリーが徐々に減少し、さらには共有メモリー割当てを完全に使い果たして問題が発生します。

この問題は、現在では修正されています。

5.7 リリース7.2.4での修正

この項では、Oracle JDBC for Rdbリリース7.2.4で修正されたソフトウェア・エラーについて説明します。

5.7.1 単一データ行の最大サイズが65,272オクテットに増加された

インスタンス・ビルド20051114で修正済

Oracle Rdbからデータ行をコピーする際に、コピーされるオクテット数がOracle JDBC for Rdbドライバによって36863オクテット数に不正に制限されます。これにより、36863より多いオクテットが行に含まれている場合は、問題が発生します。

次の例外は、このデータ行の切捨ての兆候です。

Statement creation failed: java.sql.SQLException: Connection lost : java.lang.NegativeArraySizeException     @rdb.Client.fillCache 

これまでに、ドライバによってサポートされるデータ行の最大サイズは、Oracle Rdbでサポートされる最大行サイズにあわせて65,272オクテットに増加されています。

5.7.2 プール・サーバーで別の接続のオーバーラップ・ウィンドウが検出される

インスタンス・ビルド20051209で修正済

Oracle JDBC for Rdbプール・サーバーおよびそのプールされたサーバーによって確立された接続の間に別の潜在的な接続のオーバーラップが検出され、これによって、接続の空きスロットを使用できる場合でもクライアント接続が不正に拒否されます。

これは、リリース7.1.3.3のOracle JDBC for Rdbリリース・ノートに次のように記述されている問題と類似しています。

Spurious Maximum number of clients exceeded exception 

これまでに、プール・サーバーによるサーバー・チェック時のハンドシェイク・プロトコルは、このような接続のオーバーラップを防ぐために変更されています。

5.7.3 SSLサーバーの情報がXML形式の構成ファイルから正しく設定されない

インスタンス・ビルド20051220で修正済

XML構成ファイル・データの解析の問題により、タイプ"RdbThinSrvSSL"、"RdbThinSrvMPSSL"および"RdbThinSrvPoolSSLの名前付きサーバーに正しいポートおよびノードの情報が割り当てられません。

個々のサーバーに提供されたURL指定がすべて無視され、かわりにデフォルトのポートおよびノードが使用されます。

この問題は、現在では修正されています。