スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)
EasyMTは,E.2で示した可変長ブロックテープを使用して,ボリューム名やファイル名によるテープ管理をするプログラムプロダクトです。
可変長ブロックデバイスは,導入時には作成されていません。そのため,事前に作成する必要があります。
スーパユーザが,次のコマンドを実行します。
/etc/mknod /dev/dat/vdat010 c 119 0x010001 /bin/chmod 0666 /dev/dat/vdat010 |
EasyMTでは,次のようなヘッダ形式があります。
シンボル | 意味 |
---|---|
EMTVOL_EL | EasyMTラベル |
EMTVOL_SL | 標準ラベル |
EMTVOL_JL | JISコードラベル |
EMTVOL_NL | ラベルなし |
データベース作成ユティリティ(pdload)では,まずヘッダを読み込み,認識できる形式のものを読みます。認識できない場合やラベルなしの場合は,エラーとします。
EasyMTでは,次のようなレコード形式があります。
シンボル | 意味 | ブロック指定 | レコード指定 | ラベル指定 |
---|---|---|---|---|
F | 固定長非ブロックレコード | N | F | SL又はEL |
FB | 固定長ブロックレコード | B | ||
V | 可変長非ブロックレコード | N | V | |
VB | 可変長ブロックレコード | B | ||
U | 不定長 | N | U |
データベース作成ユティリティ(pdload)では,上記のすべての型に対応します。しかし,ブロック長,レコード長,及びデータ長のうち,最長のものの最大値は次のようになります。
作成機種 | 最大値 |
---|---|
3050RXグループ | 32キロバイト(32768バイト) |
3500シリーズ | |
HITAC−Mシリーズ | 32キロバイト−8(32760バイト) |
F及びFBのレコード形式は,1レコードの長さが固定なので,入力がバイナリファイルで行の構成列がすべて固定長の表,又はFIX表の場合だけ使用できます。入力がアスキーファイルの場合は,データ長がすべて同じ場合だけ使用できます。
データベース作成ユティリティ(pdload)の入力としては,次の2種類のファイルが扱えます。
レコード形式には,次の種類があります。
・F(固定長非ブロックレコード)
・FB(固定長ブロックレコード)
データ長(レコード長)には,1行の長さを指定します。
行の構成列がすべて固定長の表,又はFIX表の場合だけF/FBを指定できます。
・V(可変長非ブロックレコード)
・VB(可変長ブロックレコード)
・U(不定長)
DAT形式のファイルは,1行1レコード(NL文字まで)にします。通常レコード形式はV,VB,又はUのどれかの形式にします。データ長がすべて同じ場合だけ,F又はFBが使用できます。
データ長には,NL(LF : 0x0a, '\n')を含みます。NLを含まないレコードは,エラーとなります。
以上のことをまとめると,データ長,レコード長,及びブロック長の最大・最小値は次のようになります。
レコード形式 | データ長 | レコード長 | ブロック長 | |||
---|---|---|---|---|---|---|
min | max | min | max | min | max | |
F/FB | 1 | 32768 | 1 | 32768 | 1 | 32768 |
V/VB | 1 | 32760 | 5 | 32764 | 9 | 32768 |
U | 1 | 32768 | − | − | 1 | 32768 |
レコード形式 | データ長 | レコード長 | ブロック長 | |||
---|---|---|---|---|---|---|
min | max | min | max | min | max | |
F/FB | 1 | 32760 | 1 | 32760 | 1 | 32760 |
V/VB | 1 | 32752 | 5 | 32756 | 9 | 32760 |
U | 1 | 32760 | − | − | 1 | 32760 |
3050RXグループ又は3500シリーズでEasyMT提供関数を使用して,データベース作成ユティリティ(pdload)用入力ファイルを作成する例を示します。
なお,EasyMTの定義は,MT属性定義ファイルで指定するものとします。
MT属性定義ファイルは,第1引数(argv[1])で指定します。
エラー処理は,必要に応じて指定してください。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "easymt.h" #define PROC_BUFSIZ 1024 * 32 char buf[PROC_BUFSIZ]; int data_len; /* データ長 */ : void main(int argc, char *argv[]) { EmtDescr_t* emt_fp; if (EmtInit(NULL, argv[1])) { printf("EmtInit失敗, ,EmtErrno=%i\n", EmtErrno); exit(EXIT_FAILURE); } if (emt_fp = EmtAlloc(NULL, argv[1])) { } else { printf("EmtAlloc失敗, ,EmtErrno=%i\n", EmtErrno); exit(EXIT_FAILURE); } if (EmtFopen(emt_fp, NULL)) { printf("EmtFopen失敗, ,EmtErrno=%i\n", EmtErrno); goto proc_free; } while(データがある間) { : ここでbufにデータを作成する。data_lenにデータ長を代入。 DAT形式データの場合はNL(0x0a)をデータ内に含みます。 : rc = EmtWrite(emt_fp, buf, data_len); if (rc != data_len) { printf("EmtWrite失敗,EmtErrno=%i\n", EmtErrno); goto proc_close; } } proc_close: if (EmtFclose(emt_fp)) { printf("EmtFclose失敗,EmtErrno=%i\n", EmtErrno); goto proc_free; } proc_free: if (EmtFree(emt_fp)) { printf("EmtFree失敗,EmtErrno=%i\n", EmtErrno); exit(EXIT_FAILURE); } } |
定義ファイルで「=」の直後が空白のものは,その値を省略したことになります。
MT属性定義ファイルのうち,以下のエントリはpdloadの制御情報ファイルのsource文エントリと対応します。
MT属性定義ファイルエントリ | pdload制御情報ファイルsource文エントリ | 最大文字数 |
---|---|---|
volname= | vol= | 6 |
filename= | file= | 17※ |
bufnoエントリは単に,書き込み時にバッファ面数を何面使うかの指定なので,pdloadの指定と合わせる必要はありません。
上記のようなファイルを作成する場合の定義例を次に示します。
#/*------------------------------------------------------- # (1) 動作に対する指定 #/*------------------------------------------------------- devname=/dev/dat/vdat010 blking=OFF bufno=2 #/*------------------------------------------------------- # (2) volume属性に関する指定 #/*------------------------------------------------------- volname=HiRDB voltype=SL #/*------------------------------------------------------- # (3) file属性に関する指定 #/*------------------------------------------------------- filename=input_data openmode=EMT_WRONLY blklen=32760 reclen=32756 blktype=B rectype=V |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.