名前
rdbsaloader -- データの追加処理
形式
rdbsaloader -ma -i データベース名.表のDSI名 [{ -s 作業用ディレクトリパス名}... ] [{ -f インデックスのページ内未使用率 [ ,インデックスのDSI名 ]} ... ] [{ -t | -o }] [ -j { EUC_S90 | SJIS | UNICODE }] [ -n ] [ -p 区切り文字 ] [ -l { 囲み文字 | NONE_VALIDSPACE | NONE } ] [ -e ] [ -c 列名 [{ ,列名} ...]] [ -r { エラー件数 | ALL } ,エラーデータ出力ファイル名] [ -U NCHAR=UCS2B ] [ -E OUTER_SPLIT_VALUE ] 入力ファイル名 [{ 入力ファイル名} ... ]
機能説明
入力ファイルのデータから、表のDSIにデータを追加します。表のDSIにインデックスが定義されている場合には、そのすべてのインデックスのDSIも同時に更新します。
入力ファイルがテキスト形式で、区切り記号がコンマ(,)の場合、CSV形式のファイルで入力できます。
オプション
表のDSIに、入力ファイルで指定したデータを追加します。
データを追加する表のDSIのDSI名を指定します。
なお、表のDSI名にはSEQUENTIAL構造のDSIのみ指定できます。
本コマンドが利用する作業用領域のディレクトリパス名を絶対パス名で指定します。
省略すると、Symfoware/RDBがインストールされているディレクトリ\TMP(たとえば、C:\SFWSV\RDB\TMP)が使用されます。
なお、作業用ディレクトリパス名に指定できる長さは、228バイトまでです。
作業用領域として必要な容量の見積りを以下に示します。
以下について関連する全てのインデックスのソート作業域のうち最大のもののサイズ
インデックスがBTREE構造の場合
ソート作業域サイズ = (インデックスを構成する列の合計長 * 2 + 26) * (入力ファイル中のレコード件数 + 表のDSIに格納済みのレコード件数)
インデックスがXML構造の場合
ソート作業域サイズ = (インデックスに定義されている検索パスの長さの最大サイズ * 2 + 36) * (入力ファイル中および表のDSIに格納済みのXML文書に対して検索対象となる要素・属性の数)
備考. 列のデータ型がCHAR(VARYING含む)、NCHAR(VARYING含む)の場合は列の長さを1.5倍にします。(BTREE構造の場合とXML構造の場合)
インデックスのページ内未使用率を百分率で指定します。
0から99までの値が指定できます。
本オプションは、表のDSIに定義しているインデックス単位に複数指定することができます。
インデックスのDSI名を省略した場合、インデックスのページ内未使用率は、すべてのインデックスに適用されます。
また、本オプションを省略した場合、インデックスのページ内未使用率は0となります。
表のDSIに、IXDSI1、IXDSI2、IXDSI3の3個のインデックスのDSIが定義されている場合の-fオプションの指定例と各インデックスの未使用率について以下に示します。
-fオプションの指定例 | IXDSI1 | IXDSI2 | IXDSI3 | |
---|---|---|---|---|
1) | -fオプションの指定なし | 0 | 0 | 0 |
2) | -f 10,IXDSI1 | 10 | 20 | 30 |
3) | -f 10,IXDSI2 | 0 | 10 | 0 |
4) | -f 10,IXDSI2 -f 20 | 20 | 10 | 20 |
5) | -f 10 | 10 | 10 | 10 |
以下のような指定は、エラーとなります。
6)-f 10 -f 20 : 構文エラー
7)-f 20,IXDSI4 : 意味エラー
入力ファイルがテキスト形式の場合に指定します。
本オプションを省略した場合は、バイナリ形式となります。
入力ファイルが可変長バイナリ形式である場合に指定します。
可変長バイナリ形式とは、可変長属性の列に対するデータが、その有効長分だけで表現されている形式です。
本オプションを省略した場合は、可変長属性の列に対するデータが定義長分で表現されている形式とみなします。
入力データのコード系を指定します。
入力データのコード系は、以下のものが指定できます。
EUC_S90 : EUCコードのS90コード
SJIS : シフトJISコード
UNICODE : UTF8
本オプションを省略した場合は、処理対象のデータベースのコード系が指定されたものとみなします。
なお、本オプションは、入力ファイルのデータがテキスト形式の場合にのみ指定できます。
入力ファイルの全カラムの先頭に、NULL表示用の領域を持たない場合に指定します。
本オプションを省略した場合は、全カラムの先頭にNULL表示用の領域を持つものとして処理されます。
なお、本オプションは、バイナリ形式の場合にのみ指定できます。
入力ファイルがテキスト形式の場合に、列データ間の区切り記号として使用する1文字(区切り文字)を指定します。
区切り文字は、ASCII文字の範囲内( 0x7f以下)で 指定します。
ただし、改行文字(\n)と空文字(\0)を区切り文字として指定することはできません。
また、区切り文字としてシステムに特別の意味をもつ文字を指定する場合は、二重引用符(")はエスケープ記号(\)を直前に指定する必要があり、それ以外の文字の場合は二重引用符(")で囲む必要があります。
本オプションを省略した場合は、区切り記号としてコンマ(,)を使用するものとして処理します。
なお、テキスト形式のデータに含まれる可能性のある文字(たとえば、英数字、プラス(+ )、マイナス(- )、ピリオド(. )など)を区切り文字に指定した場合、テキスト形式のデータ中にある、これらの文字は区切り文字として扱われますので、指定する場合は注意してください。
以下にテキスト形式のデータ中での区切り文字の扱いを示します。
区切り文字に空白を指定した場合、連続する空白は1つの区切り文字として扱います。
区切り文字に空白を指定した場合、テキスト形式のデータにNULL値を含めることができなくなりますので注意してください。
空白以外の区切り文字を指定した場合、区切り文字間の空白や、囲み文字の外側と区切り文字の間の空白は読みとばされます。
空白以外の区切り文字が連続する場合、それぞれの区切り文字の間にNULL値のデータが1個あるものとして扱います。
行の最後の区切り文字と改行文字の間は1項目として扱います。あるデータ項目以降がすべてNULL値であっても、最後の項目まで区切り文字を指定する必要があります。
文字属性以外の項目データに区切り文字が存在する場合でも囲み文字で囲むことはできません。したがって、浮動小数点型のデータのように、ピリオド(.)や符号(+または-)などを含む数値型データを記述する場合、これらの文字を区切り文字に指定しないようにしてください。
入力ファイルがテキスト形式の場合に、文字列型、各国語文字列型、日時型またはBLOB型のデータの囲み記号の扱いを指定します。
囲み記号で文字列データの前後を囲む場合は、囲み記号として使用する1文字(囲み文字)を指定します。
囲み文字には、二重引用符(")、単一引用符(')のいずれかの1文字を指定します。
ただし、-pオプションで指定した区切り文字と同じ文字を指定することはできません。
囲み記号で文字列データの前後を囲まない場合は、NONE_VALIDSPACEまたはNONEを指定します。
ただし、文字列データ中に、-pオプションで指定した区切り文字を含む場合、または改行記号を含む場合は、必ず囲み記号を指定し、NONE_VALIDSPACEまたはNONEを指定できません。
NONE_VALIDSPACEを指定した場合には、区切り文字から区切り文字までをそのまま格納します。
ただし、-pオプションで区切り文字に空白を指定できません。
NONEを指定した場合には、前後の空白を削除して格納します。
本オプションを省略した場合、囲み文字として二重引用符(")を使用するものとして処理します。
以下にテキスト形式のデータでの囲み文字の扱いを示します。
囲み記号で囲まれた文字列データ内に、囲み記号と同じ文字を使用する場合、連続する囲み文字を2つ指定することにより、1つの文字データとみなします。
囲み記号に二重引用符(")を指定した場合
テキストの指定 :
~ ,"A""BC", ~
データの値 :
A"BC
囲み文字を指定した場合、すべての文字列データは必ず指定した囲み文字で囲む必要があります。
囲み文字の種類と指定形式について以下に示します。
単一引用符(')
形式1(直前に(\)を付加)
-l \'
二重引用符(")
形式1(単一引用符で囲む)
-l '"'
形式2(直前に(\)を付加)
-l \"
入力ファイルがテキスト形式の場合に、1レコード中の最終のデータ項目の後(間に空白があってもよい)に区切り文字がある場合に指定します。
本オプションを省略した場合は、1レコード中の最終のデータ項目の後に区切り文字(空白を除く)は指定できません。
入力ファイルのデータの並びを表の列名で指定します。
本オプションを省略した場合は、表定義の列名の並び順となります。
表定義の列名を選択しない場合、表の列には表定義で指定したDEFAULT句の値を補います。
DEFAULT句が未定義の場合には、NULL値を補います。
表のDSIを追加するときにカラム属性エラーが発生した場合、コマンド処理を中断するまでの発生エラー件数の限界値を指定します。
エラー件数に指定した件数に達するまでカラム属性エラーが発生しても、カラム属性エラーを含んだレコードを処理の対象としないで処理を続行します。
エラー件数には1以上の数値を指定し、エラーデータ出力ファイル名は絶対パス名で指定します。
エラーデータ出力ファイル名に指定できる長さは、256バイトまでです。
エラーデータ出力ファイルには、カラム属性エラーを検出したすべてのレコードが、入力ファイルに指定した内容で出力されます。
エラー件数にキーワード“ALL”を指定すると、入力ファイル中でカラム属性エラーを検出しても入力データの最後まで処理を続行し、エラーを検出したすべてのレコードがエラーデータ出力ファイルに出力されます。
本オプションを省略した場合は、入力ファイル中に1件でもカラム属性エラーを含む誤りのファイルを検出した場合、コマンド処理を中断します。
分割値範囲外データをエラー対象に含める場合には-Eオプションを指定してください。-Eオプションを省略した場合、本オプションを指定しても処理対象のDSIの分割値の範囲外であるデータは読みとばされ、エラーデータ出力ファイルには出力されません。
コマンドが異常終了した場合は、エラーデータ出力ファイルは削除されます。
一意性制約違反のデータは対象となりません。
入力データの各国語文字列型についてのコード系がUCS2のバイトスワップ形式(リトルエンディアン)の場合に指定します。
なお、本オプションは、対象データベースのコード系がUNICODEかつ入力データがバイナリ形式の場合のみ指定できます。
分割格納が定義された表のDSIを処理するとき、入力ファイルにDSIの分割値の範囲外であるデータが存在した場合、異常データとして扱います。本指定を省略した場合は、そのデータを処理の対象外として処理を続行します。
本機能はコマンド実行時の環境変数での指定もできます。
環境変数での指定の詳細については、“RDB運用ガイド”の“初期創成のためのコマンド”を参照してください。
入力するデータのファイル名を指定します。
ファイル名は、絶対パス名で指定します。
入力ファイルの形式には、バイナリ形式およびテキスト形式があります。
複数の入力ファイルを指定した場合は、すべてのファイルからデータが入力されます。
ただし、バイナリ形式とテキスト形式のファイルを混在して指定することはできません。
入力ファイル名に指定できる長さは、256バイトまでです。
なお、入力ファイルの形式の詳細については、“RDB運用ガイド”の外部ファイルの形式を参照してください。
使用例
在庫管理DBに属する在庫表DSIにデータを追加します。
入力ファイル名は、“c:\rdb\data\stock_add.dat”とします。
ファイルはバイナリ形式で、各国語文字列型がUCS2のバイトスワップ形式(リトルエンディアン)とします。
rdbsaloader -ma -i 在庫管理DB.在庫表DSI -s c:\rdb\work -n -U NCHAR=UCS2B c:\rdb\data\stock_add.dat
在庫管理DBに属する在庫表DSIにデータを追加します。
入力ファイル名は、“c:\rdb\data\stock_add.txt”とします。
ファイルのデータはテキスト形式とします。
また、入力ファイル中で検出される属性エラーを含むレコード件数が10件を超えない間は追加処理を続行し、追加処理中に検出した誤りのレコードを出力する出力ファイル名を“c:\rdb\data\rr.txt”とします。
なお、作業域用ディレクトリは“c:\rdb\work”を使用します。
rdbsaloader -ma -i 在庫管理DB.在庫表DSI -r 10,c:\rdb\data\rr.txt -s c:\rdb\work -t c:\rdb\data\stock_add.txt
終了ステータス
以下の終了ステータスが返されます。
0 : 正常終了
0以外 : 異常終了
注意
本コマンドで指定できるDSIは、SEQUENTIAL構造のDSIのみです。
本コマンドでデータの追加を行う場合、指定した表のDSIと関連するインデックスのDSIは、すでにデータが格納済みの状態またはrdbfmtコマンドで初期化済みでなければなりません。
バイナリ形式の入力ファイルの作成方法を以下に説明します。
ファイルの先頭から表の各行のデータを、入力する行数分だけ並べて設定します。各行のデータは、-cオプションで指定した列名の順にそれぞれの列のデータを設定します。 -cオプションを省略した場合は、表に含まれる列の定義順にそれぞれの列のデータを設定します。
-nオプションを指定しない場合、それぞれの列データの先頭にNULL表示を設定します。NULL表示は2バイトの符号付き2進数の領域です。表の列にNULL値を格納する場合、-1(16進でffff)を設定します。そうでない場合には、0(16進で0000)を設定します。このとき、列データに設定した値が表の列に格納されます。
-nオプションを指定した場合、表の列にNULL値を格納することはできません。
-oオプションを省略した場合は、ファイル全体のデータ長が、1行分のデータ長の整数倍でないとエラーになります。
ファイル中の改行文字はデータの一部として処理されるため、1行分のデータの区切りとして使用しないでください。
テキスト形式の入力ファイルの作成方法を以下に説明します。
1行分のデータは、列に対応するデータ項目の集まりで構成します。各データ項目の間には、区切り文字(省略値はコンマ(,))で区切ります。データ項目には、文字項目と数値項目があり、文字項目は囲み文字(省略値は二重引用符("))で文字列を囲み、数値項目は数値定数の文字列をそのまま指定します。また、1行分のデータの終了は改行記号を指定します。
データ項目にNULL値を指定する場合は、文字項目の場合でも数値項目の場合でも区切り文字の間に何も指定しない形で指定します。また、データ項目が1行の最後の列である場合は、直前のデータ項目との区切り文字を指定した後に改行記号が続くことになります。なお、NULL値のデータ項目は、対応する表定義の列にNOT NULLが指定されている場合は指定できません。
本コマンドの実行時には、rdbrtrコマンドによるリカバリレベルの切替えに関係なくログデータの取得は行いません。このため、DSIの容量不足などにより異常終了した場合、該当DSIをアクセス禁止状態にします。
処理対象のDSIが所属する実表に対するINSERT権が必要です。
必要な権限を含むロールを付与されている利用者が、本コマンドを実行する場合は、セキュリティ形態パラメタのROLE_RANGEパラメタの設定が必要です。ROLE_RANGEパラメタの詳細については、“SQLリファレンス”の“SET SYSTEM PARAMETER文”を参照してください。
本コマンドは、DSI内の削除領域の再使用は行いません。
本コマンドの実行時に指定した表のDSIまたは関連するインデックスのDSIがメモリに常駐している場合には、自動容量拡張を行うことができません。DSIの容量が不足しないように監視してください。詳細は“RDB運用ガイド”の“DSIの容量監視”を参照してください。