Kettle报错:不能在具有唯一索引'IDX_RSAT'的对象'dbo.R_STEP_ATTRIBUTE'中插入重复键的行

报错截图: 
图片

Kettle版本:6.0.0.0-353
资源库:SQL Server2005数据库 
错误出现背景: Kettle两天前曾出现无法打开故障,最终删除.Kettle文件夹下部分缓存文件解决(详情见:http://www.cnblogs.com/jusha/p/6744401.html),之后一次修改转换,修改完成后保存转换出现异常,转换直接丢失,问题之间有无关联暂时未知。
错误详情:Kettle无法创建和修改转换的具体步骤,一旦操作就会报错,但可以创建空转换。 
错误解决过程:
       根据报错内容可以看出问题可能出在保存转换时插入了重复的索引值。查询R_STEP_ATTRIBUTE表的IDX_RSAT索引,索引键列为ID_STEP,CODE,NR,标识为否,继而查询R_STEP表的ID_STEP主键,不是规范标识,没有触发器,看来主键值由Kettle生成,换了一个正常使用的Kettle连接该资源库新建转换,同样报错,最后判断问题还出在数据上。
排序查询表R_STEP和R_STEP_ATTRIBUTE

select * from r_step order by id_step desc

select * from r_step_attribute order by id_step_attribute desc 
图片
发现表R_STEP 主键ID_STEP最大值为1642,而表R_STEP_ATTRIBUTE字段ID_STEP最大值为1644,由此想到Kettle之前有次保存一个转换出现错误,转换丢失,猜测原因可能是转换丢失时程序删除了R_SETP中的数据,却没能继续删除R_STEP_ATTRIBUTE中的数据,导致新建转换时R_STEP生成ID_STEP值为1643,此时表R_STEP_ATTRIBUTE中ID_STEP=1643已存在,索引值重复,导致报错,尝试删除R_STEP_ATTRIBUTE中ID_STEP值为1643  1644的值,重新保存Kettle转换,保存成功,问题解决。

posted @ 2017-04-21 16:59  飞向狙沙  阅读(3098)  评论(1编辑  收藏  举报