エラー テーブルのルールと制限 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
エラー テーブルは、作成時に次のプロパティを前提にしています。
  • データ テーブル1つにつきエラー テーブルを1つだけ定義できます。

    単一のエラー テーブルとデータ テーブルの関係を使用すると、エラー管理が簡素化されます。またユーザーは、特定のデータ テーブルのエラー テーブルの名前を知る必要がないため、エラー テーブルをユーザーに対して透過的にすることができます。エラー テーブル名の代わりにデータ テーブル名を参照することで、間接的にエラー テーブルを作成または削除したり、その構造を表示したりできます。

  • 列パーティション テーブルのエラー テーブルを定義できます。

    エラー テーブルは、パーティションのないNoPIテーブルである場合を除き、非列パーティション テーブルと同様に作成されます。

  • エラー テーブルのどのプロパティを変更する場合も、ALTER TABLEリクエストは使用できません。
  • エラー テーブルがデータ テーブルに対して定義されている場合、データベースは、次のALTER TABLE操作を許可しないことにより、データ テーブルとその関連エラー テーブルとの互換性を保ちます。
    • データ テーブルへの列の追加またはデータ テーブルからの列の削除。
    • データ テーブルのプライマリ インデックス列セットの変更。

      エラー テーブルのあるデータ テーブルのパーティションを変更することができます。

    • データ テーブルのフォールバック保護の変更。
    • エラー テーブルでの任意のALTER TABLEリクエスト。
  • ビューではなく、基本テーブルにエラー テーブルを作成する必要があります。ビューにエラー テーブルを作成することは許可されていません。

    ビュー内のすべての基本テーブルの列に対してエラー テーブルを作成すると、セキュリティ上の問題が生じます。それまでにビューにより非表示になっていた実テーブルの列が、エラー テーブルの作成者に表示されるようになります。

    データベースにエラー テーブルを作成できる一方で、LOGGING ERRORSユーザーはアクセス権がなく、そのためにエラー回復が実行できません。

    エラー テーブルがビューの列のみで作成されている場合、エラー テーブルの行を使用したエラー回復は、特に非ビュー列でエラーが発生したときに難しくなります。

  • 関連データ テーブルに対するエラーを記録する前に、エラー テーブルを作成する必要があります。
  • エラー テーブルを作成しているデータ テーブルの実テーブルには、2,048を超える列を作成できません。

    このデータ テーブルに新しく作成されたエラー テーブルには、この合計数に13のエラー列が追加され、エラー テーブルの最大列数が2,061になります。 エラー テーブル固有の列に関するシステム定義属性を参照してください。

  • エラー テーブルの行のサイズ(データ テーブルの行に13 ETC_列を足したもの)がシステムの行サイズの制限を超えた場合、CREATE ERROR TABLEリクエストはリクエスト側にエラー メッセージを返します。
  • エラー テーブルは、関連データ テーブルと同じデータベースまたはユーザー、あるいは異なるデータベースまたはユーザーのいずれかに含めることが可能です。
  • エラー テーブルは、重複する行のチェックの手間を回避するために、デフォルトではMULTISETテーブルになっています。エラー テーブルをSETテーブルに変更することはできません。
  • エラー テーブルには、関連データ テーブルと同じフォールバック プロパティがあります。
  • データベースはデータ テーブル列のデータ型をエラー テーブルにコピーします。

    システムは、データ テーブルからエラー テーブルに他の列属性をコピーしません。

  • テーブルにプライマリ インデックスがあり、列パーティション化されていない場合、エラー テーブルには、関連データ テーブルと同じプライマリ インデックスがあります。

    定義により、すべてのエラー テーブルはMULTISETテーブルであるため、関連データ テーブルのプライマリ インデックスがUPIとして定義されている場合、システムはその定義をエラー テーブルのNUPIに変換します。

  • エラー テーブルに関連付けられたデータ テーブルにパーティション プライマリ インデックスがある場合、システムはそのパーティションをエラー テーブルにコピーしない

    エラー テーブルはデフォルトで常に非パーティション テーブルであり、パーティション テーブルに変更することはできません。

    パーティション プライマリ インデックスの詳細については、パーティション プライマリ インデックスと非パーティション プライマリ インデックスおよび<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

  • 非パーティションNoPIテーブルのエラー テーブルを定義できます。
  • CREATE ERROR TABLE文を使用してエラー テーブルのセカンダリ インデックスを定義することはできませんし、システムがデータ テーブルで定義されたセカンダリ インデックスをエラー テーブルにコピーすることもありません。

    ただし、CREATE INDEX文を使ってセカンダリ インデックスを既存のエラー テーブルに追加して、分析用にキャプチャしたデータのスキャンを促進することができます(これは、Teradata MultiLoadエラー テーブルに対して実行することはできません)。CREATE INDEXを参照してください。

    エラー テーブルに関連付けられたデータ テーブルにエラー ロギングを指定するINSERT ... SELECTまたはMERGE操作を実行する前に、エラー テーブルに定義したセカンダリ インデックスをすべて削除する必要があります。

    エラー テーブルのすべてのセカンダリ インデックスを削除しない場合、データ テーブルへのバルク ロード操作を実行しようとすると、システムはエラーを返します。

  • トリガー、結合インデックス、またはハッシュ インデックスをエラー テーブルで定義できません。
  • エラー テーブルは、バッチ参照整合性違反を処理しません。

    バッチ参照整合性チェックは、全か無かの操作であり、バッチRI違反は、次の種類のセッション モード固有のアボートになり、リクエスト側にエラー メッセージを返します。

    有効になっているセッションのモード 結果
    ANSI リクエストがアボートする
    Teradata トランザクションがアボートする
  • システムは、ローカル ターゲット テーブルエラーの原因となるデータ行の挿入試行を拒否します。そういった行は、代わりにエラー テーブルに挿入されます。このようなエラーが訂正されると、行を直接エラー テーブルから、または元のソース テーブルから再ロードできます。
  • 原則として、システムは、有用な回復情報がエラー テーブルに記録されないようなエラー状態を処理しません。

    これらのエラーは、通常、ターゲット テーブルの行に対応する行形式に組み込む前の入力データの中間処理の間に発生します。

    データベースは、データ行の挿入および更新の前に、そういったエラーを検出します。エラーには次のようなものがあります。
    • UDT、UDF、およびテーブル関数エラー
    • バージョン変更のサニティー チェック エラー
    • 存在しないテーブルのサニティー チェック エラー
    • 非フォールバック テーブルに対するダウンAMPリクエスト エラー
    • データ変換エラー

      ただし、データ行の挿入および更新のマージの間に発生した変換エラーは、ローカル データ エラーとして処理されます。

    この種のエラーは、次の種類のセッション モード固有のアボートになり、リクエスト側にエラー メッセージが返されます。

    有効になっているセッションのモード 結果
    ANSI リクエストがアボートする
    Teradata トランザクションがアボートする

    ただし、システムは、アボートされたリクエストまたはトランザクションによって記録されたすべてのエラー テーブルの行をdoes、ロールバックを行なうことはありません。

  • 前述のエラーの他に、次の種類のセッション モード固有のアボートとなり、リクエスト側にエラー メッセージを返す以下の種類のエラーを、システムは処理しません。
    • 固定またはスプール領域外エラー
    • Teradataセッション モードでの行の複製エラー(システムがTeradataモードで自動的に重複行を拒否することが原因)
    • トリガー エラー
    • 結合インデックス保守エラー
    • 識別列エラー
    • 暗黙的USI違反

      プライマリ インデックスではないプライマリ キーでテーブルを作成するとき、システムはそのプライマリ キー上で暗黙的にUSIを定義します。

      プライマリ キーの違反した暗黙的USIは、システムでそのようなUSIを削除してから再作成できないため、無効にすることができません。

    この種のエラーは、次の種類のセッション モード固有のアボートになり、リクエスト側にエラー メッセージが返されます。

    有効になっているセッションのモード 結果
    ANSI リクエストがアボートする
    Teradata トランザクションがアボートする
  • USIまたは参照整合性エラーなど、ロギングから除外されるエラー タイプが発生したとき、システムは次の種類のセッション モード固有のアボートを行い、リクエスト側にエラー メッセージを返します。
    有効になっているセッションのモード 結果
    ANSI リクエストがアボートする
    Teradata トランザクションがアボートする

    この場合データベースは、バッチのロード操作が完了し、エラーの原因となっているすべての行が収集された後でのみ、ターゲット テーブルの行だけロールバックします。データベースは既存のエラー テーブルの行を保持し、ロールバックは実行しません。

  • システムは、ジャーナリング、チェックサム、データブロック サイズなど、他の一般的なテーブル プロパティを、これらの設定を明示的に指定することがないCREATE TABLE文に適用されたデフォルトに設定します。
  • キュー テーブルのエラー テーブルを定義できます
  • そのエラー テーブルの作成時に、QUEUE属性を指定することはできません

    つまり、エラー テーブル自身がキュー テーブルになることはできませんが、キュー テーブルが関連するエラー テーブルを持つことはできます。

  • Teradata MultiLoadエラー テーブルに対して実行可能なように、エラー テーブルに対してDMLリクエストを実行でき、エラー テーブルに格納されているデータ行イメージ上で直接エラー訂正を実行できます。

    エラー テーブルの行でエラーを訂正した後、ステージング テーブルから再ロードするのではなく、エラー テーブルから直接ターゲット テーブルに変更した行を再ロードできます。

  • CREATE ERROR TABLEリクエストは、行レベル セキュリティ制約が基本テーブルに定義されている場合に、行レベル セキュリティ制約列の定義をエラー テーブルに追加します。これは、NO RLSオプションを指定しない場合に当てはまります。

    NO RLSオプションは、基本テーブルからエラー テーブルへの行レベル セキュリティ制約列の生成を抑止します。

  • 行レベル セキュリティ制約は、エラー テーブル行を生成したMERGE操作またはINSERT…SELECT操作中に強制されるため、行をエラー テーブルに挿入したときに、データベースはこの制約を強制しません。