ヘッダーをスキップ

Oracle Databaseプラットフォーム共通日本語README
11gリリース1(11.1)
E05740-05
  目次
目次
 

戻る
戻る
次へ
次へ
 

Oracle JDBC Drivers README

原典情報: $ORACLE_HOME\relnotes\readmes\README_jdbc.txt


目次

このリリースの新機能

ドライバのバージョン

このリリースの内容

NLS拡張機能のjarファイル(クライアント側のみ)

インストール

環境の設定

JDBCドライバ使用時に役立つヒント

以前のoracle.jdbc.driverパッケージの廃止

Javaストアド・プロシージャ

既知の不具合

このリリースの既知の問題/制限事項


このリリースの新機能

Java Standard Edition 6(JSE6)およびJDBC 4.0のサポート

ThinドライバおよびOCIドライバでは、新しいJDBC仕様であるJDBC 4.0を含め、JSE 6(AKA Mustang)がサポートされています。このリリースでは、新しいjava.sql.SQLXMLタイプはサポートされていません。JSE 6は、Oracle JDBCの新しいjarファイルであるojdbc6.jar、ojdbc6_g.jar、ojdbc6dms.jarおよびojdbc6dms_g.jarでサポートされています。このリリースは、JSE 6の製品リリースに準拠しています。

J2SE 5.0およびJDBC 3.0は、このリリースに含まれているその他のjarで完全にサポートされています。サーバー側内部ドライバおよびサーバー・ドライバのThinドライバでサポートされているのは、J2SE 5/ JDK 1.5のみです。

oracle.jdbc.driverのサポート廃止

Oracle JDBCドライバの初期リリースでは、パッケージoracle.jdbc.driverに定義されているクラスの使用が推奨されていました。このことは、ユーザーにもオラクル社にも問題となっていました。Oracle JDBCリリース9.0.1で、そのパッケージのクラスの使用が廃止されました。新規パッケージoracle.jdbcが導入され、oracle.jdbcに定義されているインタフェースやクラスの使用が推奨されました。9.0.1以降のすべてのリリースで、oracle.jdbcに切り替えることを推奨し、oracle.jdbc.driverのサポートが廃止されることをお伝えしてきました。ついに、サポートは廃止されることになりました。oracle.jdbc.driverを参照する顧客コードは、Oracle JDBCドライバのこれ以降のリリースでは、コンパイルすることも実行することもできなくなります。かわりに、oracle.jdbcを使用してください。

oracle.jdbcに同じ名前のタイプがないoracle.jdbc.driverのクラスを使用している場合、ユーザーによるそのクラスの使用はサポートされないため、別の解決策を見つける必要があります。唯一の例外はoracle.jdbc.driver.OracleLogです。このクラスは、デバッグ目的で参照できます。その場合でも、Oracle JDBCの診断可能なMBeanをかわりに使用することをお薦めします。詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

J2SE 1.2、1.3および1.4のサポート廃止

Oracle 11R1では、J2SE 1.2、1.3および1.4はサポートされていません。これらのバージョンのJ2SEをサポートする.zipおよび.jarファイルは、Oracle JDBC 11R1には含まれていません。J2SE 1.2、1.3または1.4を使用している場合は、それらのバージョンのJavaでOracle JDBC 10.2.0.1.0の使用を続行できます。10gR2は、それらのバージョンのJavaを使用できるよう完全にサポートされています。Oracle JDBC 11R1を使用する場合は、J2SE 5.0以上を使用する必要があります。

Thinドライバの追加のセキュリティ機能のサポート

Oracle JDBC 11R1 Thinドライバでは、AES暗号化アルゴリズム、SHA1ハッシュ・アルゴリズム、RADIUS、KERBEROSおよびSSL認証メカニズムがサポートされています。

JDBC Thinドライバで、TLS_RSA_WITH_AES_128_CBC_SHAおよびTLS_RSA_WITH_AES_256_CBC_SHA暗号化を使用できるようになりました。

SQL ANYDATAおよびANYTYPE型のサポート

ANYDATAおよびANYTYPE SQL型は、Oracle 9iで導入されました。Oracle JDBC 11R1より前には、これらの型を操作するには、JavaプログラマはPL/SQLを使用する必要がありました。Oracle JDBC 11R1には、これらの型を使用するためのJavaインタフェースが用意されています。詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

Thinドライバにおけるアドバンスト・キューイングのサポート

Oracle JDBC 11R1には、AQ(Oracle Advanced Queueing)にアクセスするための高パフォーマンスな新しいインタフェースが用意されています。この新しいインタフェースは、既存のPL/SQLベースのインタフェースより高速かつ機能的で、ANYDATA、ANYTYPE、ANYDATASET型の新しいサポートを利用しています。

データベース変更通知のサポート

対象の表または問合せを識別し、そのいずれかが変更されるたびに通知を受信する機能であるデータベース変更通知は、Oracle Database 9iで導入されました。Oracle JDBC 11R1には、この強力な機能のネイティブJavaサポートが用意されています。データ・キャッシュを使用している開発者は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を入手して、データベース変更通知がどのように機能するかを理解する必要があります。失効したデータのコストが高すぎるためにデータ・キャッシュを使用していない場合は、DCNを使用するとキャッシュが可能になります。

データベースの起動および停止(ThinおよびOCI)

Oracle JDBC 11R1には、Oracle Databaseの起動と停止を行うためのメソッドが用意されています。

新しいファクトリ・メソッド

java.sql.ConnectionのJDBC 4.0仕様には、標準のJDBCタイプ、Array、BLOB、CLOBなどのインスタンスを作成するためのファクトリ・メソッドが含まれています。このコンセプトに基づいて構築されているため、Oracle JDBC 11R1のoracle.jdbc.OracleConnectionには、Oracle固有タイプのインスタンスを作成するためのファクトリ・メソッドが用意されています。標準のJDBCタイプおよび新しいファクトリ・メソッドを使用することをお薦めします。Oracle固有タイプを使用する必要がある場合は、新しいファクトリ・メソッドを使用してそれらを作成することをお薦めします。これらのタイプのコンストラクタへのユーザーによる直接アクセスは廃止され、今後サポートされなくなります。サポートされているタイプは、ARRAY、BFILE、DATE、INTERVALDS、NUMBER、STRUCT、TIME、TIMESTAMPなどを含め、すべてoracle.sqlに含まれています。

メモリー・フットプリントの削減

10gR1では、特に文のキャッシュ(推奨)を使用している場合にメモリー・フットプリントが増加するのを承知の上で、パフォーマンスを向上するためにドライバを再構築しました。パフォーマンスは向上しましたが、メモリー・フットプリントが増加すると問題があることがわかりました。11R1リリースでは、パフォーマンスの向上内容はすべてそのままで、文のキャッシュを使用する際のメモリー・フットプリントが大幅に削減されました。使用していない場合には文をクローズすることをお薦めします。キャッシュに文を戻し、キャッシュから取得するコストはごくわずかです。オープンされている各文には、かなりのメモリー・フットプリントがあります。クローズされた文のフットプリントはごくわずかです。文のキャッシュを使用する際に使用していない文をクローズすると、メモリー・フットプリントが減少するため、実際にパフォーマンスが向上することがテストで実証されました。

ドライバのバージョン

11R1リリースには、次のドライバ・バージョンがあります。

JDBC Thinドライバ11R1

クライアント・アプリケーション、中間層サーバーおよびアプレット用の100% Javaクライアント側JDBCドライバ。

JDBC OCIドライバ11R1

OCI 11R1がインストールされているマシン用のクライアント側JDBCドライバ。

サーバー側Thin JDBCドライバ11R1

リモートOracleデータベースにアクセスするデータベース内のJavaプログラム用のJDBCドライバ。

サーバー側JDBC内部ドライバ11R1

Javaストアド・プロシージャ用のサーバー側JDBCドライバ。このドライバはJDBC Kprbドライバと呼ばれていました。

詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

このリリースの内容

全プラットフォーム

[ORACLE_HOME]/jdbc/libには、次のファイルが含まれています。

ojdbc5.jar

JDK 1.5用のクラス。OracleのObject型およびCollection型によるNLSサポート用のクラスを除く、JDBCドライバ・クラスが含まれています。

ojdbc5_g.jar

ojdbc5.jarと同じですが、クラスはjavac -gを使用してコンパイル済で、トレース・コードが含まれています。

ojdbc5dms.jar

ojdbc5.jarと同じですが、DMSおよび制限付きjava.util.loggingコールをサポートするためのインスツルメンテーションが含まれています。

ojdbc5dms_g.jar

ojdbc5_g.jarと同じですが、DMSをサポートするためのインスツルメンテーションが含まれています。

ojdbc6.jar

JDK 1.6用のクラス。OracleのObject型およびCollection型によるNLSサポート用のクラスを除く、JDBCドライバ・クラスが含まれています。

ojdbc6_g.jar

ojdbc6.jarと同じですが、javac -gを使用してコンパイルされ、トレース・コードが含まれています。

ojdbc6dms.jar

ojdbc6.jarと同じですが、DMSおよび制限付きjava.util.loggingコールをサポートするためのインスツルメンテーションが含まれています。

ojdbc6dms_g.jar

ojdbc6_g.jarと同じですが、DMSをサポートするためのインスツルメンテーションが含まれています。


注意:

jarファイルのdmsバージョンは標準のjarファイルと同じですが、Oracle Dynamic Monitoring Serviceをサポートするための追加コードが含まれています。含まれるトレース・コードの量は制限されています。dms.jarがCLASSPATHにある場合のみ使用できます。dms.jarは、Oracle Application Serverのリリースに含まれて提供されています。
そのため、jarファイルのdmsバージョンを使用できるのは、Oracle Application Server環境のみです。

[ORACLE_HOME]/jdbc/doc/javadoc.tarには、Oracle JDBCのパブリック・クラスのパブリックAPIに関するJDBC Javadocが含まれています。このJavaDocは、Oracle JDBC API拡張機能の主要な参照ドキュメントです。『Oracle Database JDBC開発者ガイドおよびリファレンス』には、Oracleの拡張機能に関する高度な説明が記載されています。詳細はこのJavaDocに記載されています。JavaDocは、開発ガイドと同様に正式なドキュメントです。

[ORACLE_HOME]/jdbc/demo/demo.tarには、JDBCのサンプル・プログラムが含まれています。

[ORACLE_HOME]/jlib/orai18n.jar

JDK 1.5および1.6用のNLSクラス。OracleのObject型とCollection型によるNLSサポート用のクラスが含まれています。
このjarファイルにより、古いnls_charset jar/zipファイルが置き換えられます。Oracle 10gリリース1(10.1)では、このファイルは[ORACLE_HOME]/jdbc/libにも重複して存在しました。この重複したコピーは削除されたため、前述の位置からこのファイルを取得する必要があります。

Windowsプラットフォームの場合

[ORACLE_HOME]\binディレクトリには、JDBC OCIドライバ用ライブラリocijdbc11.dllおよびheteroxa11.dllがあります。

Windows以外のプラットフォームの場合

[ORACLE_HOME]/libディレクトリには、JDBC OCIドライバ用の共有ライブラリlibocijdbc11.so、libocijdbc11_g.so、libheteroxa11.soおよびlibheteroxa11_g.soがあります。

NLS拡張機能のjarファイル(クライアント側のみ)

サーバー側内部JDBCドライバは完全なNLSサポートを提供します。NLS拡張機能のjarファイルは不要です。この項の説明は、Oracle JDBC ThinドライバとOracle JDBC OCIドライバにのみ適用されます。

基本のjarファイル(ojdbc5.jarおよびojdbc6.jar)には、次のように完全なNLSサポートの提供に必要なクラスがすべて含まれています。

Object型またはCollection型のCHAR/VARCHARデータ・メンバーに他のキャラクタ・セットを使用する必要がある場合は、CLASSPATHにNLS拡張機能のjarファイル([ORACLE_HOME]/jlib/orai18n.jar)を含める必要があります。新規のorai18n.jarにより、9i以前のリリースのnls_charset*.*ファイルが置き換えられます。

ファイルorai18n.jarには、文字に関連する重要なファイルが多く含まれています。これらのほとんどのファイルは、グローバリゼーション・サポートのために必要です。アプリケーションで使用するキャラクタ・セット・ファイルのみを抽出するのではなく、次の3つの手順に従うことが最も安全です。

  1. orai18n.jarを一時ディレクトリに解凍します。

  2. アプリケーションで使用しないキャラクタ・セット・ファイルを削除します。地域ファイル、照合順番ファイルまたはマッピング・ファイルは削除しないでください。

  3. 一時ディレクトリで新しいorai18n.jarファイルを作成し、変更したファイルをCLASSPATHに追加します。

詳細は、JDBCの開発者ガイドを参照してください。

また、各国対応のJDBCエラー・メッセージ・ファイルを選択的に含めることもできます。メッセージ・ファイルは、ojdbc5*.jarおよびojdbc6*.jar内のoracle/jdbc/driver/Messages_*.propertiesファイルに含まれています。

インストール

CLASSPATHには、Oracle JDBC Driversの複数バージョンを指定しないでください。Oracle Installerを実行すると、Oracle JDBC Driversが[ORACLE_HOME]/jdbcディレクトリにインストールされます。

環境の設定

Windowsプラットフォームの場合

Solaris/HP Tru64 Unixの場合

HP/UXの場合

AIXの場合

JDBCドライバ使用時に役立つヒント

Oracle JDBC Driversの使用方法の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』、およびdemo/doc/javadoc.tarにあるOracle JDBC JavaDocを参照してください。この項では、ヒントのみを説明します。これらのヒントは網羅的ではありません。

あくまでもJDBCプログラムで必要な事項です。

  1. JDBCを使用するプログラムに必要なJDBCクラスをインポートします。次に例を示します。

    import java.sql.*;
    import java.math.*; // if needed
    

    OracleDataSourceを使用するには、次のように入力する必要があります。

    import oracle.jdbc.pool.OracleDataSource;
  2. OracleDataSourceインスタンスを作成します。

    OracleDataSource ods = new OracleDataSource();
  3. デフォルトのプロパティを使用しない場合は、必要なプロパティを設定します。JDBCドライバごとに異なる接続URLを使用する必要があります。

    ods.setUser("my_user");
    ods.setPassword("my_password");

    JDBC OCIドライバの場合

    Bequeathed接続を確立するには、URLを次のように設定します。

    ods.setURL("jdbc:oracle:oci:@");

    リモート接続を確立するには、URLを次のように設定します。

    ods.setURL("jdbc:oracle:oci:@<database>");

    <database>は、TNSEntryNameまたはtnsnames.oraに定義されているSQL*Netの名前/値ペアです。

    JDBC Thinドライバまたはサーバー側Thinドライバの場合

    ods.setURL("jdbc:oracle:thin:@<database>");

    <database>は、//<host>: <port>/<service_name>形式の文字列、SQL*Netの名前/値ペア、またはTNSEntryNameです。

    サーバー側JDBC内部ドライバの場合

    ods.setURL("jdbc:oracle:kprb:");

    後続の「:」が必要であることに注意してください。サーバー側内部ドライバを使用する場合は、常に実行中のデータベースに接続します。また、次のように指定できます。

    Connection conn =
    new oracle.jdbc.OracleDriver().defaultConnection();
  4. OracleDataSourceクラスに定義されているgetConnection()メソッドを使用して、データベースへの接続をオープンします。

    Connection conn = ods.getConnection();

以前のoracle.jdbc.driverパッケージの廃止

Oracle9iからは、JDBCへのOracleの拡張機能はoracle.jdbcパッケージで提供されます。このパッケージには、java.sql内のクラスとインタフェースでパブリックJDBC APIが指定されるのと同様の方法で、Oracleの拡張機能を指定するクラスとインタフェースが含まれています。

9iの初期バージョン以降は、oracle.jdbc.driverパッケージの使用が廃止されています。コードでは、かわりにoracle.jdbcパッケージを使用してください。Oracle9i以降の新機能には、oracle.jdbc.driverパッケージの使用との互換性がありません。下位互換性を提供するために以前のリリースの古いoracle.jdbc.driverパッケージも引き続きサポートしますが、これまで明言してきたように、このパッケージはOracle JDBC 11R1で廃止されました。古いoracle.jdbc.driverパッケージを使用する既存のアプリケーションが残っている場合は、Oracle JDBC 11R1を使用するように変換する必要があります。

ソース内でoracle.jdbc.driverをoracle.jdbcで置き換えて再コンパイルするだけで、コードを変換できます。この操作は、ピース単位では実行できません。アプリケーションで参照されるクラスとインタフェースをすべて変換する必要があります。oracle.jdbcに同じ名前のタイプがないoracle.jdbc.driverのクラスまたはメソッドをアプリケーションが参照している場合、そのタイプまたはメソッドはユーザー向けに作成されたものではなく、別の解決策を見つける必要があります。

Javaストアド・プロシージャ

OracleのObjectを使用したコールインとインスタンス・メソッドの例は、次のファイルにあります。

[ORACLE_HOME]/javavm/demo/demo.zip

このファイルを解凍すると、次のディレクトリに例が抽出されます。

[ORACLE_HOME]/javavm/demo/examples/jsp

既知の不具合

Oracle Bug#4390875

Thinドライバは、AL32UTF8のデータベースで、OracleResultSet.getString()の無効な文字に対してNullPointerExceoptionをスローします。

Oracle Bug#4689310

パスワードが個別に指定されていると、Thinドライバのプロキシ認証が失敗します。

Oracle Bug#5609480

バッチの実行時、getUpdateCountで不正な値が戻されます。

Oracle Bug#6200206

AL16UTF16からUTF16への変換で、サロゲート文字が区別されます。

Oracle Bug#6208793

カーソルとしてフェッチされた場合、thinとociではisBeforeFirstの動作が異なります。

Oracle Bug#6275369

JDBC Thinで、IOExceptionのソケットが閉じられません。

Oracle Bug#6282527

CachedRowsetを使用して挿入されたNullは、再度選択しないと削除できません。

Oracle Bug#6312064

9i以降、日付コンポーネントを01-Jan-1900に設定するために使用される挿入操作で、データベースにTime値をバインドすると、メソッドjava.sql.Time().getTime()により日付コンポーネントが切り捨てられません。
ただし、JDBCの再構築中、10gではこの動作が変更され、日付コンポーネントはリセットされませんでした。これにより、9iのユーザーに回帰が発生していました。

デフォルトで値を01-Jan-1900にリセットすると、これまで4年間フラグを使用してきた10gのユーザーに回帰が発生します。
そのため、ドライバにTimeの日付コンポーネントを01-Jan-1900に設定することを強制する新しい接続フラグoracle.jdbc.use1900AsYearForTimeが導入されました。このフラグのデフォルト値はfalseです。

Oracle Bug#6342068

妥当性を確認せずに、サーバーにユーザー入力が渡されます。

Oracle Bug#6394952

接続でORA-3113が発生すると、JDBCではユーザーが接続を閉じられなくなります。

Oracle Bug#6396242

バッチ・サイズが大きい場合、JDBCの使用中にArrayOutOfBoundsExceptionが発生します。

Oracle Bug#6443045

Null属性がバインドされた構造体の読取り中に、ORA-00600が発生します。

Oracle Bug#6474141

Nullの列に大量のメモリーが使用されます。

Oracle Bug#6491743

プールされた接続にセーブポイントを使用するとSQL例外が発生します。

Oracle Bug#6522973

checkErrorからのOCIドライバの使用中にNullPointerExceptionが発生します。

Oracle Bug#6525017

oracle.sql.Datumサブクラスのインスタンスをシリアライズすると、例外として表示されます。

Oracle Bug#6362104

ロード中に、JDBCドライバによりMalformedObjectExceptionまたはInstanceAlreadyExistsExceptionがスローされます。

Oracle Bug#6445341

データベースとの通信中に、JDBCメソッドNamespace.setAttributeのDMSバージョンによりNullPointerExceptionがスローされます。

Oracle Bug#6459503

DatabaseMetadata.getFunctionsにより戻される結果セットに、FUNCTION_TYPE列が含まれません。

Oracle Bug#6668623

JDBCドライバにより、大量のメモリーが消費されます。アプリケーションはOracle JDBCの暗黙的文キャッシュを使用します。このキャッシュには多数のオープン接続が含まれており、使用されるのは常に少数の接続のみです。その他すべての接続は使用されず、それらの接続内の文はすべてクローズされています。

Oracle Bug#6764986

パブリック・コール専用に構成されている場合でも、パブリックAPIを持つメッソドに対する4つのJDBC内部コールがトレース・ログに表示されます。

Oracle Bug#2475998

setIncludeSynonymsがtrueの場合、DatabaseMetaData.getColumnsに使用される問合せが非常に遅くなります。

Oracle Bug#6496226

ストリームに書き込まれたバッファのサイズがMB単位の場合、java.sql.Blob.setBinaryStreamから取得したストリームと、CLob.setCharacterStreamおよびsetAsciiStreamの使用が遅くなります。

Oracle Bug#6661592

DatabaseMetaData.getColumnsにより、シノニムのスキーマではなく、ターゲット表のスキーマが戻されます。

Oracle Bug#6902740

InputStreamsおよびReadersのバッファ・サイズは、サイズが32KBより大きいユーザー読取りコールのサイズに適合します。

Oracle Bug#5904762

コミット中に、ネットワークの使用およびRDBMSリソースが過剰になります。

Oracle Bug#6632928

OracleConnection.getEncryptionAlgorithmNameにより、接続でSSLの使用時に使用されていた暗号が戻されません。

Oracle Bug#6654960

orai18n.jarがクラスパスに含まれていない場合、AQ通知イベントで文字列が正しく処理されません。

Oracle Bug#6655200

PKCS12ウォレットを使用している場合は、OracleのPKIプロバイダを使用する必要があります。java.securityを使用して静的に有効化されている場合、Javaコードでインスタンス化する必要もあります。インスタンス化しないと使用できません。これは不具合で、ユーザー・コードではなくドライバによりインスタンス化する必要があります。

Oracle Bug#6658080

接続プロパティoracle.net.wallet_locationが適切に処理されません。

Oracle Bug#6670871

Thinドライバにより、正しいデータベース・バージョンが戻されません。

Oracle Bug#6749320

クライアントのタイムゾーンがセッションのタイムゾーンと異なる場合、夏時間の変更時期にタイムスタンプ値が不適切になります。

Oracle Bug#6870832

前述のOracle Bug#6749320と同様ですが、TIMESTAMP WITH LOCAL TIME ZONEも不適切になります。

Oracle Bug#6977990

取得されたタイムスタンプがセッションのタイムゾーンとオーバーラップする夏時間の場合、TIMESTAMPLTZの値が不適切になります。

Oracle Bug#7028625

夏時間の切替え時期に、取得された値を含むTIMESTAMPTZの値が不適切になります。

Oracle Bug#6068533

Thinドライバとの接続を確立する際、実際のエラー・コードがエラー・コード0でマスキングされます。

Oracle Bug#6109228

PreparedStatement.executeBatchのコール中、setQueryTimeoutが機能しません。

Oracle Bug#6203316

IOErrorが原因でoracle.jdbc.driver.ThrowSqlExceptionのNullPointerExceptionが発生します。

Oracle Bug#6365731

新しいパスワードに疑問符(?)が含まれる場合、パスワードを使用したALTER USERが失敗します。

Oracle Bug#6406402

setTypeMapにより変数が変更され、2つのエントリが追加されます。
この修正により、ドライバの動作が変更され、変数は取得ではなくコピーされます。一部のコードが機能しなくなります。新しい動作はJDBCの仕様に完全に準拠しており、ユーザー・コードを変更する必要があります。これは、ドライバにより変更が行われる場合、またはユーザー・コードによりgetTypeMapがコールされてマップが変更される場合を除き、ユーザー・コードによりsetTypeMapがコールされてマップが変更される場合に発生します。

Oracle Bug#6441084

ResultSetMetadata.getColumnTypeNameにより、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEが説明されません。

Oracle Bug#6453298

user.languageがsr(セルビア語)に設定されているとSQL例外が発生します。

Oracle Bug#6522392

DatabaseMetaData.getColumnsにより、NCHAR列に適切な長さが戻されません。

Oracle Bug#6761190

PrepraredStatement.executeBatchとともに使用すると、Statement.cancelが機能しません。

このリリースの既知の問題/制限事項

次のリストに、既知の問題または制限事項を示します。