Oracle-10g

ora-01410 在 select 語句中偶爾出現無效的 RowID

  • September 20, 2012

我有一個通過連接查找一些數據的選擇。系統執行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/

引用自:https://dba.stackexchange.com/questions/24408