スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(UNIX(R)用)

[目次][索引][前へ][次へ]

8.2.9 トランザクションマネジャとHiRDB間のコネクションが切断されたときの再接続方法

<この項の構成>
(1) UAPで対処する方法
(2) 連携するOLTP製品がTPBroker for C++,及びWebLogic Serverの場合
(3) OpenTP1の機能を使用する
(4) HiRDBのXAインタフェースに対応したクライアントライブラリの再接続

(1) UAPで対処する方法

コネクションが切断された場合,実行中のUAPを終了後,再起動してください。再起動すると,自動的にコネクションが再接続されます。

UAPを再起動したくない場合は,コネクションが切断されたことを示すエラーがUAPに返ったときに,tx_open関数を再発行してください。そうすれば,UAPを終了しなくてもサービスを続行できます。tx_open関数を再発行するときのコーディング例を次に示します。

コーディング例
 
int connection = 1;
void service(char *in_data,long *in_len,char *out_data,long *out_len) {
    if (connection == 0) {
       tx_close();
       tx_open();           ………コネクション切断時のtx_open再発行処理
    }
    tx_begin();
    EXEC SQL INSERT INTO ......;                ……… SQL文発行
    if (SQLCODE == 0) {
        tx_commit();
        *out_data = "OK";
    } else {
        tx_rollback();
        *out_data = "NG";
        if (SQLCODE == -563 || SQLCODE == -722) {
            connection = 0;              ………………コネクション切断を記憶
        }
    }
}
 

(2) 連携するOLTP製品がTPBroker for C++,及びWebLogic Serverの場合

トランザクションの開始又は終了時にHiRDBとのコネクションを確立又は切断するため,途中で切断した場合も次回のトランザクション開始時にコネクションが再接続されます。

(3) OpenTP1の機能を使用する

動的登録の場合は,OpenTP1/Server Baseのtrn_rm_open_close_scopeオペランドにtransactionを指定してください。そうすれば,OpenTP1/Server Baseはトランザクションの開始又は終了でHiRDBとのコネクションを確立又は切断します。したがって,途中でコネクションが切断されても,次回のトランザクションの開始時にコネクションが再接続されます。

静的登録の場合は,トランザクションの開始時にHiRDBとのコネクションが確立されているかどうかをトランザクションマネジャが確認します。コネクションが切断されている場合は,自動的に再接続されて,トランザクションを開始します。なお,TP1/EEの場合は,HiRDBのクライアント環境定義PDXAAUTORECONNECTにYESを指定する必要があります。

(4) HiRDBのXAインタフェースに対応したクライアントライブラリの再接続

トランザクションマネジャでトランザクションを開始して,最初にHiRDBにアクセスするSQL文を実行するまでに,HiRDBとのコネクションが切断されていた場合,SQL文の実行時にHiRDBクライアントライブラリでコネクションが再接続されます。ただし,ネットワーク障害による切断は検知できないため,再接続されません。