グローバル一時トレース テーブルはハッシュされないので、定義と操作に関する多くの制約があり、その点は通常のグローバル一時テーブルと異なります(グローバル一時テーブルを参照)。
グローバル一時トレース テーブルの列には以下のルールと制限が適用されます。他のすべての行はオプションであり、ユーザーが独自に定義できます。
- グローバル一時トレース テーブルをSETテーブルとして定義することはできません。すべてのグローバル一時トレース テーブルは、MULTISETテーブルというタイプに制限されており、SETテーブルに変更することはできません。
- グローバル一時トレース テーブルにはフォールバック特性を指定できません。デフォルトでは常にNO FALLBACKとして作成され、FALLBACKテーブルに変更することはできません。
- テーブルに対して、プライマリ、プライマリAMP、セカンダリ、結合、およびハッシュ インデックスのいずれのインデックスも定義することはできません。
この制限は、パーティション プライマリ インデックスおよび非パーティション プライマリ インデックスの両方に明示的に含まれています。グローバル一時トレース テーブルもまた、NO PRIMARY INDEXオプションを使用して定義できません。
- グローバル一時トレース テーブルにはパーティションを指定できません。
- テーブルにデフォルトの列値を指定できません。
次のリストに、グローバル一時トレース テーブルに適用されるその他のルールと制限を示します。
- AMP上で実行されるUDFとPE上で実行される外部プロシージャまたはUDFを同時にトレースするために同じトレース テーブルを使おうとする場合、2番目の列に書き込まれるシーケンス番号は実際の順番と異なります。これは、AMPがトレース テーブルの最後の行のシーケンス上の次のシーケンス番号に基づき、行の出所に関係なくそれに対して1つのシーケンス番号を追加するためです。
PEからトレース テーブルに挿入される行は、PE vproc番号と現行のシーケンス番号に基づいて1つのAMPにハッシュされます。したがって、PEの現行のシーケンス番号が5でトレース行がAMP 1に追加される場合、AMP 1からそのテーブルへのトレース書込みのシーケンス番号は6になります。
最善なのは、AMPとPE上で同時にトレースを行なうのを避けることです。
詳細については、<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照してください。
- ON COMMIT PRESERVE ROWSを指定すると、システムはトランザクションがコミットまたはアボートした後に、実体化されたトレース テーブルの行を保存します。これを指定しない場合、すべての行はテーブルから削除されます。
アボートしたトランザクションによってトレース テーブルがセッションで実体化された場合、そのテーブルは削除されるので、その場合には保存される行はありません。トレース テーブルが正常に実体化されると、システムはアボート発生前にUDFが書き込んだすべての行を保持します。
- グローバル一時トレース テーブルを他のテーブルに結合することはできません。
- グローバル一時トレース テーブルを更新することはできません。つまり、DELETE、INSERT、またはUPDATE文をグローバル一時トレース テーブルに対して実行できません。ただし、DELETE ALLは指定できます。
- INSERT … SELECTの操作を使用して、グローバル一時トレース テーブルから別のテーブルへ行を挿入できます。
- トレース テーブルの内容を選択して、検査のために応答スプールに出力できます。
この目的のために使用されるSELECTリクエストでWHERE句を使用して、行の選択に使用する基準を指定できます。ORDER BY句も指定できます。
- グローバル一時トレース テーブルに対してDROP TEMPORARY TABLEを実行できます。
- プライマリ インデックスが存在しないので、通常はプライマリ インデックスで検索するすべてのリクエストが全件検索になります。