6. JDBCデータソース

JDBCデータソースを利用する際の注意制限事項について説明します。

6.1. Oracleご利用時の注意・制限事項

6.1.1. 注意事項

6.1.1.1. JTA連携時のJServerまたはOracleJVMのインストールについて

OracleのDataSourceを使用してJTA連携を行う場合は、Oracleのサーバ側にJServerまたはOracle JVMをインストールしておく必要があります。[ トラブルシューティングガイド > 2. 障害解析 > 2.5. 機能別リンク > 2.5.4. JDBCデータソース > Oracleでのトランザクション障害への対応 ] を参考にしてインストール状況を確認してください。
 

6.1.1.2. JTA連携時のテーブルへのアクセス権設定について

OracleのDataSourceを使用してJTA連携を行う場合は、Oracleのトランザクション制御用のテーブルへの適切なアクセス権設定を行う必要があります。[ トラブルシューティングガイド > 2. 障害解析 > 2.5. 機能別リンク > 2.5.4. JDBCデータソース > Oracleでのトランザクションリカバリ障害への対応 ] を参考にしてアクセス権設定を行ってください。
 

6.1.1.3. Oracle10gのJDBCドライバ使用時のjava.lang.ExceptionInInitializerErrorについて

Oracle10gのJDBCドライバを使用してデータベースとの接続を行う場合に、java.lang.ExceptionInInitializerError が発生することがあります。発生した場合には、[ トラブルシューティングガイド > 2. 障害解析 > 2.5. 機能別リンク > 2.5.4. JDBCデータソース > Oracleでのセキュリティ障害への対応 ] を参考にして障害解析を行ってください。
 

6.1.1.4. OCI JDBCドライバ使用時の設定について

OracleのOCI JDBCドライバを使用するためには、次の設定を行ってください。
表6.1-1
OS 設定
Windowsの場合 環境変数PATHに、%ORACLE_HOME%\binディレクトリを追加してください。
HP-UXの場合 環境変数SHLIB_PATHに、$ORACLE_HOMEのlibディレクトリを追加してください。
Oracleの、環境変数ORACLE_HOMEとNLS_LANGの設定を行ってください。

※WebOTX運用ユーザに対する、$ORACLE_HOMEのlibディレクトリおよびライブラリへの参照権(r)、実行権(x)が必要です。
※環境変数の設定方法の詳細は、[ ドメイン構築・基本設定ガイド > システム環境変数 ] を参照してください。
SolarisとLinuxの場合 環境変数LD_LIBRARY_PATHに、$ORACLE_HOMEのlibディレクトリを追加してください。
Oracleの、環境変数ORACLE_HOMEとNLS_LANGの設定を行ってください。

※WebOTX運用ユーザに対する、$ORACLE_HOMEのlibディレクトリおよびライブラリへの参照権(r)、実行権(x)が必要です。
※環境変数の設定方法の詳細は、[ ドメイン構築・基本設定ガイド > システム環境変数 ] を参照してください。

 

6.1.1.5. JTA連携時の接続時ロードバランス機能のサポートについて

OracleのDaraSourceを使用してJTA連携を行う場合は、Oracleの接続時ロードバランス機能をサポートしません。トランザクションを実行したOracleサーバとは別のOracleサーバに対してコミットが発行されてしまうことがあるためです。そのため、"jdbc:oracle"で始まるJDBC URLに記述したアドレス情報の順序でフェールオーバ接続を行うようにしてください。または、[ 6.9. その他の注意・制限事項 ] の内容をご確認の上、データソースタイプとして"JDBC"を指定してください。
 

6.1.1.6. Oracle11gのDataSource使用時のコネクションプール機能の動作について

Oracle11gのDataSourceを使用する場合に、コネクションプール機能が正常に動作しないことがあります。本問題に対する回避策などは、KROWN(ORACLE技術情報ページ)#126806にて公開されています。

(ご参考)
    KROWNは以下のURLにて確認可能です。
        https://support.oracle.com/
    ※確認するには、事前に保守締結が必要です。

上記情報の確認ならびに回避策であるパッチの入手方法につきましては、ORACLE製品保守締結を前提に購入元のベンダに問合せください。

または、[ 6.9. その他の注意・制限事項 ] の内容をご確認の上、データソースタイプとして"JDBC"を指定してください。
 

6.1.2. 制限事項

6.1.2.1. oracle.ucp.jdbc.ValidConnectionにキャスト可能なJDBCコネクションクラスの返却について

OracleのUniversal Connection Pool (UCP)を使用する場合、JDBCデータソースでは、oracle.ucp.jdbc.ValidConnectionにキャスト可能なJDBCコネクションクラスを返却できません。直接の原因は、JDBCデータソースがoracle.ucp.jdbc.PoolXADataSourceImplクラスを利用しているためです。

6.2. SequeLinkご利用時の注意・制限事項

6.2.1. 注意事項

6.2.1.1. 初期バージョンSequeLink 5.0のHP-UX上で動作ついて

初期バージョンのSequeLink 5.0(日本語版)は、HP-UX上で動作しません。US版のSequeLink 5.2に対応したSequeLink 5.0(日本語版)の最新バージョンをご使用ください。詳細は、DataDirect Technologies社にお問い合わせください。

6.2.2. 制限事項

特にありません。
 

6.3. Cloudscapeご利用時の注意・制限事項

6.3.1. 注意事項

6.3.1.1. 複数プロセスからの同一データベースへのアクセスについて

複数のアプリケーションプロセス(JavaVM)から、同じデータベースに対して同時にアクセスすることはできません。
 

6.3.1.2. 複数JDBCコネクション使用時の同一データベースへのアクセスについて

1つのアプリケーションプロセスから複数のJDBCコネクションを使用して同じデータベースにアクセスする場合、networkProtocolプロパティの値("rmi"か指定なし)を全て同じにしてください。
 

6.3.1.3. networkProtocolプロパティの値として"rmi"を使用する場合について

CloudscapeのDataSourceを使用し、networkProtocolプロパティの値として"rmi"を使用する場合、J2EE 1.3にバンドルされていたバージョン4.0以降のCloudscapeをご利用ください。
 

6.3.1.4. networkProtocolプロパティの値として"rmi"を使用する場合について

UNIX上でデータベースファイルに直接アクセスする場合(networkProtocolプロパティの値に何も設定しない場合)、アプリケーションプロセス終了時にプロセス間排他制御を行うためのロックファイルが残ったままとなります。そのままアプリケーションプロセスを起動すると、最初のJDBCコネクション取得時にWarningメッセージが標準出力に出力されます。これを回避するためには、アプリケーションプロセスの終了時にデータベースのshutdownを実施してください。データベースのshutdownを行うためには、接続文字列として"jdbc:cloudscape:db名;shutdown=true"を使用してJDBCコネクションを取得してください。
 

6.3.1.5. UNIX上でのCloudscape利用について

UNIX上でCloudscapeをご利用になる場合、データベースファイルへのアクセス権の関係で、アプリケーションプロセスやCloudscapeのRmiJdbcサーバからデータベースファイルにアクセスできないことがあります。アクセス権をご確認頂き、必要に応じてアクセス権の変更を行ってください。
 

6.3.2. 制限事項

特にありません。
 

6.4. Sybase Adaptive Server Enterpriseご利用時の注意・制限事項

6.4.1. 注意事項

6.4.1.1. JTA連携時のSybaseインストールについて

SybaseのDataSourceを使用してJTA連携を行う場合は、Sybase Adaptive Server EnterpriseのDTMオプションライセンスをインストールしてください。
 

6.4.1.2. JTA連携時の"enable_dtm"パラメータについて

SybaseのDataSourceを使用してJTA連携を行う場合は、sp_configureコマンドで、"enable_dtm"パラメータの値を 0 から 1(on) に変更してください。
 

6.4.1.3. JTA連携時の"dtm detachtimeout period"パラメータについて

SybaseのDataSourceを使用してJTA連携を行う場合は、sp_configureコマンドで、"dtm detachtimeout period"パラメータの値を 0 から一定の値(例えばトランザクションのタイムアウト値以上の値)に変更してください。この値を変更しないと、トランザクションが残ってしまうことがあります。
 

6.4.1.4. JTA連携時の"dtm_tm_role"権限について

SybaseのDataSourceを使用してJTA連携を行う場合は、分散トランザクションに参加する全てのユーザに"dtm_tm_role"権限を付与してください。

6.4.2. 制限事項

特にありません。
 

6.5. Microsoft SQL Serverご利用時の注意・制限事項

6.5.1. 注意事項

特にありません。

6.5.1.1. JTA連携時の分散トランザクション制御用プログラムのインストールについて

Microsoft SQL ServerのDataSourceを使用してJTA連携を行う場合は、各JDBC ドライバの分散トランザクション制御用のプログラムをインストールしてください。 SQL Server 2005 JDBC Driver や SQL Server JDBC Driver 2.0 を使用する場合は、MS DTC インタフェース(sqljdbc_xa.dll および xa_install.sql)をインストールしてください。 SQL Server JDBC Driver 2.0 では、SQL Server 2005 / SQL Server 2008 のいずれにも接続することができます。

6.5.2. 制限事項

特にありません。
 

6.6. DB2ご利用時の注意・制限事項

6.6.1. 注意事項

6.6.1.1. java.sql.Connectionインタフェースのcommitやrollbackメソッドの呼び出し漏れについて

java.sql.Connectionインタフェースのcommitやrollbackメソッドの呼び出し漏れがないようにしてください。呼び出し漏れがあると、java.sql.Connection.closeメソッド呼び出しが失敗し、JDBCコネクションの状態が使用中のままになります。

6.6.2. 制限事項

特にありません。
 

6.7. PostgreSQLご利用時の注意・制限事項

6.7.1. 注意事項

6.7.1.1. コネクション数の制限について

データソースタイプ"JDBCEX_PostgreSQL"のコネクションは、1つのトランザクション内で1つだけしか利用できません。このため、トランザクションに参加するアプリケーションでは、そのアプリケーションの処理や、アプリケーションから利用するフレームワークやユーティリティクラスなどにおいて、コネクション取得を何度も行わないように注意する必要があります。

6.7.1.2. 2フェーズコミット実行時の"max_prepared_transactions"パラメータについて

PostgreSQL 8.3でデフォルト値 5 であった"max_prepared_transactions"パラメータが、PostgreSQL 8.4以降で デフォルト値 0 に変更されています。いずれのバージョンにおいても、2フェーズコミットの実行に失敗する場合、"max_prepared_transactions"パラメータの値が不足しているようであれば、postgresql.confにて該当のパラメータに大きい値を設定してください。

6.7.2. 制限事項

特にありません。
 

6.8. Apache Derbyご利用時の注意・制限事項

特にありません。
 

6.9. その他の注意・制限事項

6.9.1. 注意事項

6.9.1.1. 1フェーズコミットリソースのJTA連携時の制限について

データソースタイプに"JDBC"を指定してJTAと連携する場合、データソースタイプ"JDBC"のコネクションは、設定内容の違いを問わず、1つのトランザクション内で1つだけしか利用できません。このため、データソースタイプ"JDBC"のコネクションだけで2フェーズコミットを行うことはできません。例えば、ACOS Access ToolkitのJDBCドライバと一緒に、データソースタイプ"JDBC"ではないOralceのDataSourceを利用することで、2フェーズコミットを実施することができます。
 

6.9.1.2. 1フェーズコミットリソースでコミットが失敗した場合について

データソースタイプ"JDBC"のコネクションに対するコミットが失敗した場合の結果は、通常ロールバックされた状態になりますが、データベースサーバ側でのコミット処理完了後に通信障害が発生した場合など、稀にコミットされていることがあります。対策としては、autoRecoveryOnOnePhaseCommitプロパティにfalseを設定することで自動的にロールバックされないようにしておき、コミットの結果をJDBCドライバやデータベースが提供する運用操作や例外メッセージに従って確認した上で、トランザクションを復旧してください。トランザクションの復旧操作については、 [ ドメイン構築・基本設定ガイド > 7. WebOTXの内部サービス > 7.4. Transactionサービス ] を参照してください。
 

6.9.1.3. java.sql.Statement.getConnectionメソッドで返却されたjava.sql.Connectionのcloseメソッド呼び出しについて

データソースタイプが"JDBC"の場合に、java.sql.Statement.getConnectionメソッドで返却されたjava.sql.Connectionのcloseメソッドを呼び出すと、JDBCコネクションは物理的に切断されます。また、解放されないことがあります。
 

6.9.1.4. 復旧に時間がかかる障害が発生した際のJDBCコネクションのクローズについて

WebOTX V8.3で、無応答障害など、復旧に時間がかかる障害が発生した際に、コネクションプール内の JDBCコネクションのクローズ処理をアプリケーションの動作スレッドとは別のスレッドで非同期に行うようにデフォルトの動作を変更しました。 デフォルトでは、60秒以上かかる障害を復旧に時間がかかる障害とみなします。この時間を変更する場合は、JDBCデータソースのasyncCloseOnFailureプロパティを変更してください。

6.9.1.5. トランザクションの実行中のsetAutoCommit(true)の呼び出しについて

トランザクションの実行中はsetAutoCommit(true)は呼び出せません。 自動変更機能の詳細は、[ 製品構成と提供機能 > 3. 提供機能 > 3.6. 提供サービス > 3.6.3. JDBCデータソース > 3.6.3.4. コネクション制御機能 ]を参照してください。
 

6.9.1.6. 各JDBCドライバのJDKの対応バージョンや注意・制限事項等について

各JDBCドライバのリファレンスやREADMEファイルを必ず参照し、JDKの対応バージョンや注意・制限事項等をご確認ください。

6.9.2. 制限事項

6.9.2.1. java.sql.Statement.getConnectionメソッドで返却されたjava.sql.ConnectionのsetAutoCommitメソッド呼び出しについて

java.sql.Statement.getConnectionメソッドで返却されたjava.sql.Connection (JDBCドライバベンダのJDBCコネクション) のsetAutoCommitメソッドを直接呼び出さないでください。呼び出すと、JDBCデータソースによるautoCommitモードの自動変更が正しく行われません。 自動変更機能の詳細は、[ 製品構成と提供機能 > 3. 提供機能 > 3.6. 提供サービス > 3.6.3. JDBCデータソース > 3.6.3.4. コネクション制御機能 ]を参照してください。
 

6.9.2.2. データソースタイプが"JDBC"の場合のJDBCリソースとしての登録について

データソースタイプが"JDBC"の場合は、TransactionサービスのJDBCリソースとして登録しないでください。JTAのインタフェースの一部を実装していないため、Transactionサービスによるトランザクションのリカバリ処理で必ずエラーが発生します。