3.3.2 複数接続機能
- 〈この項の構成〉
(1) 機能概要
複数接続機能は,HiRDBクライアントで一つのUAPから,XDM/RD E2に対して複数のCONNECTを別々に実行できるようにする機能です。
複数接続機能のそれぞれの接続は独立していて,DBコネクションサーバのタスクは接続ごとに割り当てられて別々のトランザクション(別々のアクティビティ)として処理されるので,UAPは複数のSQL文を同時に実行できます。一つのUAPから複数接続できるので,実行するUAPの数を削減でき,全体としてのUAPのメモリ所要量を削減できます。
XDM/RD E2の最大接続数は,接続ごとに別ユーザとしてカウントされるので,ユーザ数の上限ではなく,同時にCONNECTする接続数の上限となります。
複数接続機能の特長を次に示します。
-
接続ごとに,異なるユーザID,パスワードを使用できます。
-
接続ごとに,複数のXDM/RD E2へ接続できます。環境変数グループを使用する場合は,ほかのHiRDBサーバと同時に接続することもできます。
複数接続機能の処理概要を図「複数接続機能の処理概要(マルチスレッドを使用しない場合)」および図「複数接続機能の処理概要(マルチスレッドを使用する場合)」に示します。
(2) コーディング例
複数接続機能を使用した場合のUAPのコーディング例については,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。
(3) 規則
-
複数接続機能を使用する場合は,UAPのコンパイルおよびリンケージ時に専用のライブラリを指定する必要があります。
複数接続機能を使用する場合のコンパイルとリンケージについては,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。
-
X/Open XAインタフェース環境下での複数接続機能については,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。
-
複数接続機能用ライブラリを使用するUAPでは,一つの接続を保持したままスレッドを分岐し,そのスレッドがSQLを実行する場合,ほかのSQLを発行するスレッドとの間で処理のシリアライズを必要とします。したがって,同一接続に対するSQLは同時に発行できません。異なる接続に対するSQLは同時に発行できます。
-
ALLOCATE CONNECTION HANDLE,FREE CONNECTION HANDLEのエラー情報を参照する場合,SQLCODE,SQLERRMではなく,リターンコード受け取り変数の値を参照してください。リターンコード受け取り変数については,マニュアル「HiRDB Version 9 SQLリファレンス」を参照してください。
-
各接続で発行するSQLは,XDM/RD E2上ではそれぞれ別のアクティビティとして扱われます。
このため,ほかの接続で排他されている資源を別の接続で排他しようとした場合に,永久的な排他待ちになることがありますので注意してください※1。
また,スレッド間で発行するSQLの組み合わせによってデッドロックエラーになる場合がありますので注意してください※2。
- 注※1 例を次に示します。
-
1. 接続1が表1を更新
2. 同一スレッド内で,接続2が表1を更新
項番2.の操作が項番1.の操作を排他待ちする場合があり,この場合時間監視の制限値まで待ち続けることになります。
- 注※2 例を次に示します。
-
1. スレッド1で表1を更新
2. スレッド2で表2を更新
3. スレッド2で表1を更新
4. スレッド1で表2を更新
項番3.の操作が項番1.の操作を排他待ちし,項番4.の操作が項番2.の操作を排他待ちする場合があり,デッドロックとなります。
-
SQL連絡領域を参照する場合,直接SQLCAを参照しないで,SQLCで始まる連絡領域名を参照してください。
(4) プラットフォームによる注意事項
複数接続機能を使用する場合,UAPが動作するプラットフォームによって次のことに注意する必要があります。次の注意が守られていない場合,UAPの実行時に不正な動作をする可能性があります。
(a) UNIXの場合
複数接続機能は,マルチスレッド(DCEスレッド,リアルスレッド)およびシングルスレッド対応のUAPで使用できます。したがって,マルチスレッド対応のUAPで複数接続機能を使用する場合,HiRDBでのUAPの開発知識のほかに,DCEスレッド,リアルスレッドを用いたUAPの開発知識を必要とします。
(b) HP-UXの場合
UAP開発では,HiRDB/Developer's Kitのほかに,HP-UXのDCEアプリケーションの開発キットをインストールする必要があります。
-
UAPの各ソースファイルは,HP-UXのDCEアプリケーションの開発キットのインストールの際に作成される,pthread.hを必ずインクルードしてください。
-
UAPのリンケージの際に使用する,Cのランタイムライブラリにはlibc_r.slを指定してください。このとき,DCEのライブラリ(libdce.sl)の指定も必要です。
(c) Windowsの場合
複数接続機能は,マルチスレッド対応UAPでだけ使用できます。したがって,UAPのコンパイルで使用するCのランタイムライブラリの指定は,マルチスレッド.DLLを選択してください(「コンパイルオプション:コード生成」で,「マルチスレッド.DLL」を指定します)。