如何重新编译DB2数据库中的索引

时间:2015-01-27 18:47:02

标签: db2

我必须重组表

的所有索引

我收到以下错误

  

SQL错误[23505]:由DELETE语句引起的INSERT语句,UPDATE语句或外键更新中的一个或多个值无效,因为" 2&标识的主键,唯一约束或唯一索引#34;约束表" GMS4.SMS_PHYSICAL_CUSTOMER_DATA"来自索引键的重复值.SQLCODE = -803,SQLSTATE = 23505,DRIVER = 4.16.53     由DELETE语句引起的INSERT语句,UPDATE语句或外键更新中的一个或多个值无效,因为主键,唯一约束或唯一索引由" 2"约束表" GMS4.SMS_PHYSICAL_CUSTOMER_DATA"来自索引键的重复值.SQLCODE = -803,SQLSTATE = 23505,DRIVER = 4.16.53

DB2 Version 10

请帮助..

1 个答案:

答案 0 :(得分:1)

我假设你在这里使用DB2 for Linux / Unix / Windows。

您的问题不在于您需要重新调整表格。问题是您正在尝试插入一行,但该表上有一个唯一索引,这会阻止插入。

您可以使用此查询查看索引的名称及其唯一的列:

SELECT 
     I.INDSCHEMA
    ,I.INDNAME
    ,C.COLNAME
FROM SYSCAT.INDEXES     I
JOIN SYSCAT.INDEXCOLUSE C
  ON I.INDSCHEMA = C.INDSCHEMA
 AND I.INDNAME   = C.INDNAME
WHERE I.IID       = @indexID
  AND I.TABSCHEMA = @tableSchema
  AND I.TABNAME   = @tableName
ORDER BY C.COLSEQ
;

您可以从错误消息中获取此查询所需的所有参数。在这种情况下,@indexId2@tableSchemaGMS4@tableNameSMS_PHYSICAL_CUSTOMER_DATA