Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


12.2.2 HiRDB/パラレルサーバの場合

データロード(データベース作成ユティリティ)を実行するUAPを例にして説明します。

HiRDB/パラレルサーバの場合のサーバ,クライアント構成例を次の図に示します。

図12‒3 HiRDB/パラレルサーバの場合のサーバ,クライアント構成例

[図データ]

図「HiRDB/パラレルサーバの場合のサーバ,クライアント構成例」のようなサーバ,クライアント構成で,データロードをするUAPを実行する場合,事前に次の設定をします。

  1. 次のクライアント環境定義を設定します。

    PDSYSTEMID:

    HiRDBサーバのHiRDB識別子(HRD1)を設定します。

    PDASTHOST:

    HiRDB Control Manager - Agentのホスト名(HOST1)を設定します。HiRDB/パラレルサーバの場合は,システムマネジャがあるサーバマシンのホスト名を指定します。

    PDASTPORT:

    HiRDB Control Manager - Agentのポート番号(22201)を設定します。

  2. HiRDBサーバ側に,データロードで必要となる制御情報ファイル,及び入力データファイルを用意します。

  3. HiRDB管理者がUSERA(パスワードUSERA)で,データロードをする表の所有者がUSERB(パスワードUSERB)であったとします。この場合,次のクライアント環境定義を設定します。

    PDASTUSER=USERA/USERA
    PDUSER=USERB/USERB

これで,データロードをするUAPを実行できるようになります。なお,各クライアント環境定義については,「クライアント環境定義の設定内容」を参照してください。

データロードを実行するUAPの例を次に示します。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
EXEC SQL BEGIN DECLARE SECTION;
char CmdLine[30000];                  /* CmdLine変数 */
long ReturnCode;                      /* リターンコード受取変数 */
long OutBufLen;                       /* 実行結果受取領域長 */
long CmdRetCode;                      /* 実行コマンドリターンコード
                                         受取変数 */
long OutDataLen;                      /* 実行結果長受取変数 */
PDOUTBUF OutBuf;                      /* 実行結果受取領域 */
char EnvGroup[256];                   /* 環境変数グループ名変数 */
EXEC SQL END DECLARE SECTION;
 
void main() 
{
strcpy(CmdLine,"pdhold -r RDDATA10"); /* 実行コマンドライン
                                         (RDエリア閉塞)設定 */
OutBuf = malloc(30000);               /* 実行結果受取領域確保 */
if (OutBuf == NULL){                  /* メモリ確保失敗 */
printf("メモリ確保失敗\n");
return ;
}
OutBufLen = 30000 ;                   /* 実行結果受取領域長設定 */
EnvGroup[0] = '\0' ;                  /* 環境変数グループ設定なし */
 
/* コマンド実行 */
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {    /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode==0) {                  /* 実行コマンド正常 */
 
/* 実行コマンドライン(データロード実行)設定 */
strcpy(CmdLine,"pdload  -i c  -be ZAIKO c:\HiRDB_P\conf\LOAD");
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {    /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode==0) {                  /* 実行コマンド正常 */
printf("pdload command successfully\n");
printf("%s\n", OutBuf);
} else {                              /* 実行コマンドエラー */
printf("pdload command Error,Code = %d\n", CmdRetCode);
printf("%s\n", OutBuf);
}
} else {                              /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d\n", ReturnCode);
printf("%s\n", OutBuf);
}
} else {                              /* 実行コマンドエラー */
printf("pdhold command Error,Code = %d\n", CmdRetCode);
printf("%s\n", OutBuf);
}
strcpy(CmdLine,"pdrels -r RDDATA10"); /* 実行コマンドライン
                                         (RDエリア閉塞解除)設定 */
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {   /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode!=0) {                 /* 実行コマンドエラー */
printf("pdrels command Error,Code = %d\n", CmdRetCode);
printf("%s\n", OutBuf);
}
} else{                              /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d\n", ReturnCode);
printf("%s\n", OutBuf);
}
} else {                             /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d\n", ReturnCode);
printf("%s\n", OutBuf);
}
return ;
}