SSH連線斷開導致ORA-08104

byfree發表於2010-03-19

環境:oracle10.2.0.4 for linux

在對一個較大的索引進行rebuild時,SSH連線斷開了,然後再次rebuild索引,就出現了ORA-08104
SQL> alter index SYS_C005743 rebuild online;
alter index SYS_C005743 rebuild online
*
ERROR at line 1:
ORA-08104: this index object 94384 is being online built or rebuilt

處理的辦法有兩種:
1.使用dbms_repair.online_index_clean清除相關索引
2.Identify and drop/rename the related journal tables manually:
  SQL> Select Object_Name, Object_Type
       From   Dba_Objects
       Where  Object_Name Like 'SYS_JOURNAL%';
當然還有就是等待SMON自動完成清除動作。

由於是在生產系統上出現此問題,我選擇了第一種辦法處理:
官方提供兩種操作
select dbms_repar.online_index_clean(94384) from dual;

declare
  isClean boolean;
begin
  isClean := FALSE;
  while isClean=FALSE loop
    isClean := dbms_repair.online_index_clean(dbms_repair.all_index_id,dbms_repair.lock_wait);
    dbms_lock.sleep(2);
  end loop;
  exception
    when others then
      RAISE;
end;
/

我使用如下語句實現:
DECLARE
RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;
BEGIN
OBJECT_ID :=  94384;
WAIT_FOR_LOCK := NULL;
RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN ();
COMMIT;
END;
/

但是當正常執行完此函式後,再次rebuild索引,仍然報ORA-08104,檢視警告日誌並無ORA-600報錯,說明不是BUG所致。
由於此索引影響到了生產業務,最後只能重啟資料庫,再rebuild索引,解決了此問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17997/viewspace-629933/,如需轉載,請註明出處,否則將追究法律責任。

相關文章