ページの先頭行へ戻る
PRIMEFLEX for HA Database 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

4.1.1 データベースの創成

データベースの創成は、実表へのデータ投入で完了します。データの投入は、格納先のデータベーススペースが作成され、実表やインデックスなどの論理構造定義および格納構造定義が完了してから行います。

データの投入は、データファイルを使用したrdbsloaderコマンドによる方法および創成用のアプリケーションを作成してINSERT文によって行う方法があります。創成用のアプリケーションの場合には、事前にDSIを初期化しておかなければなりません。

ここでは、rdbsloaderコマンドによりデータファイルから一括してデータを入力する方法について説明します。rdbsloaderコマンドによるデータベースの創成の概要を以下に示します。

アプリケーションのINSERT文によるデータベースの創成については、“INSERT文によるデータベース創成”を参照してください。

4.1.1.1 外部ファイルの形式

rdbsloaderコマンドによるデータベースの創成では、外部ファイルを利用します。この外部ファイルは、rdbunlコマンドまたはrdbunlsqlコマンドでのデータの出力や、rdbsaloaderコマンド、rdbsuloaderコマンドまたはrdbuptコマンドでのデータベースの更新においても使用します。

外部ファイルは、1レコードが表の1行分のデータを構成するバイナリ形式またはテキスト形式で作成したファイルです。

外部ファイルデータに記述する文字コード系は、以下のとおりです。

外部ファイルデータの文字コード系と処理対象のデータベースの文字コード系が異なる場合、コード変換が行われます。コード変換により変換先に該当する文字コードが存在しない場合は、コード変換エラーとなります。


バイナリ形式

バイナリ形式について説明します。

在庫管理DBにおける在庫表のDSIである在庫表DSIにデータを創成するためのデータファイルの例を以下に示します。

NULL値

NULL値をデータとして格納する場合は、データファイルの形式が異なります。データファイルのすべてのレコードについて、表の列のデータの前に2バイトのNULL表示域が必要となります。NULL表示域は、その列のデータ値がNULLであるかどうかを示します。NULL表示域を持つデータファイルの形式を以下に示します。

NULL表示域の値は以下のとおりです。

0000(16進数):

データがNULL値でない場合

FFFF(16進数):

データが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
CHARACTER VARYING

NATIONAL CHARACTER
NATIONAL CHARACTER VARYING

EUCコードのS90コード

EUCコードのS90コード

COBOL_EUC形式のS90コード

シフトJISコード

シフトJISコード

シフトJISコード

UNICODE

UTF-8形式

UCS-2形式

INTERVALのデータ形式

記号

説明

n

1~9(省略値:2)

b

データ型に指定されたn(時間隔先行フィールドの桁数)により以下のように決定されます。

n

b

1~2
3~4
5~9

2byte
3byte
5byte

記号

説明

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バイトに付加されることのある情報です。

制御情報(UTF-8形式):

EFBBBF(3バイトの16進数)

なお、rdbunlコマンドまたはrdbunlsqlコマンドでは、出力するテキスト形式のデータがUTF-8形式またはUCS-2形式の場合でも、この制御情報を付加しません。

参照

オプションの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

テキスト形式データの格納ファイルの内容を以下に示します。

列のデータ型とデータファイルのデータの記述形式の対応を以下に示します。

表4.1 データ項目の指定形式

列のデータ型

記述形式

SMALLINT

-32768~32767 (小数点なし)

INTEGER

-2147483648 ~2147483647 (小数点なし)

NUMERIC(p,q)

整数部 (小数点の左側) の数字の数はp-q 以下
小数部 (小数点の右側) の数字の数はq 以下
  備考.定数が小数点を含まない場合はすべて整数部
        となる。

DECIMAL(p,q)

CHARACTER(n)

-長さがn以下の二重引用符で囲んだ文字列です。
  例:"文字"
-二重引用符内の区切り文字はデータとして扱われます。
  例:"123.456"
-データに二重引用符を指定する場合、連続して記述
  します。
  例:"TEL""12345"""
-各コマンドで指定した入力データまたは出力データ
  の文字コード系を示すオプション(jオプション)と
  記述する文字コード系の関係を以下に示します。
     EUC_S90: EUCコードのS90コード
     SJIS: シフトJISコード
     UNICODE: UTF-8形式
  このオプションを省略した場合は、データベースの
  文字コード系と同じコード系で記述します。

CHARACTER
VARYING(n)

NATIONAL
CHARACTER(n)

-長さがn以下の二重引用符で囲んだ文字列です。
  例:"文字"
-二重引用符内の区切り文字はデータとして扱われます。
  例:"123.456"
-データに二重引用符を指定する場合、連続して記述
  します。
  例:"TEL""12345"""
-各コマンドで指定した入力データまたは出力データ
  の文字コード系を示すオプション(jオプション)と
  記述する文字コード系の関係を以下に示します。
     EUC_S90: COBOL_EUC形式のS90コード
     SJIS: シフトJISコード
     UNICODE: UCS-2形式
  このオプションを省略した場合は、データベースの
  文字コード系と同じコード系で記述します。

NATIONAL
CHARACTER
VARYING(n)

REAL

仮数E指数
  例:-1.05E+100
  備考.仮数および指数で符号"+"は省略可能

DOUBLE
PRECISION

TIMESTAMP

"YYYY-MM-DD hh:mm:ss"
  例:"2007-04-10 21:10:00"
       "2007-5-1 1:5:0"

BINARY LARGE
OBJECT(n)

Base64で表現した値を二重引用符で囲んだ文字列です。
  例:格納データが 0x61626364の場合
      "YWJjZA=="
  備考.Base64はRFC3548で定義されています。

DATE

"YYYY-MM-DD"
  例:"2007-04-10"

TIME

"hh:mm:ss"
  例:"21:10:00"

INTERVAL

詳細は“表4.2 INTERVALの指定形式”を参照してください。

p:精度 q:位取り n:長さ

表4.2 INTERVALの指定形式

列のデータ型

記述形式

INTERVAL YEAR [(n)] TO MONTH
INTERVAL YEAR [(n)]
INTERVAL MONTH [(n)]

"[+/-]Y…Y-MM"
"[+/-]Y…Y"
"[+/-]M…M"
10年と2カ月の例:"10-02"

INTERVAL DAY [(n)] TO HOUR
INTERVAL DAY [(n)] TO MINUTE
INTERVAL DAY [(n)] TO SECOND
INTERVAL DAY [(n)]

"[+/-]D…D hh"
"[+/-]D…D hh:mm"
"[+/-]D…D hh:mm:ss"
"[+/-]D…D"
14日と2時間の例:"14 02"

INTERVAL HOUR[(n)] TO MINUTE
INTERVAL HOUR[(n)] TO SECOND
INTERVAL HOUR[(n)]

"[+/-]h…h:mm"
"[+/-]h…h:mm:ss"
"[+/-]h…h"
21時間と12分の例:"21:12"

INTERVAL MINUTE[(n)] TO SECOND
INTERVAL MINUTE[(n)]

"[+/-]m…m:ss"
"[+/-]m…m"
72分11秒の例:"72:11"

INTERVAL SECOND[(n)]

"[+/-]s…s" 68秒の例:"68"

Y: 年をその格納サイズの2進数で設定します。
M: 月をその格納サイズの2進数で設定します。
D: 日をその格納サイズの2進数で設定します。
h: 時間をその格納サイズの2進数で設定します。
m: 分をその格納サイズの2進数で設定します。
s: 秒をその格納サイズの2進数で設定します。

備考. “…”はn: 時間隔先行フィールドに指定された桁数の繰り返しを示します。

NULL値

データ項目にNULL値を指定する場合は、文字項目の場合でも数値項目の場合でも区切り文字の間に何も指定しない形で指定します。また、データ項目が1行の最後の列である場合は、直前のデータ項目との区切り文字を指定した後に改行記号が続くことになります。なお、NULL値のデータ項目は、対応する表定義の列にNOT NULLが指定されている場合には指定できません。

例1

文字項目にNULL値を設定する場合(データ項目の途中にある場合)

例2

文字項目にNULL値を設定する場合(データ項目の最後にある場合)

4.1.1.2 初期創成のためのコマンド

表の創成やインデックスの創成は、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) 列指定

列指定

入力ファイルのデータの並びと対象DSIの属する表の列の並びが一致しておらず、それぞれを対応づける場合などに、入力ファイルの先頭から順に入っているデータを、表内のどの列に対応させるかを指定します。本オプションで指定した列名の数が表定義の列の数よりも少ない場合、指定されなかった列について、表定義でNULL値が許されていればNULL値が設定され、DEFAULT句が指定されていればDEFAULT句に指定した値が設定されます。NOT NULLが指定されていればエラーとなります。本オプションを省略すると、表定義と同じ列名が同じ順序で指定されたものとして処理します。

表の創成(エラーデータの抽出)

正常なレコードのみを挿入し、属性エラーを検出した誤りのレコードを、指定されたファイルに出力する場合の機能概要と指定例を以下に示します。

$ 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の創成中に属性エラーが発生した場合、コマンド処理を中断するまでの発生エラー件数の限界値とエラーデータの出力ファイル名を指定します。

エラー件数は、1以上の数値、またはレコードの件数に関係なく、すべてのエラーデータを出力するALLを指定します。

エラーデータの出力ファイル名は、絶対パス名で指定します。エラーデータの出力ファイルには、属性エラーを検出した誤りのレコードが、入力ファイルに指定した内容で出力されます。

本オプションを省略すると、入力ファイル中に1件でも属性エラーを含む誤りのレコードを検出した時点で処理を中断します。

表の創成(複数DSIの一括挿入)

複数の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指定

1つの入力ファイルのデータを、複数のDSIに一度に挿入する場合、同時に創成する表のDSI名を記述したファイルを指定します。表のDSIは、同一の表に対する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) インデックス並列創成指定

インデックス並列創成指定

表のDSIにインデックスが定義されていて、DSIの創成を高速に処理したい場合に指定します。本オプションを指定した場合は、本オプションの省略時よりも作業用領域を必要としますので、注意が必要です。

参照

rdbsloaderコマンドで使用する作業用領域の見積りについては、“Symfoware Server コマンドリファレンス”を参照してください。

表の創成(分割値範囲外データエラー指定)

入力ファイルに含まれる分割値範囲外のデータを、エラーとする場合の指定例を以下に示します。

$ rdbsloader -mi -i 在庫管理DB.在庫表DSI -E OUTER_SPLIT_VALUE  -f 20
                                                   (1)
             -t /disk3/rdb/data/stock5.data

(1) 分割値範囲外データエラー指定

分割値範囲外データエラー指定

分割格納が定義された表のDSIを処理するとき、入力ファイルにDSIの分割値の範囲外であるデータが存在した場合、異常データとして扱います。

本指定を省略すると、入力ファイル中に分割値範囲外データが含まれている場合、該当データを処理の対象外として処理を続行し、正常終了します。

インデックスの創成

インデックスのDSIにデータを挿入する場合の指定例を以下に示します。

$ rdbsloader  -x  -i 在庫管理DB.製品名IXDSI  -f 20
              (1)
              -s /disk3/rdb/data/work

(1) インデックスの創成指定

インデックスの創成指定

インデックスのDSIを創成する場合に指定します。

4.1.1.3 外部ファイルの文字コード系の考慮

RDBコマンドが以下のロード/アンロード系のコマンドの場合、データベースに格納されるデータの文字コード系と異なる文字コード系を使用して処理することが可能です。

これは、テキスト形式の外部ファイルデータを使用する場合に、RDBコマンドのオプションで指定することが可能となります。

参照

オプションの指定方法の詳細は、“Symfoware Server コマンドリファレンス”を参照してください。

オプションを指定せずにロードまたはアンロードを行う場合の外部ファイルの文字コード系は、データベースに格納されるデータの文字コード系と同じ文字コード系にする必要があります。

4.1.1.4 プラットフォーム間の外部ファイルのアンロードとロードの考慮

同じプラットフォームまたは他のプラットフォームのSymfoware Serverあるいは別のPRIMEFLEX for HA Databaseから、以下のアンロード系のコマンドにより取得した外部ファイルを用いて、以下のロード系のコマンドで処理する場合についての注意事項を示します。

以下に、アンロードを実行(外部ファイルの取得)するプラットフォームと、ロードを実行するプラットフォームの組合せについての実行可否と注意事項を、外部ファイルの形式ごとに示します。

バイナリ形式

バイナリ形式で取得した外部ファイルは、以下の場合にはロードできません。

○: データベースに格納されるデータの文字コード系が同じ場合には可能

×: 不可能

テキスト形式

外部ファイルの文字コード系がデータベースに格納されるデータの文字コード系と異なる場合には、外部ファイルの文字コード系をコマンドのオプションで指定する必要があります。

詳細については、“4.1.1.3 外部ファイルの文字コード系の考慮”を参照してください。

表4.4 テキスト形式でのアンロードとロード

  

アンロード

Solaris

Linux

Windows

ロード

Solaris

Linux

Windows

○: 可能(文字コード系が異なる場合にはオプションの指定が必要)

注意

コマンドと表の列定義の組合せによっては、テキスト形式でのアンロードができない場合があります。詳細については、“Symfoware Server コマンドリファレンス”を参照してください。