問題を追究して修正するためにエラー表の情報を解析する方法を、次の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
次の一連の手順は、エラー表のこの行から情報を取り出して解析するための分析手順を示しています。
- DMLSeqフィールドを見て、実行されていた文を見つけます。このフィールドは、順序番号が001になっています。
- SMTSeqフィールドを見ます。このフィールドの順序番号002は、実行中にエラーが起きたことを意味しています。 最初のDMLコマンド内のその文、つまり上のタスクではUPDATE文を変更します。
- DMLコマンドが2度(各IMPORTで1度ずつ)使われていることをスクリプトが示しているかどうか調べます。
- ImportSeqフィールドの値002は、2番目のIMPORT句でエラーが発生したことを示しています。
- ApplySeqフィールドの値001は、エラー発生時に実行されていた句の最初の適用でエラーが起きたことを意味しています。
- DBCErrorCodeフィールドの値2679は、次のものを示しています。
The format or data contains a bad character
これは、クライアントから無効なデータが送られたことを意味しています。
- エラー行のErrorFieldフィールドは、表のfield3の構築中にエラーが起きたことを示しています。
- したがって、スクリプトは、クライアント データの:FIELD3からfield3を構築している時にエラーが起きたことを示しています。
- スクリプトのLAYOUT句は、クライアントから送られた行の中のどこに問題を起こしたデータがあるかを示しています。
- スクリプトは、エラーを起こしたIMPORT句がfile2をロードしていたことを示しています。これは、どのようなエラーが発生したか、エラーを検出したのはどの文か、そしてどのファイルにエラーがあるかを意味しています。
- エラー表のSourceSeqフィールドは、問題の箇所を特定し、このファイルの第20456番目のレコードに問題があったことを示しています。このようにして問題が追究できたので、エラーを修正できます。
ほとんどの場合、エラー表に現われる問題を追究するためには、この例のような詳しい調査は必要ありません。この例で使ったエラーは、エラー表のすべての情報を活用する目的で選ばれたものです。一般には、エラー表の1つか2つの項目を調べれば、問題の箇所がわかり、問題を修正できます。