5. JDBCデータソース

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

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

5.1.1. 注意事項

5.1.1.1. JTA連携時のJServerまたはOracleJVMのインストールについて
OracleのDataSourceを使用してJTA連携を行う場合は、Oracleのサーバ側にJServerまたはOracle JVMをインストールしておく必要があります。[ トラブルシューティング > 障害解析 >JDBCデータソース > Oracleでのトランザクション障害への対応 ] を参考にしてインストール状況を確認してください。
 
5.1.1.2. JTA連携時のテーブルへのアクセス権設定について
OracleのDataSourceを使用してJTA連携を行う場合は、Oracleのトランザクション制御用のテーブルへの適切なアクセス権設定を行う必要があります。[ トラブルシューティング >障害解析 > JDBCデータソース > Oracleでのトランザクションリカバリ障害への対応 ] を参考にしてアクセス権設定を行ってください。
 
5.1.1.3. Oracle10gのJDBCドライバ使用時のjava.lang.ExceptionInInitializerErrorについて
Oracle10gのJDBCドライバを使用してデータベースとの接続を行う場合に、java.lang.ExceptionInInitializerError が発生することがあります。発生した場合には、[ トラブルシューティング > 障害解析 >JDBCデータソース > Oracleでのセキュリティ障害への対応 ] を参考にして障害解析を行ってください。
 
5.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)が必要です。
※環境変数の設定方法の詳細は、[ 構築・運用 > システム環境変数 ] を参照してください。

 
5.1.1.5. JTA連携時の接続時ロードバランス機能のサポートについて
OracleのDaraSourceを使用してJTA連携を行う場合は、Oracleの接続時ロードバランス機能をサポートしません。トランザクションを実行したOracleサーバとは別のOracleサーバに対してコミットが発行されてしまうことがあるためです。そのため、"jdbc:oracle"で始まるJDBC URLに記述したアドレス情報の順序でフェールオーバ接続を行うようにしてください。または、[ その他の注意・制限事項 ] の内容をご確認の上、データソースタイプとして"JDBC"を指定してください。
 
5.1.1.6. Oracle11gのDataSource使用時のコネクションプール機能の動作について
Oracle11gのDataSourceを使用する場合に、コネクションプール機能が正常に動作しないことがあります。本問題に対する回避策などは、KROWN(ORACLE技術情報ページ)#126806にて公開されています。

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

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

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

5.1.2. 制限事項

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

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

5.2.1. 注意事項

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

5.2.2. 制限事項

特にありません。
 

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

5.3.1. 注意事項

5.3.1.1. 複数プロセスからの同一データベースへのアクセスについて
複数のアプリケーションプロセス(JavaVM)から、同じデータベースに対して同時にアクセスすることはできません。
 
5.3.1.2. 複数JDBCコネクション使用時の同一データベースへのアクセスについて
1つのアプリケーションプロセスから複数のJDBCコネクションを使用して同じデータベースにアクセスする場合、networkProtocolプロパティの値("rmi"か指定なし)を全て同じにしてください。
 
5.3.1.3. networkProtocolプロパティの値として"rmi"を使用する場合について
CloudscapeのDataSourceを使用し、networkProtocolプロパティの値として"rmi"を使用する場合、J2EE 1.3にバンドルされていたバージョン4.0以降のCloudscapeをご利用ください。
 
5.3.1.4. networkProtocolプロパティの値として"rmi"を使用する場合について
UNIX上でデータベースファイルに直接アクセスする場合(networkProtocolプロパティの値に何も設定しない場合)、アプリケーションプロセス終了時にプロセス間排他制御を行うためのロックファイルが残ったままとなります。そのままアプリケーションプロセスを起動すると、最初のJDBCコネクション取得時にWarningメッセージが標準出力に出力されます。これを回避するためには、アプリケーションプロセスの終了時にデータベースのshutdownを実施してください。データベースのshutdownを行うためには、接続文字列として"jdbc:cloudscape:db名;shutdown=true"を使用してJDBCコネクションを取得してください。
 
5.3.1.5. UNIX上でのCloudscape利用について
UNIX上でCloudscapeをご利用になる場合、データベースファイルへのアクセス権の関係で、アプリケーションプロセスやCloudscapeのRmiJdbcサーバからデータベースファイルにアクセスできないことがあります。アクセス権をご確認頂き、必要に応じてアクセス権の変更を行ってください。
 

5.3.2. 制限事項

特にありません。
 

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

5.4.1. 注意事項

5.4.1.1. JTA連携時のSybaseインストールについて
SybaseのDataSourceを使用してJTA連携を行う場合は、Sybase Adaptive Server EnterpriseのDTMオプションライセンスをインストールしてください。
 
5.4.1.2. JTA連携時の"enable_dtm"パラメータについて
SybaseのDataSourceを使用してJTA連携を行う場合は、sp_configureコマンドで、"enable_dtm"パラメータの値を 0 から 1(on) に変更してください。
 
5.4.1.3. JTA連携時の"dtm detachtimeout period"パラメータについて
SybaseのDataSourceを使用してJTA連携を行う場合は、sp_configureコマンドで、"dtm detachtimeout period"パラメータの値を 0 から一定の値(例えばトランザクションのタイムアウト値以上の値)に変更してください。この値を変更しないと、トランザクションが残ってしまうことがあります。
 
5.4.1.4. JTA連携時の"dtm_tm_role"権限について
SybaseのDataSourceを使用してJTA連携を行う場合は、分散トランザクションに参加する全てのユーザに"dtm_tm_role"権限を付与してください。

5.4.2. 制限事項

特にありません。
 

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

5.5.1. 注意事項

特にありません。
5.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 のいずれにも接続することができます。

5.5.2. 制限事項

特にありません。
 

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

5.6.1. 注意事項

5.6.1.1. コネクション数の制限について
データソースタイプ"JDBCEX_PostgreSQL"のコネクションは、1つのトランザクション内で1つだけしか利用できません。このため、トランザクションに参加するアプリケーションでは、そのアプリケーションの処理や、アプリケーションから利用するフレームワークやユーティリティクラスなどにおいて、コネクション取得を何度も行わないように注意する必要があります。
5.6.1.2. 2フェーズコミット実行時の"max_prepared_transactions"パラメータについて
PostgreSQL 8.3でデフォルト値 5 であった"max_prepared_transactions"パラメータが、PostgreSQL 8.4以降で デフォルト値 0 に変更されています。いずれのバージョンにおいても、2フェーズコミットの実行に失敗する場合、"max_prepared_transactions"パラメータの値が不足しているようであれば、postgresql.confにて該当のパラメータに大きい値を設定してください。

5.6.2. 制限事項

特にありません。
 

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

5.7.1. 注意事項

特にありません。

5.7.2. 制限事項

特にありません。

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

5.8.1. 注意事項

5.8.1.1. 1フェーズコミットリソースのJTA連携時の制限について
データソースタイプに"JDBC"を指定してJTAと連携する場合、データソースタイプ"JDBC"のコネクションは、設定内容の違いを問わず、1つのトランザクション内で1つだけしか利用できません。このため、データソースタイプ"JDBC"のコネクションだけで2フェーズコミットを行うことはできません。例えば、ACOS Access ToolkitのJDBCドライバと一緒に、データソースタイプ"JDBC"ではないOralceのDataSourceを利用することで、2フェーズコミットを実施することができます。
 
5.8.1.2. 1フェーズコミットリソースでコミットが失敗した場合について
データソースタイプ"JDBC"のコネクションに対するコミットが失敗した場合の結果は、通常ロールバックされた状態になりますが、データベースサーバ側でのコミット処理完了後に通信障害が発生した場合など、稀にコミットされていることがあります。対策としては、autoRecoveryOnOnePhaseCommitプロパティにfalseを設定することで自動的にロールバックされないようにしておき、コミットの結果をJDBCドライバやデータベースが提供する運用操作や例外メッセージに従って確認した上で、トランザクションを復旧してください。トランザクションの復旧操作については、 [ 構築・運用 > ドメインの拡張機能 > Transactionサービス ] を参照してください。
 
5.8.1.3. java.sql.Statement.getConnectionメソッドで返却されたjava.sql.Connectionのcloseメソッド呼び出しについて
データソースタイプが"JDBC"の場合に、java.sql.Statement.getConnectionメソッドで返却されたjava.sql.Connectionのcloseメソッドを呼び出すと、JDBCコネクションは物理的に切断されます。また、解放されないことがあります。
 
5.8.1.4. 復旧に時間がかかる障害が発生した際のJDBCコネクションのクローズについて
WebOTX V8.3で、無応答障害など、復旧に時間がかかる障害が発生した際に、コネクションプール内の JDBCコネクションのクローズ処理をアプリケーションの動作スレッドとは別のスレッドで非同期に行うようにデフォルトの動作を変更しました。 デフォルトでは、60秒以上かかる障害を復旧に時間がかかる障害とみなします。この時間を変更する場合は、JDBCデータソースのasyncCloseOnFailureプロパティを変更してください。

5.8.1.5. トランザクションの実行中のsetAutoCommit(true)の呼び出しについて
トランザクションの実行中はsetAutoCommit(true)は呼び出せません。 自動変更機能の詳細は、[ 入門ガイド > 提供機能 > JDBCデータソース > コネクション制御機能 ]を参照してください。
 
5.8.1.6. Java11ご利用の場合のクラスパス設定について
Java11をご利用の場合にJDBCドライバのjarをクラスパスに追加する方法は、 [ リファレンス > 設定 > JDBCデータソース > クラスパス設定 > Java11以降におけるクラスパス設定 ] をご参照ください。
5.8.1.7. パスワードが記載されているファイルの削除について
次のファイルに一般的な初期パスワードが記載されています。

${AS_INSTALL}/config/jdbc配下の次のファイル
dsadm.properties
db2.properties.template
derby.properties.template
ipxda.properties.template
jdbc.properties.template
oracle.properties.template
postgresql.properties.template
sqlserver.properties.template

dsadm.propertiesはJDBCデータソースの登録、削除などを行うdsadmコマンド利用時の初期パスワード定義のために用意しています。また、その他のtemplateファイルは、JDBCデータソースを登録するための各データベースの設定です。その中で、データベースの一般的なユーザ名とパスワードを記載しています。dsadmコマンドは、ユーザ名やパスワードの指定が不要だったWebOTX V5当時のコマンドの互換用です。そのため、ユーザ名やパスワードを指定せずに実行できるように 、dsadm.propertiesを用意しています。ユーザ名やパスワードを引数で指定することもできますので、パスワード記載箇所を削除するか、もしくはファイルごと削除して問題ありません。その他のtemplateファイルについても、dsadmコマンドを利用しないということであれば、削除して問題ありません。 dsadmコマンドの詳細については、[コマンドリファレンス > JDBCデータソース > dsadm]をご参照ください。
5.8.1.8. クエリタイムアウトの設定について
java.sql.Statementに指定するクエリタイムアウト[queryTimeout]を設定するためには、JDBCコネクションをラップしている必要があるため、例えば、コネクションのガベージコレクト機能の動作オプション[checkGarbageOption]を rollbackにするなどしてラップするよう設定を変更する必要があります。 ただし、こちらJDBCドライバベンダのJDBCコネクションの取得」に示す条件を全て満たす場合はコネクションをラップしないため、ご注意ください。

クエリタイムアウトについては、次の箇所に説明があります。
[ リファレンス > 設定 > JDBCデータソース > コネクション制御設定項目一覧 >
5.8.1.9. 各JDBCドライバのJDKの対応バージョンや注意・制限事項等について
各JDBCドライバのリファレンスやREADMEファイルを必ず参照し、JDKの対応バージョンや注意・制限事項等をご確認ください。

5.8.2. 制限事項

5.8.2.1. java.sql.Statement.getConnectionメソッドで返却されたjava.sql.ConnectionのsetAutoCommitメソッド呼び出しについて
java.sql.Statement.getConnectionメソッドで返却されたjava.sql.Connection (JDBCドライバベンダのJDBCコネクション) のsetAutoCommitメソッドを直接呼び出さないでください。呼び出すと、JDBCデータソースによるautoCommitモードの自動変更が正しく行われません。 自動変更機能の詳細は、[ 入門ガイド > 提供機能 > JDBCデータソース > コネクション制御機能 ]を参照してください。
 
5.8.2.2. データソースタイプが"JDBC"の場合のJDBCリソースとしての登録について
データソースタイプが"JDBC"の場合は、TransactionサービスのJDBCリソースとして登録しないでください。JTAのインタフェースの一部を実装していないため、Transactionサービスによるトランザクションのリカバリ処理で必ずエラーが発生します。