FastExportには、インポートおよびエクスポートされたデータ ソースの位置情報を保存するための機能が組み込まれています。システムの再始動時に、FastExportはデータを再エクスポートしなくて済むため、非常に大型の応答セットを取得するSELECT文を使用する場合に、この機能は役に立ちます。
例えば、行数が5,000,000の表の場合は、以下の単一のSELECT文を使って、データをファイルにエクスポートします。
.EXPORT OUTFILE DATAFILE; SEL * FROM DATA_TABLE; .END EXPORT;
この文の実行中にシステムが再始動した場合は、エクスポート処理全体を最初からし直さなければなりません。
この種のシナリオは、単一のSELECT文をWHERE句を使用して複数の文に分割し、境界値をINFILEに格納すれば、回避できます。
先行する単一のSELECT文を以下の例と同様に分割します。
SEL * FROM DATA_TABLE WHERE FIELD1 BETWEEN 1 AND 1000000; SEL * FROM DATA_TABLE WHERE FIELD1 BETWEEN 1000001 AND 2000000; SEL * FROM DATA_TABLE WHERE FIELD1 BETWEEN 2000001 AND 3000000; SEL * FROM DATA_TABLE WHERE FIELD1 BETWEEN 3000001 AND 4000000; SEL * FROM DATA_TABLE WHERE FIELD1 BETWEEN 4000001 AND 5000000; Place all boundary values in INFILE as follows: --------------------------------------------------------------- FIRST FIELD SECOND FIELD --------------------------------------------------------------- FIRST RECORD 1 1000000 SECOND RECORD 1000001 2000000 THIRD RECORD 2000001 3000000 FOURTH RECORD 3000001 4000000 FIFTH RECORD 4000001 5000000 ---------------------------------------------------------------
その後、2番目の例でFastExportが複数の文を実行すると、これらの文は一度に1文ずつ送信されます。さらに、インポートおよびエクスポートのデータ ソースの位置が保存されます。
文の1つを処理している最中にシステムが再始動される場合、FastExportは、単一のSELECT文を使用した場合とは異なり、エクスポート処理全体を最初から再始動することはありません。その代わりに、失敗した文からエクスポート処理をし直します。
以下に示すスクリプトのサンプルは、INFILEからのデータをWHERE句に対して使用し、2例目に示した複数の文を作成します。
このスクリプトは、すべてのオペレーティング システムで、FastExportが動作している状態で使用できます。
.LOGTABLE LOG_TBL; /* define restart log */ .LOGON TDPR/username, password; /* DBC logon string */ .BEGIN EXPORT ; /* specify export function */ .LAYOUT BOUNDRIES; /* define the input data values */ .FIELD FROMVALUE * INTEGER; /* for SELECT constraint clause */ .FIELD TOVALUE * INTEGER; .IMPORT INFILE INDATAFILE /* define the file that contains */ LAYOUT BOUNDRIES; /* the input data values */ .EXPORT OUTFILE OUTPUTFILE ; /* identify the destination source*/ /* for exported data */ SEL * FROM DATA_TABLE /* provide the SQL SELECT */ /* statement */ WHERE COLUMN1 BETWEEN /* with values provided by the */ /* IMPORT command */ :FROMVALUE AND :TOVALUE ; .END EXPORT; /* terminate the export operation */ .LOGOFF; /* disconnect from the DBS */