データベースの創成は、実表へのデータ投入で完了します。データの投入は、格納先のデータベーススペースが作成され、実表やインデックスなどの論理構造定義および格納構造定義が完了してから行います。
データの投入は、データファイルを使用したrdbsloaderコマンドによる方法および創成用のアプリケーションを作成してINSERT文によって行う方法があります。創成用のアプリケーションの場合には、事前にDSIを初期化しておかなければなりません。
ここでは、rdbsloaderコマンドによりデータファイルから一括してデータを入力する方法について説明します。rdbsloaderコマンドによるデータベースの創成の概要を以下に示します。
アプリケーションのINSERT文によるデータベースの創成については、“INSERT文によるデータベース創成”を参照してください。
rdbsloaderコマンドによるデータベースの創成では、外部ファイルを利用します。この外部ファイルは、rdbunlコマンドまたはrdbunlsqlコマンドでのデータの出力や、rdbsaloaderコマンド、rdbsuloaderコマンドまたはrdbuptコマンドでのデータベースの更新においても使用します。
外部ファイルは、1レコードが表の1行分のデータを構成するバイナリ形式またはテキスト形式で作成したファイルです。
外部ファイルデータに記述する文字コード系は、以下のとおりです。
バイナリ形式の場合
処理対象のデータベースの文字コード系で記述します。
rdbsaloaderコマンド、rdbsloaderコマンド、rdbsuloaderコマンドまたはrdbuptコマンドにオプションを指定した場合、各国語文字はUCS-2形式をバイトスワップした形式(リトルエンディアン)で記述することができます。
また、rdbunlコマンドまたはrdbunlsqlコマンドにオプションを指定した場合、各国語文字はUCS-2形式をバイトスワップした形式(リトルエンディアン)で出力されます。
参照
オプションの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。
テキスト形式の場合
データベースの文字コード系と異なるコード系で入出力データを作成することができます。データファイルからデータを入力する場合は、作成した外部ファイルデータの文字コード系をコマンドのオプションで指定します。データベースからデータを出力する場合は、出力する外部ファイルの文字コード系をコマンドのオプションで指定します。オプションを省略した場合は、データベースの文字コード系が指定されたものとみなします。
参照
オプションの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。
外部ファイルデータの文字コード系と処理対象のデータベースの文字コード系が異なる場合、コード変換が行われます。コード変換により変換先に該当する文字コードが存在しない場合は、コード変換エラーとなります。
バイナリ形式について説明します。
在庫管理DBにおける在庫表のDSIである在庫表DSIにデータを創成するためのデータファイルの例を以下に示します。
NULL値をデータとして格納する場合は、データファイルの形式が異なります。データファイルのすべてのレコードについて、表の列のデータの前に2バイトのNULL表示域が必要となります。NULL表示域は、その列のデータ値がNULLであるかどうかを示します。NULL表示域を持つデータファイルの形式を以下に示します。
データがNULL値でない場合
データがNULL値の場合
列のデータ型が可変長文字列型の列に格納するデータを作成するためには、格納するデータの文字数を示す2バイトの長さ表示域が列のデータの直前に必要となります。データファイルの例を以下に示します。
列のデータ型とデータファイルのデータ形式の対応を以下に示します。
備考1. データ形式の説明
記号 | 説明 |
---|---|
λ | 可変長文字列の有効なデータ長(バイト数)を表します。 |
3 | 16進数です(10進数で3)。 |
j | データに対応する数値(16進数の0~9)を表します。 |
g | 符号(正:16進数のA,C,E,F 負:16進数のB,D)を表します。 |
ss | 符号(正:16進数の2B 負:16進数の2D)を表します。 |
Y | 2バイトの2進数で西暦の年を表します。 |
M | 1バイトの2進数で月を表します。 |
D | 1バイトの2進数で日を表します。 |
h | 1バイトの2進数で時を表します。 |
m | 1バイトの2進数で分を表します。 |
s | 1バイトの2進数で秒を表します。 |
R | 16進数で00000000を設定する必要があります。 |
備考2. 指定例欄の枠内の文字は各国語を除き、すべて16進数です。
備考3. 太枠部分は、符号桁またはデータ長桁を表します。
備考4. データファイルの文字コード系は、データベースの文字コード系と一致している必要があります。データベースの文字コード系により、データファイルは、以下の文字コード系で記述します。
データベースの文字コード系 | データファイルに記述する文字コード系 | |
---|---|---|
CHARACTER | NATIONAL CHARACTER | |
EUCコードのS90コード | EUCコードのS90コード | COBOL_EUC形式のS90コード |
シフトJISコード | シフトJISコード | シフトJISコード |
UNICODE | UTF-8形式 | UCS-2形式 |
記号 | 説明 |
---|---|
n | 1~9(省略値:2) |
b | データ型に指定されたn(時間隔先行フィールドの桁数)により以下のように決定されます。 |
n | b |
1~2 | 2byte |
記号 | 説明 |
---|---|
S | 正または負の符号をそれぞれ文字の“+”または“-”のいずれかで必ず設定します。 |
Y | 年をその格納サイズの2進数で設定します。 |
M | 月をその格納サイズの2進数で設定します。 |
D | 日をその格納サイズの2進数で設定します。 |
h | 時間をその格納サイズの2進数で設定します。 |
m | 分をその格納サイズの2進数で設定します。 |
s | 秒をその格納サイズの2進数で設定します。 |
データファイルはCSV形式に対応しています。
1行分のデータは、列に対応するデータ項目の集まりで構成します。1つの列のデータ型に対応する各データ項目の間は、コンマ“,”で区切ります。データ項目には、文字項目と数値項目があります。文字項目は二重引用符で文字列を囲み、数値項目は数値定数の文字列をそのまま指定します。また、1行分のデータの終了は改行記号を指定します。
rdbsloaderコマンド、rdbsaloaderコマンド、rdbsuloaderコマンドまたはrdbuptコマンドでは、オプションを指定することで、区切り文字および囲み文字に別の文字を指定できます。また、指定する入力ファイルの文字コード系がUTF-8形式またはUCS-2形式の場合、文字コード系の種類を示す制御情報の有無に関わらずそのテキストファイルを処理することができます。制御情報は、テキストエディタにより、テキストファイルの先頭3バイトに付加されることのある情報です。
EFBBBF(3バイトの16進数)
なお、rdbunlコマンドまたはrdbunlsqlコマンドでは、出力するテキスト形式のデータがUTF-8形式またはUCS-2形式の場合でも、この制御情報を付加しません。
参照
オプションの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。
テキスト形式データの格納ファイルの内容を以下に示します。
列のデータ型とデータファイルのデータの記述形式の対応を以下に示します。
列のデータ型 | 記述形式 |
---|---|
SMALLINT | -32768~32767 (小数点なし) |
INTEGER | -2147483648 ~2147483647 (小数点なし) |
NUMERIC(p,q) | 整数部 (小数点の左側) の数字の数はp-q 以下 |
DECIMAL(p,q) | |
CHARACTER(n) | -長さがn以下の二重引用符で囲んだ文字列です。 |
CHARACTER | |
NATIONAL | -長さがn以下の二重引用符で囲んだ文字列です。 |
NATIONAL | |
REAL | 仮数E指数 |
DOUBLE | |
TIMESTAMP | "YYYY-MM-DD hh:mm:ss" |
BINARY LARGE | Base64で表現した値を二重引用符で囲んだ文字列です。 |
DATE | "YYYY-MM-DD" |
TIME | "hh:mm:ss" |
INTERVAL | 詳細は“表4.2 INTERVALの指定形式”を参照してください。 |
p:精度 q:位取り n:長さ
列のデータ型 | 記述形式 |
---|---|
INTERVAL YEAR [(n)] TO MONTH | "[+/-]Y…Y-MM" |
INTERVAL DAY [(n)] TO HOUR | "[+/-]D…D hh" |
INTERVAL HOUR[(n)] TO MINUTE | "[+/-]h…h:mm" |
INTERVAL MINUTE[(n)] TO SECOND | "[+/-]m…m:ss" |
INTERVAL SECOND[(n)] | "[+/-]s…s" 68秒の例:"68" |
Y: 年をその格納サイズの2進数で設定します。
M: 月をその格納サイズの2進数で設定します。
D: 日をその格納サイズの2進数で設定します。
h: 時間をその格納サイズの2進数で設定します。
m: 分をその格納サイズの2進数で設定します。
s: 秒をその格納サイズの2進数で設定します。
備考. “…”はn: 時間隔先行フィールドに指定された桁数の繰り返しを示します。
表の創成やインデックスの創成は、rdbsloaderコマンドで行います。表の創成を行う場合は、表のDSIにインデックスが定義されていると、そのすべてのインデックスのDSIも同時に創成します。
注意
rdbsloaderコマンド実行中にログファイルが満杯になると、rdbsloaderコマンドはログが満杯の状態が解除されるまで処理待ちとなるため注意が必要です。処理待ちとなった場合、Appliance Managerでリカバリーを実施することにより処理待ちを解除できます。
ポイント
rdbsloaderコマンドは、分割格納が定義された表のDSIを処理するとき、入力ファイル内に分割値範囲外のデータが含まれている場合、該当データを処理対象とせずに処理を続行し、正常終了します。分割範囲外のデータをエラーとし、入力ファイルの作成ミスや指定ミスによるデータ抜けを検出するためには、Eオプションを使用します。
詳細は“表の創成(分割値範囲外データエラー指定)”を参照してください。
rdbsloaderコマンドの入力ファイルをテキスト形式で創成する場合について以下に説明します。
参照
rdbsloaderコマンドの指定方法の詳細については、“Symfoware Server コマンドリファレンス”を参照してください。
参考
rdbsloaderコマンドは、以下のいずれかの条件を満たす場合、対象DSIの割付け領域のデータ内容が保証されないため、DSI割付け量に依存した処理時間になります。なお、条件に当てはまらない場合は、入力データ量に依存します。
対象DSIの定義直後
対象DSIがアクセス禁止状態
すべての列にデータを挿入する場合の機能概要と指定例を以下に示します。
$ rdbsloader -mi -i 在庫管理DB.在庫表DSI -f 20 -s /disk3/rdb/data/work -t -k /disk3/rdb/data/stock1.data (1)
(1) 入力ファイル名
ある列にのみデータを挿入する場合の機能概要と指定例を以下に示します。
$ rdbsloader -mi -i 在庫管理DB.在庫表DSI -f 20 -s /disk3/rdb/data/work
-t -c 倉庫番号,製品名 -k /disk3/rdb/data/stock2.data
(1)
(1) 列指定
正常なレコードのみを挿入し、属性エラーを検出した誤りのレコードを、指定されたファイルに出力する場合の機能概要と指定例を以下に示します。
$ rdbsloader -mi -i 在庫管理DB.在庫表DSI -f 20 -s /disk3/rdb/data/work -t -k -r 10, /disk3/rdb/data/err.data /disk3/rdb/data/stock3.data (1)
(1) エラーデータ指定
複数のDSIに一括してデータを挿入する場合の機能概要と指定例を以下に示します。
$ rdbsloader -mi -v /disk3/rdb/data/list.data -f 20 -s /disk3/rdb/data/work -t (1) -k /disk3/rdb/data/all.data
(1) 複数DSI指定
表のDSIにインデックスが定義されている場合、インデックスを並列創成することにより、DSIの創成を高速に処理することができます。
インデックスの並列創成を伴う表の創成をする場合の指定例を以下に示します。
$ rdbsloader -mi -i 在庫管理DB.在庫表DSI -h -f 20
(1)
-s 製品名IXDSI1, /disk3/rdb/data/work2
-s 製品名IXDSI2, /disk3/rdb/data/work3
-t /disk3/rdb/data/stock4.data
(1) インデックス並列創成指定
入力ファイルに含まれる分割値範囲外のデータを、エラーとする場合の指定例を以下に示します。
$ rdbsloader -mi -i 在庫管理DB.在庫表DSI -E OUTER_SPLIT_VALUE -f 20
(1)
-t /disk3/rdb/data/stock5.data
(1) 分割値範囲外データエラー指定
分割格納が定義された表のDSIを処理するとき、入力ファイルにDSIの分割値の範囲外であるデータが存在した場合、異常データとして扱います。
本指定を省略すると、入力ファイル中に分割値範囲外データが含まれている場合、該当データを処理の対象外として処理を続行し、正常終了します。
RDBコマンドが以下のロード/アンロード系のコマンドの場合、データベースに格納されるデータの文字コード系と異なる文字コード系を使用して処理することが可能です。
rdbsloaderコマンド
rdbsaloaderコマンド
rdbsuloaderコマンド
rdbuptコマンド
rdbunlコマンド
rdbunlsqlコマンド
これは、テキスト形式の外部ファイルデータを使用する場合に、RDBコマンドのオプションで指定することが可能となります。
参照
オプションの指定方法の詳細は、“Symfoware Server コマンドリファレンス”を参照してください。
オプションを指定せずにロードまたはアンロードを行う場合の外部ファイルの文字コード系は、データベースに格納されるデータの文字コード系と同じ文字コード系にする必要があります。
同じプラットフォームまたは他のプラットフォームのSymfoware Serverあるいは別のHA Database Readyから、以下のアンロード系のコマンドにより取得した外部ファイルを用いて、以下のロード系のコマンドで処理する場合についての注意事項を示します。
アンロード系のコマンド
rdbunlコマンド
rdbunlsqlコマンド
ロード系のコマンド
rdbuptコマンド
rdbsloaderコマンド
rdbsaloaderコマンド
rdbsuloaderコマンド
以下に、アンロードを実行(外部ファイルの取得)するプラットフォームと、ロードを実行するプラットフォームの組合せについての実行可否と注意事項を、外部ファイルの形式ごとに示します。
バイナリ形式で取得した外部ファイルは、以下の場合にはロードできません。
プラットフォームが異なる場合
データベースに格納されるデータの文字コード系と異なる場合
| アンロード | |||
---|---|---|---|---|
Solaris | Linux | Windows | ||
ロード | Solaris | ○ | × | × |
Linux | × | ○ | × | |
Windows | × | × | ○ |
○: データベースに格納されるデータの文字コード系が同じ場合には可能
×: 不可能
外部ファイルの文字コード系がデータベースに格納されるデータの文字コード系と異なる場合には、外部ファイルの文字コード系をコマンドのオプションで指定する必要があります。
詳細については、“4.1.1.3 外部ファイルの文字コード系の考慮”を参照してください。
| アンロード | |||
---|---|---|---|---|
Solaris | Linux | Windows | ||
ロード | Solaris | ○ | ○ | ○ |
Linux | ○ | ○ | ○ | |
Windows | ○ | ○ | ○ |
○: 可能(文字コード系が異なる場合にはオプションの指定が必要)
注意
コマンドと表の列定義の組合せによっては、テキスト形式でのアンロードができない場合があります。詳細については、“Symfoware Server コマンドリファレンス”を参照してください。