スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
(a) 複数接続機能とは
複数接続機能は,HiRDBクライアントで一つのUAPから,HiRDBサーバに対して複数のCONNECTを別々に行えるようにする機能です。
複数接続機能のそれぞれの接続は独立していて,サーバプロセスは接続ごとに割り当てられて別々のトランザクションとして処理されるので,UAPは複数のSQL文を同時に実行できます。一つのUAPから複数接続できるので,実行するUAPの数を削減でき,全体としてのUAPのメモリ所要量を削減できます。
サーバの最大接続数は,接続ごとに別ユーザとしてカウントされるので,ユーザ数の上限ではなく,同時にCONNECTする接続数の上限となります。
複数接続機能の特長を次に示します。
- 接続ごとに,異なる認可識別子,パスワードを使用できます。
- 接続ごとに,異なるサーバマシンのサーバへ接続できるので,一つのUAPから複数のサーバマシンのサーバに同時に接続して,SQL文を実行できます。
- 複数接続機能は,クライアントライブラリを接続できるすべてのサーバに対して使用できます。
(b) X/Open XAインタフェース環境下での複数接続機能
X/Open XAインタフェース環境下で複数接続機能を使用すると,一つのトランザクションマネジャ(OpenTP1など)下のUAPから,XAインタフェースを使用して複数のHiRDBにアクセスできます。XAインタフェースを使用するので,同期をとって複数のHiRDBにアクセスしたトランザクション間の処理を制御できます。
xa_open()関数に指定するオープン文字列に,環境変数(クライアント環境定義)を設定したファイルの名称を指定します。xa_open()関数では,設定された環境変数に従ってHiRDBに接続します。なお,SQLの発行先は,xa_open()関数によって接続した接続先の中から選択できます。
X/Open XAインタフェース環境下での複数接続機能は,クライアントのプラットフォームが次の場合にだけ使用できます。
- HP-UX 11.0
- Solaris
- AIX
- Linux(シングルスレッド)
- Windows
複数接続機能の処理概要を図4-62〜図4-66に示します。
図4-62 複数接続機能の処理概要(マルチスレッドを使用しない場合)
図4-63 複数接続機能の処理概要(マルチスレッドを使用した場合)
- 注
- それぞれの接続が独立しているので,スレッドごとに同時にSQLを実行できます。
図4-64 複数接続機能の処理概要(スレッド間で接続を共有する場合)
- 注
- このような例の場合,スレッド1がCONNECT(#1)を実行する前に,スレッド2がSQL(#1)を実行したり,スレッド3がDISCONNECT(#1)を実行したりしないように,ユーザがスレッド間の処理の同期をとる必要があります。
図4-65 複数接続機能の処理概要(シングルスレッドのOLTP下で,X/Openに従ったAPIを使用したAPの場合)
- [説明]
- あらかじめ,OLTPシステムにはHiRDB1とHiRDB2を登録しておきます。
- OLTPシステムはtx_open()時に登録してあるすべてのHiRDBに接続します。SQLを実行するときに接続先を選択してください。
図4-66 複数接続機能の処理概要(マルチスレッドのOLTP下で,X/Openに従ったAPIを使用したAPの場合)
- [説明]
- あらかじめ,OLTPシステムにはHiRDB1とHiRDB2を登録しておきます。
- OLTPシステムはtx_begin()時に登録してあるすべてのHiRDBに接続します。SQLを実行するときに接続先を選択してください。それぞれのトランザクションが独立しているので,スレッドごとにSQLを同時実行できます。
(3) コーディング例
(a) 通常のUAP
複数接続機能を使用したUAPのコーディング例を図4-67,図4-68に示します。
図4-67 複数接続機能を使用したUAPのコーディング例(C言語の場合)
- [説明]
- 接続ハンドルの定義
- 接続ハンドルの取得
- 接続1のHiRDBの処理
- 接続2のHiRDBの処理
- 接続ハンドルの解放
図4-68 複数接続機能を使用したUAPのコーディング例(COBOL言語の場合)
- 注
- SQLは,SQL先頭子,及びSQL終了子も含めて,すべてB領域(第12欄〜72欄)に記述してください。
- [説明]
- 接続ハンドルの定義
- 接続ハンドルの取得
- 接続1のHiRDBの処理
- 接続2のHiRDBの処理
- 接続ハンドルの解放
(b) OLTP下でX/Openに従ったAPIを使用したUAP
OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例を図4-69,図4-70に示します。
図4-69 OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例(C言語の場合)
- [説明]
- あらかじめ,OLTPシステムにはHiRDB1(環境変数グループ識別子HDB1)とHiRDB2(環境変数グループ識別子HDB2)を登録しておきます。HiRDBのトランザクションマネジャへの登録については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
図4-70 OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例(COBOL言語の場合)
- 注
- SQLは,SQL先頭子,及びSQL終了子も含めて,すべてB領域(第12欄〜72欄)に記述してください。
- [説明]
- あらかじめ,OLTPシステムにはHiRDB1(環境変数グループ識別子HDB1)とHiRDB2(環境変数グループ識別子HDB2)を登録しておきます。HiRDBのトランザクションマネジャへの登録については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
- 複数接続機能を使用する場合,専用のライブラリをリンクする必要があります。詳細については,「8.3.4 複数接続機能を使用する場合のコンパイルとリンケージ」を参照してください。
- 複数接続機能用ライブラリを使用するUAPでは,一つの接続を保持したままスレッドを分岐し,そのスレッドがSQLを実行する場合,ほかのSQLを発行するスレッドとの間で処理のシリアライズを必要とします。したがって,同一接続に対するSQLは同時に発行できません。異なる接続に対するSQLは同時に発行できます。
- ALLOCATE CONNECTION HANDLE,FREE CONNECTION HANDLEのエラー情報を参照する場合,SQLCODE,SQLERRMではなく,リターンコード受け取り変数の値を参照してください。リターンコード受け取り変数については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
- SQL連絡領域を参照する場合,DECLARE CONNECTION HANDLE SET文で参照するSQL連絡領域に対応した接続ハンドルを宣言しておく必要があります。
- COBOL言語の場合,複数接続機能を使用するSQL文を含むUAPで,DECLARE CONNECTION HANDLE SETの記述前(有効範囲外)に接続ハンドルの割り当て,取得以外のSQL文を記述できません。
- COBOL言語の場合,DECLARE CONNECTION HANDLE UNSETは使用できません。
- 複数接続機能は,マルチスレッド(DCEスレッド,リアルスレッド),及びシングルスレッド対応のUAPで使用できます。マルチスレッド対応のUAPで複数接続機能を使用する場合,HiRDBでのUAPの開発知識のほかに,DCEスレッド,リアルスレッドを用いたUAPの開発知識を必要とします。
- Windows版での複数接続機能は,X/Open XAインタフェースを使用しない場合,マルチスレッド対応UAPでだけ使用できます。したがって,Visual Studioを用いたUAPのコンパイルで使用する,Cのランタイムライブラリの指定は,マルチスレッド・DLLを選択してください(「コンパイルオプション:コード生成」で,「マルチスレッド・DLL」を指定します)。
- Windows版での複数接続機能は,X/Open XAインタフェースを使用する場合,シングルスレッド対応UAPでも使用できます。なお,シングルスレッド対応UAPの場合でも,Visual Studioを用いたUAPのコンパイルで使用する,Cのランタイムライブラリの指定は,マルチスレッド・DLLを選択してください(「コンパイルオプション:コード生成」で,「マルチスレッド・DLL」を指定します)。
- C,及びC++言語でSQL連絡領域を参照する場合,直接SQLCAの構造体を参照しないで,SQLで始まるマクロ名を使用して参照してください。使用するマクロ名については「付録B.2(1)(a) C言語の場合」を参照してください。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.