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轉換,保存成功,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM