名前
rdbsuloader -- DSIの一括更新
形式
rdbsuloader -m {{ar [, 列名 [{,列名} ...]] } | { u [ , 列名 [{ ,列名 } ...]]} | { d [ , 列名 [{ ,列名 } ...]]} | { c [ , 列名 [{ ,列名 } ...]]} } -i データベース名.表のDSI名 [ -h ] [ { -f インデックスのページ内未使用率 [ ,インデックスのDSI名]} ... ] [ { -s [ DSI名,] 作業用ディレクトリパス名} ...] [ { -t | -o } ] [ -j { EUC_S90 | SJIS | UNICODE } ] [ -n ] [ -p 区切り文字 ] [ -l { 囲み文字 | NONE_VALIDSPACE | NONE} ] [ -e ] [ -c 列名[{ ,列名 } ...] ] [ -r { エラー件数 | ALL } ,エラーデータ出力ファイル名] [ { -w { f | d } ,作業用ディレクトリパス名 } ... ] [ -U NCHAR=UCS2B ] [ -E OUTER_SPLIT_VALUE ] 入力ファイル名 [{ 入力ファイル名} ... ]
機能説明
入力ファイルのデータを使用して、表のDSIを更新します。
表のDSIにインデックスのDSIが定義されている場合には、そのすべてのインデックスのDSIも同時に更新します。
入力ファイルの記述形式にて、ファイル形式がテキスト形式で、区切り記号がコンマ(,)の場合、CSV形式のファイルで入力できます。
オプション
DSIへのデータの置換、更新、削除またはこれらの混在の処理モードを指定します。
表のDSIに、入力ファイルで指定したデータを置換または追加します。
列名の並びに指定した列に関して、値が一致するデータが表に存在した場合に、表の行を入力データで置換します。
一致するデータが表に存在しない場合は、入力データを表に追加します。
列名の並びを省略した場合は、PRIMARY KEYが指定されたものとして処理します。
また、列名の並びを省略し、PRIMARY KEYが定義されていない場合は、エラーとなります。
列名の並びで指定した列に対して、表と入力データの値が一致する行について、表の行を入力データの値によって更新します。
列名の並びで指定した列に対して、表に一致する行のない入力データは無視されます。
列名の並びを省略した場合は、PRIMARY KEYが指定されたものとして処理します。
また、列名の並びを省略し、PRIMARY KEYが定義されていない場合は、エラーとなります。
なお、-cオプションで列名を指定している場合、更新対象になる行の中で、-cオプションに指定されなかった列の値は変化しません。
列名の並びで指定した列に対して、表と入力データの値が一致する行について、表の行を削除します。
列名の並びで指定した列に対して、表に一致する行のない入力データは無視されます。
列名の並びを省略した場合は、PRIMARY KEYが指定されたものとして処理します。
また、列名の並びを省略し、PRIMARY KEYが定義されていない場合は、エラーとなります。
データの置換、更新および削除を入力ファイルのレコードごとに指定することができます。
列名の並びを省略した場合は、PRIMARY KEYが指定されたものとして処理します。
また、列名の並びを省略し、PRIMARY KEYが定義されていない場合は、エラーとなります。
置換、更新または削除の対象とする表のDSI名を指定します。
なお、表のDSI名には、SEQUENTIAL構造のDSIのみ指定できます。
表のDSIにインデックスが定義されている場合、DSIの創成を高速に処理したいときに指定します。
本オプションを指定した場合は、本オプションの省略時よりも作業用領域を多く必要とします。
作業用領域の見積りについては、-sオプションを参照してください。
インデックスのページ内未使用率を百分率で指定します。
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 : 意味エラー
本コマンドが、インデックス作成時に利用する作業用領域のディレクトリパス名を絶対パス名で指定します。
省略すると、Symfoware/RDBがインストールされているディレクトリ\TMP(たとえば、C:\SFWSV\RDB\TMP)が使用されます。
なお、作業用ディレクトリパス名に指定できる長さは、228バイトまでです。
作業用領域として必要な容量の見積りを以下に示します。
-hオプションを指定しない場合
作業用領域 = Size1
Size1 : すべてのインデックスのDSIのソート作業域のうち最大のもののサイズ
-hオプションを指定する場合
作業用領域 = Size2
Size2 : すべてのインデックスのDSIのソート作業域の合計サイズ
インデックスのDSIのソート作業域のサイズの見積りを以下に示します。
これらは、上記のSize1およびSize2の算出に使用します。
インデックスがBTREE構造の場合
ソート作業域のサイズ = (Size3 * 2 + 26) * レコード件数
Size3 : インデックスを構成する列の長さの合計
インデックスがXML構造の場合
ソート作業域のサイズ = (Size3 * 2 + 36) * 検索対象となる要素・属性の数
Size3 : インデックスに定義されている検索パスの長さの最大
上記のうちSize3において、さらに以下の見積りが必要です。
列のデータ型がCHARACTER(VARYING含む)、もしくはNATIONAL CHARACTER(VARYING含む)のとき、その列の長さを1.5倍にします。
入力ファイルがテキスト形式の場合に指定します。
本オプションを省略した場合は、バイナリ形式となります。
入力ファイルが可変長バイナリ形式である場合に指定します。
可変長バイナリ形式とは、可変長属性の列に対するデータが、その有効長分だけで表現されている形式です。
本オプションを省略した場合は、可変長属性の列に対するデータが、定義長分で表現されている形式とみなされます。
入力データのコード系を指定します。
入力データのコード系は、以下のものが指定できます。
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 \"
入力ファイルがテキスト形式の場合に、1レコード中の最終のデータ項目の後(間に空白があってもよい)に区切り文字がある場合に指定します。
本オプションを省略した場合は、1レコード中の最終のデータ項目の後に区切り文字(空白を除く)は指定できません。
入力ファイルのデータの並びを、表の列名で指定します。
本オプションを省略した場合は、表定義の列名の並び順となります。
データの置換(-marオプション) の場合、指定されなかった列に対応するデータは表定義で定義したDEFAULT句の値になります。 DEFAULT句を定義していない場合には、NULL値になります。 DEFAULT句を定義せず、NOT NULLを定義している列は、省略することができません。なお、置換対象の行を特定するキーを構成する列は本オプションの列名の並びに含む必要があります。
データの更新(-muオプション)の場合、指定されなかった列の値は更新されません。更新対象の行を特定するキーを構成する列は、 -cオプションの列名の並びに含む必要があります。
データの削除(-mdオプション)の場合、削除対象の行を特定するキーを構成する列は、-cオプションの列名の並びに指定する必要があります。それ以外の列が指定されても、行を特定するためには使用されず無視されます。
置換、更新または削除を入力ファイルの各レコードで指定する(-mcオプション)場合、処理対象の行を特定するキーを構成する列は、-cオプションの並びに含む必要があります。また、DEFAULT句を定義せず、NOT NULLを定義している列は省略することができません。指定されなかった列に対応するデータの扱いは、データの置換および更新と同じです。
表のDSIのデータ処理中にカラム属性エラーが発生した場合、コマンド処理を中断するまでの発生エラー件数の限界値を指定します。
エラー件数に指定した件数に達するまでカラム属性エラーが発生しても、カラム属性エラーを含んだレコードを処理の対象としないで処理を続行します。
エラー件数には1以上の数値を指定し、エラーデータ出力ファイル名は絶対パス名で指定します。
エラーデータ出力ファイル名に指定できる長さは、256バイトまでです。
エラーデータ出力ファイルには、カラム属性エラーを検出したすべてのレコードが、入力ファイルに指定した内容で出力されます。
エラー件数にキーワード“ALL”を指定すると、入力ファイル中でカラム属性エラーを検出しても入力データの最後まで処理を続行し、エラーを検出したすべてのレコードがエラーデータ出力ファイルに出力されます。
本オプションを省略した場合は、入力ファイル中に1件でもカラム属性エラーを含む誤りのファイルを検出した場合、コマンド処理を中断します。
分割値範囲外データをエラー対象に含める場合には-Eオプションを指定してください。-Eオプションを省略した場合、本オプションを指定しても処理対象のDSIの分割値の範囲外であるデータは読みとばされ、エラーデータ出力ファイルには出力されません。
コマンドが異常終了した場合は、エラーデータ出力ファイルは削除されます。
一意性制約違反のデータは対象となりません。
入力ファイルおよび表のDSIのデータを処理するための作業域を絶対パス名で指定します。
-wfオプション指定により、入力ファイルのデータで使用する作業域を、-wdオプション指定により表のDSIのデータで使用する作業域を指定します。
省略すると、Symfoware/RDBがインストールされているディレクトリ\TMP(たとえば、C:\SFWSV\RDB\TMP)が使用されます。
なお、作業用ディレクトリパス名に指定できる長さは、228バイトまでです。
作業用領域として必要な容量の見積りを以下に示します。
作業用領域の合計サイズ = Size1 + Size2
Size1 : 入力データで使用する作業域サイズ
Size2 : DSIのデータで使用する作業域サイズ
入力データで使用する作業域サイズの見積りを以下に示します。
これらは、上記のSize1の算出に使用します。
入力データで使用する作業域サイズ = (Size3×2 + 16 + Size4) ×入力レコード件数
Size3 : -mオプションで指定した列の長さの合計サイズ
Size4 : 表を構成する列の長さの合計サイズ
DSIのデータで使用するサイズの見積りを以下に示します。
これらは、上記のSize2の算出に使用します。
DSIのデータで使用する作業域サイズ = (Size5×2 + 16 + Size6) ×DSI内レコード件数
Size5 : -mオプションで指定した列の長さの合計サイズ
Size6 : 表を構成する列の長さの合計サイズ
入力データの各国語文字列型についてのコード系がUCS2のバイトスワップ形式(リトルエンディアン)の場合に指定します。
なお、本オプションは、対象データベースのコード系がUNICODEかつ入力データがバイナリ形式の場合のみ指定できます。
分割格納が定義された表のDSIを処理するとき、入力ファイルにDSIの分割値の範囲外であるデータが存在した場合、異常データとして扱います。本指定を省略した場合は、そのデータを処理の対象外として処理を続行します。
本指定は、-marオプションまたは-mcオプションによりデータの置換または追加を指定している場合に有効となります。その他の場合は無視します。
本指定を省略した場合は以下の動作となります。
-marオプションを指定してDSIの既存のデータを置換または-muオプションを指定してDSIの既存のデータを更新した結果、そのデータが分割格納の範囲外になる場合、本コマンドは異常終了します。
-marオプションを指定してDSIに新たに追加するデータが分割格納の範囲外である場合、そのデータを処理の対象外として処理を続行します。
本機能はコマンド実行時の環境変数での指定もできます。
環境変数での指定の詳細については、“RDB運用ガイド”の“初期創成のためのコマンド”を参照してください。
入力するデータのファイル名を指定します。
ファイル名は、絶対パス名で指定します。
入力ファイルの形式には、バイナリ形式およびテキスト形式があります。
複数のファイルを指定した場合は、すべてのファイルからデータが入力されます。
ただし、バイナリ形式とテキスト形式のファイルを混在して指定することはできません。
入力ファイル名に指定できる長さは、256バイトまでです。
なお、入力ファイルの形式の詳細については、“RDB運用ガイド”の“外部ファイルの形式”を参照してください。
使用例
在庫管理DBに属する在庫表DSIのデータを置換します。
入力ファイル名は、“c:\rdb\data\suloader.dat”とします。
ファイルはバイナリ形式で、各国語文字列型がUCS2のバイトスワップ形式(リトルエンディアン)とします。
rdbsuloader -mar -i 在庫管理DB.在庫表DSI -f 20,在庫表インデックスDSI -f 10 -s c:\rdb\work -w f,c:\rdb2 -w d,c:\rdb4 -U NCHAR=UCS2B c:\rdb\data\suloader.dat
倉庫番号と製品名のみデータを更新します。
正常な入力レコードのみを更新し、属性エラーを検出した誤りのレコードを“c:\rdb\data\rr.txt”に出力します。
入力ファイル名は、“c:\rdb\data\suloader.txt”とします。
ファイルのデータは、テキスト形式とします。
rdbsuloader -mu,倉庫番号,製品名 -i 在庫管理DB.在庫表DSI -s c:\rdb\work -t -r 10,c:\rdb\data\rr.txt -c 倉庫番号,製品名 -w f,c:\rdb -w d,c:\rdb4 c:\rdb\data\suloader.txt
在庫管理DBに属する在庫表DSIのデータを削除します。
rdbsuloader -md -i 在庫管理DB.在庫表DSI -t -w f,c:\rdb -w d,c:\rdb4 c:\rdb\data\suloader.txt
在庫管理DBに属する在庫表DSIのデータを更新します。
rdbsuloader -mc -i 在庫管理DB.在庫表DSI -t -w f,c:\rdb -w d,c:\rdb4 c:\rdb\data\suloader.txt
終了ステータス
以下の終了ステータスが返されます。
0 : 正常終了
0以外 : 異常終了
注意
本コマンドで指定できるDSIは、SEQUENTIAL構造のDSIのみです。
表のレコードの定義長がページ長を超える場合は、本コマンドを実行することはできません。表のレコードの定義長は、“RDB運用ガイド(データベース定義編)”の“データベーススペースの所要量の見積り”を参照して算出してください。
バイナリ形式の入力ファイルの作成方法を以下に説明します。
ファイルの先頭から表の各行のデータを、入力する行数分だけ並べて設定します。各行のデータは、-cオプションで指定した列名の順にそれぞれの列のデータを設定します。 -cオプションを省略した場合は、表に含まれる列の定義順にそれぞれの列のデータを設定します。
-nオプションを指定しない場合、それぞれの列データの先頭にNULL表示を設定します。NULL表示は2バイトの符号付き2進数の領域です。表の列にNULL値を格納する場合、-1(16進でffff)を設定します。そうでない場合には、0(16進で0000)を設定します。このとき、列データに設定した値が表の列に格納されます。
-nオプションを指定した場合、表の列にNULL値を格納することはできません。
-oオプションを省略した場合は、ファイル全体のデータ長が、1行分のデータ長の整数倍でないとエラーになります。
ファイル中の改行文字はデータの一部として処理されるため、1行分のデータの区切りとして使用しないでください。
-mcオプションを指定する場合は、各行のデータの先頭に操作種別を設定します。操作種別は2バイトの符号付き2進数の領域です。操作種別は、該当レコードが、表への追加、置換、更新または削除のうち、どの操作を行うかを表します。操作種別に設定する値と意味を以下に示します。
設定する値 | 意味 | 備考 |
---|---|---|
1(16進数で0001) | 追加するレコード | - |
2(16進数で0002) | 更新するレコード | -muオプション |
3(16進数で0003) | 削除するレコード | -mdオプション |
4(16進数で0004) | 追加または置換する | -marオプション |
備考.操作種別に上記以外の値を設定するとエラーになります。
各行の先頭の列データ(またはNULL表示)は、3バイト目から設定します。
テキスト形式の入力ファイルの作成方法を以下に説明します。
1行分のデータは、列に対応するデータ項目の集まりで構成します。各データ項目の間は、区切り文字(省略値はコンマ(,))で区切ります。データ項目には、文字項目と数値項目があり、文字項目は囲み文字(省略値は二重引用符("))で文字列を囲み、数値項目は数値定数の文字列をそのまま指定します。また、1行分のデータの終了は改行記号を指定します。
データ項目にNULL値を指定する場合は、文字項目の場合でも数値項目の場合でも区切り文字の間に何も指定しない形で指定します。また、データ項目が1行の最後の列である場合は、直前のデータ項目との区切り文字を指定した後に改行記号が続くことになります。なお、NULL値のデータ項目は、対応する表定義の列にNOT NULLが指定されている場合は格納できません。
-mcオプションを指定する場合は、各行のデータの先頭1バイトに操作種別を設定します。操作種別は、1文字の文字で設定します。操作種別は、該当レコードが、表へのデータの置換、更新または削除のうち、どの操作を行うかを表します。操作種別に設定する文字と意味を以下に示します。
設定する | 意味 | 備考 |
---|---|---|
a | 追加するレコード | - |
u | 更新するレコード | -muオプション |
d | 削除するレコード | -mdオプション |
r | 追加または置換する | -marオプション |
備考.操作種別に上記以外の値を設定するとエラーになります。
各レコード中で、操作種別の次の1バイト(1行分のデータの2バイト目)には、区切り文字を設定します。
そして、先頭の列データは、3バイト目から設定します。
本コマンドで更新を行う場合、表のDSIおよび関連するインデックスのDSIは、創成済または初期化済であることが必要です。
入力ファイル中に格納対象である行のデータが1件も存在しない場合であっても、本コマンドは正常終了します。
本コマンドの実行時には、rdbrtrコマンドによるリカバリレベルの切替えに関係なくログデータの取得は行いません。このため、DSIの容量不足などにより異常終了した場合、該当DSIをアクセス禁止状態にします。
本コマンドの実行後における、メディアリカバリとの関係を以下に示します。
対象のDSIに対し、アーカイブログを適用したメディアリカバリ(rdbrcvコマンドのFWモード)を行う場合は、本コマンドの実行以前に取得した退避データを使用することはできません。本コマンドの実行後には、rdbdmpコマンドで退避データを取得してください。
アーカイブログを適用する必要がない場合は、本コマンドの実行以前に取得した退避データを使用したメディアリカバリ(rdbrcvコマンドのLOADモード)を実施した後に、本コマンドを再実行することにより、データベースをリカバリすることができます。
本コマンドを実行する場合、処理対象のDSIが所属する実表に対して、以下の権限が必要です。
-marオプション : INSERT権、UPDATE権
-muオプション : UPDATE権
-mdオプション : DELETE権
-mcオプション : INSERT権、UPDATE権、DELETE権
必要な権限を含むロールを付与されている利用者が、本コマンドを実行したい場合は、セキュリティ形態パラメタのROLE_RANGEパラメタの設定が必要です。ROLE_RANGEパラメタの詳細については、“SQLリファレンス”の“SET SYSTEM PARAMETER文”を参照してください。
-mar、-mu、-mdおよび-mcオプションを指定する場合、データを置換、更新、または削除するためのキーとする並びには、以下のデータ型の列が指定できます。
SMALLINT
INTEGER
NUMERIC
DECIMAL
CHARACTER (VARYINGを除く)
NATIONAL CHARACTER (VARYINGを除く)
TIME
INTERVAL
TIMESTAMP
DATE
本コマンドの実行時に指定した表のDSIまたは関連するインデックスのDSIがメモリに常駐している場合には、自動容量拡張を行うことができません。DSIの容量が不足しないように監視してください。詳細は“RDB運用ガイド”の“DSIの容量監視”を参照してください。