Oracle-10g
ora-01410 在 select 語句中偶爾出現無效的 RowID
我有一個通過連接查找一些數據的選擇。系統執行Oracle 10.02g,select看起來像這樣
SELECT distinct t1.crit FROM table_name1 t1 INNER JOIN table_name2 t2 ON t1.crit = t2.crit WHERE NVL (t2.qty, 0) + NVL (t2.adds, 0) - NVL (t2.remove, 0) > 0 AND t1.process_id = 'some_process_id' AND t1.item_no = 'some item NO' AND t1.to_gen = 1
其中 t1 在 (item_no, crit) 上有一個索引,t2 在 (item_no, crit, X) 上有一個索引,X 是一些附加列。
此語句的目的是找到我需要在附加表中為其生成數據的所有候選人。當新數據生成時,列 t1.to_gen 設置為 0。目前尚不清楚,如果執行此語句的軟體進行中間送出,例如為一個 item_no 生成一些新數據,則設置 t1。 to_gen = 0 並送出,然後從相關語句的游標中使用下一個 item_no。
該語句在我的環境中每天成功執行幾次,但在極少數情況下,我從 oracle 收到錯誤,我不清楚其來源:
ora-01410: invalid RowID
由於 select 語句不直接使用偽列 RowID,Oracle 將不得不在內部使用它。
這個問題的根源是什麼?
**更新:**聽起來很遺憾,系統會進行中間送出,但這不是問題的根源。
是否有其他程序在同一張表上執行?正在重建索引?
如果是這樣,那麼你可能會遇到喬納森劉易斯在這裡描述的情況:http: //jonathanlewis.wordpress.com/2007/09/16/index-rebuild/