0

以下の Teradata ID 列の定義を使用してテーブルを作成しました。

      IDENTITY としてデフォルトで生成される ID 整数
           (1から始める
            1ずつ増加
            最小値 0
            MAXVALUE 100000000
            サイクルなし)、
----
      一意のプライマリ インデックス ( ID )

数か月間、ID 列は適切に機能しており、列の一意の値が自動的に生成されています。ただし、この 1 か月間、ELMAH は.NET 4.0 ASP.NET アプリから次の例外を断続的に報告しています。

Teradata.Client.Provider.TdException: [Teradata Database] [2801] Duplicate unique prime key error in DATABASENAME.TABLENAME.

SQL Assistant を開き、生の SQL を使用して一連のレコードをテーブルに挿入することで、それを複製することができました。予想どおり、ほとんどの場合は正常に挿入されますが、上記の例外がスローされる場合もあります。

Teradata が以前に生成したこの列の値を生成しようとしているため、このエラーが発生しているようです。

何が起こっているのかを理解する方法を知っている人はいますか? 少なくとも、問題をもう少し深くデバッグする方法が欲しいです。

4

1 に答える 1

0

ID列の定義を変更してGENERATED ALWAYS、アプリケーションまたはETLプロセスが使用された可能性のある値を提供しないようにすることをお勧めします。実際、Teradataは、IDENTITY列をUPIの一部として使用している場合は、次のように定義することを推奨しています。GENERATED ALWAYS ... NO CYCLE

編集:

ビジネス要件が値を提供できる必要があるようなものである場合は、IDENTITY列用に確保した値の範囲外のドメインを使用することも検討します。負のドメインまたはIDENTITY列の範囲を1桁超える範囲を使用できます。個人的な好みは、ネガティブドメインを使用することです。

于 2012-07-30T20:56:51.433 に答える