回復プロセスでは再始動ログ テーブルが重要な働きをします。万一、再始動ログ テーブルが失なわれると、中断されたTeradata TPumpジョブを回復する手段がなくなります。
再始動ログ テーブルに加えて、Teradata TPumpは1つのエラー テーブルと多数のマクロを作成します(各マクロは、現行のIMPORT内に含まれる1つのDML SQL文に対応します)。これらのデータベース オブジェクトが失なわれた場合、これを再作成することは可能です。ただし、再作成には手間がかかるため、予防措置をとる方がはるかに効率的です。
Teradata TPumpはデータベース オブジェクトに特別なロックを掛けません。これらのオブジェクトの損失を防ぐためには、管理者がセキュリティ上の予防措置をとっておくことが重要です。
万一オブジェクトが失なわれてしまった場合には、管理者は以下の情報を参照してこれらを再作成できます。
Teradata TPumpマクロは、再始動ログ テーブルと同じデータベースに収められています。
マクロの名前は次の規則に従って付けられています。
Jobname_DDD_SSS
- Jobnameはジョブ名です。特に明示的に指定されなければ、デフォルトとして MYYYYMMDD_HHMMSS_LLLLLになります。
- LLLLLは、.LOGONコマンドからデータベースによって返されるログオン シーケンス番号の下位5桁です。
- DDDは、.DMLの順序(序数)番号です。1つのジョブ内の後続するロード(.BEGIN LOAD)のいずれかがこの値をリセットすることはなく、増え続けます。
- SSSは、SQL文の.DMLグループ内の順序(序数)番号です。
したがって、スクリプトの一部が次のようになっている場合、
.LOGTABLE LT_SIGH; .LOGON TDPID/CME,CME; ... .LAYOUT LAY1A ... .DML LABEL TAB1PART1; INSERT into tab1 values (:F0,:F1,:F2,:F3); .DML LABEL TAB2PART1; INSERT into tab2 values (:F0,:F1,:F2,:F3); ... .IMPORT INFILE TPDAT LAYOUT LAY1A APPLY TAB1PART1 APPLY TAB2PART1;
ジョブ名がデフォルトであると仮定すると、マクロは次のような名前になります。
M20020530_171209_06222_001_001 and M20020530_171209_06222_002_001.
Teradata TPumpマクロの内容は、スクリプトから直接取得され、LAYOUTからのパラメータ句と、スクリプトに指定されている実際の文で構成されます。上の例を引き続き使うと、文に結び付けられるLAYOUTが以下のような場合、
.LAYOUT LAY1A; .FIELD F0 * integer key; .FIELD F1 * integer; .FIELD F2 * integer; .FILLER FX * integer; .FIELD F3 * char(38);
マクロは次のように作成されます。
CREATE MACRO CME.M20020530_171209_06222_001_001 ( F0 (INTEGER), F1 (INTEGER), F2 (INTEGER), F3 (CHAR(38)) ) AS (INSERT INTO TAB1 VALUES(:F0, :F1, :F2, :F3); ); CREATE MACRO CME.M20020530_171209_06222_002_001 ( F0 (INTEGER), F1 (INTEGER), F2 (INTEGER), F3 (CHAR(38)) ) AS ( INSERT INTO TAB2 VALUES(:F0, :F1, :F2, :F3); );
パラメータ リストの中の実際のパラメータ名は重要ではありません。重要なのは、マクロの中で指定するパラメータの型が、LAYOUTで指定されているパラメータの型と厳密に同じ順序で指定されることです。また、パラメータ リストにFILLERフィールドを含めないことも重要です。それらはTeradata TPumpによって削除されるからです。
エラー テーブルの名前は、特に明示的に指定されない場合、次のようになります。
<JobName>_nnn_ET
nnnは、ロード順序番号です。
エラー テーブル用のデータベースがスクリプト内で明示されていない場合は、DATABASEコマンドが発行されていない限り、エラー テーブルはTeradata TPumpユーザー ログオンに関連したデータベース内に置かれます。
上の例を引き続き使うと、デフォルトのエラー テーブルを指定する場合、テーブルの作成コマンドは次のようになります。
CREATE SET TABLE M20020530_171209_06222_001_ET, NO BEFORE JOURNAL, NO AFTER JOURNAL ( ImportSeq BYTEINT, DMLSeq BYTEINT, SMTSeq BYTEINT, ApplySeq BYTEINT, sourceseq INTEGER, DataSeq BYTEINT, ErrorCode INTEGER, ErrorMsg VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC, ErrorField SMALLINT, HostData VARBYTE(63677)) UNIQUE PRIMARY INDEX ( ImportSeq ,DMLSeq ,SMTSeq ,ApplySeq ,sourceseq , DataSeq );