エラー テーブルの情報の解析 - Parallel Data Pump

Teradata® Parallel Data Pumpリファレンス

Product
Parallel Data Pump
Release Number
17.10
Published
2021年6月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/oqw1608578437373.ditamap
dita:ditavalPath
ja-JP/oqw1608578437373.ditaval
dita:id
B035-3021
Product Category
Teradata Tools and Utilities

問題を追究して修正するためにエラー表の情報を解析する方法を、次のTeradata TPumpタスクを使って説明します。このタスクは大幅に省略されていて、DMLコマンドおよびIMPORTコマンドだけが記載されています。タスクの後に、問題を追究し修正するための一連のアクションを記載します。

SEQ TYPE SEQ # Statement
-------- --- -------------------------------------------------------
DML      001   .DML LABEL FIRSTDML;
STMT     001   INSERT INTO table1 VALUES( :FIELD1, :FIELD2 );
STMT     002   UPDATE table2 SET field3 = :FIELD3 WHERE field4 =:FIELD4;

DML      002   .DML LABEL SECNDDML;
STMT     001   DELETE FROM table3 WHERE field3 = :FIELD3;

IMPORT   001   .IMPORT INFILE file1 LAYOUT layout1
APPLY    001   APPLY FIRSTDML;

IMPORT   002   .IMPORT INFILE file2 LAYOUT layout2
APPLY    001   APPLY FIRSTDML
APPLY    002   APPLY SECNDDML;

この例では、「Statement」列がユーザー入力を表わします。「SEQ #」列と「SEQ TYPE」列は、それぞれの文に割り当てられた順序番号と順序タイプです。このタスクの使用中にエラーが発生し、エラー表の情報が次のようになっている場合、この情報から、エラーが起きた場所と、エラーの発生時に実行されていた内容を判別できます。

ImportSeq DMLSeq SMTSeq ApplySeq SourceSeq DBCErrorCode DBCErrorField
---       ---    ---    ---      --------- -----        ------------
002       001    002    001          20456  2679              field3 

次の一連の手順は、エラー表のこの行から情報を取り出して解析するための分析手順を示しています。

  1. DMLSeqフィールドを見て、実行されていた文を見つけます。このフィールドは、順序番号が001になっています。
  2. SMTSeqフィールドを見ます。このフィールドの順序番号002は、実行中にエラーが起きたことを意味しています。 最初のDMLコマンド内のその文、つまり上のタスクではUPDATE文を変更します。
  3. DMLコマンドが2度(各IMPORTで1度ずつ)使われていることをスクリプトが示しているかどうか調べます。
  4. ImportSeqフィールドの値002は、2番目のIMPORT句でエラーが発生したことを示しています。
  5. ApplySeqフィールドの値001は、エラー発生時に実行されていた句の最初の適用でエラーが起きたことを意味しています。
  6. DBCErrorCodeフィールドの値2679は、次のものを示しています。

    The format or data contains a bad character

    これは、クライアントから無効なデータが送られたことを意味しています。

  7. エラー行のErrorFieldフィールドは、表のfield3の構築中にエラーが起きたことを示しています。
  8. したがって、スクリプトは、クライアント データの:FIELD3からfield3を構築している時にエラーが起きたことを示しています。
  9. スクリプトのLAYOUT句は、クライアントから送られた行の中のどこに問題を起こしたデータがあるかを示しています。
  10. スクリプトは、エラーを起こしたIMPORT句がfile2をロードしていたことを示しています。これは、どのようなエラーが発生したか、エラーを検出したのはどの文か、そしてどのファイルにエラーがあるかを意味しています。
  11. エラー表のSourceSeqフィールドは、問題の箇所を特定し、このファイルの第20456番目のレコードに問題があったことを示しています。このようにして問題が追究できたので、エラーを修正できます。

ほとんどの場合、エラー表に現われる問題を追究するためには、この例のような詳しい調査は必要ありません。この例で使ったエラーは、エラー表のすべての情報を活用する目的で選ばれたものです。一般には、エラー表の1つか2つの項目を調べれば、問題の箇所がわかり、問題を修正できます。