Teradata标识列和“dbname.tablename中的重复唯一主键错误”

时间:2012-07-30 19:06:43

标签: unique identity teradata

我使用以下定义为Teradata标识列创建了一个表:

      ID INTEGER GENERATED BY DEFAULT AS IDENTITY
           (START WITH 1 
            INCREMENT BY 1 
            MINVALUE 0 
            MAXVALUE 100000000 
            NO CYCLE),
----
      UNIQUE PRIMARY INDEX ( ID )

几个月来,ID列一直正常工作,自动为列生成唯一值。然而,在过去一个月中,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正在尝试为之前生成的此列生成一个值。

有没有人知道如何深入了解正在发生的事情?至少,我想要一些方法来更深入地调试问题。

1 个答案:

答案 0 :(得分:0)

我建议将您的标识列的定义更改为GENERATED ALWAYS,以防止应用程序或ETL过程提供可能已使用的值。事实上,Teradata建议,如果您使用IDENTITY列作为UPI的一部分,则应将其定义为GENERATED ALWAYS ... NO CYCLE

修改

如果您的业务要求必须能够提供值,我还会考虑使用超出您为IDENTITY列预留的值范围的域。您可以使用负数域或超出IDENTITY列的数量级的范围。个人偏好是使用否定域名。