這篇文章主要介紹了數(shù)據(jù)庫中怎么清除創(chuàng)建失敗的索引,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)公司主營府谷網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,府谷h5微信小程序開發(fā)搭建,府谷網(wǎng)站營銷推廣歡迎府谷等地區(qū)企業(yè)咨詢
在創(chuàng)建一張大表的索引時,因為沒有加并行而導(dǎo)致創(chuàng)建時間很長,這時候如果終止操作,比如直接關(guān)閉終端,然后再次登錄創(chuàng)建時就會報錯ORA-00095提示對象名字已被用,而去刪除對象時又報錯ORA-08104索引正在被創(chuàng)建。
SQL> drop index xxx.BM_IX; drop index xxx.BM_IX * ERROR at line 1: ORA-08104: this index object 1443829 is being online built or rebuilt SQL> select object_id from dba_objects where object_name='BM_IX'; OBJECT_ID ---------- 1443829 $ oerr ora 08104 08104, 00000, "this index object %s is being online built or rebuilt" // *Cause: the index is being created or rebuild or waited for recovering // from the online (re)build // *Action: wait the online index build or recovery to complete
從oerr工具看到的ORA-08104的解釋是索引并沒有創(chuàng)建失敗,而是在終端關(guān)閉之后,創(chuàng)建的操作還在繼續(xù)進行。創(chuàng)建或者重建索引時,系統(tǒng)會創(chuàng)建一個臨時日志表,這張表被用于存放創(chuàng)建或者重建索引期間產(chǎn)生的日志信息,同時在基表IND$中這個索引的FLAG字段上會被設(shè)置為BUILD或者REBUILD標(biāo)識,當(dāng)索引信息變更時會把變更信息存入日志表。如果索引創(chuàng)建或者重建失敗,這個日志表和數(shù)據(jù)字典中的狀態(tài)位都需要后臺進程smon進行清理。
因此這里的索引不能被刪除是因為后臺進程smon還沒來得及清理相應(yīng)的臨時段和標(biāo)志位,認(rèn)為online rebuild操作還在進行。
那么現(xiàn)在如何終止rebuild index這一操作?查找metalink得到一篇文檔:ORA-600 [12813] When Dropping A Table Partition After a Failed IndexRebuild (文檔 ID 803008.1)。它給出了兩種方法:
1)使用包dbms_repair包來清理
如果在出現(xiàn)問題的對象的數(shù)據(jù)庫活動能停下來,則直接簡單地執(zhí)行如下語句即可:
connect / as sysdba select dbms_repair.online_index_clean() from dual; exit
2)使用PL/SQL block調(diào)用dbms_repair包來清理
如果在出現(xiàn)問題的對象的數(shù)據(jù)庫活動不能停下來,則如下的PL/SQL block來處理
注:加上dbms_repair.lock_wait表示不是立刻清理,需要不斷的尋找資源鎖,直到搶到為止
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; /
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“數(shù)據(jù)庫中怎么清除創(chuàng)建失敗的索引”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!