建立索引意外終止解決方法
今天在重建索引的時候遭遇ORA-08104錯誤。
問題產生如下:
下班同事說有幾個索引是失效的。回到家中開啟電腦,發現有個全域性索引的幾個分割槽的索引狀態處於UNUSABLE中。 然後我講將處於失效狀態的分割槽摘出來,寫了一個簡單指令碼。
類似:
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P81 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P80 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P79 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P78 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P77 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P76 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P75 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P74 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P73 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P72 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P71 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P70 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P84 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P83 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P82 PARALLEL 4 ONLINE;
問題產生如下:
下班同事說有幾個索引是失效的。回到家中開啟電腦,發現有個全域性索引的幾個分割槽的索引狀態處於UNUSABLE中。 然後我講將處於失效狀態的分割槽摘出來,寫了一個簡單指令碼。
類似:
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P81 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P80 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P79 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P78 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P77 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P76 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P75 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P74 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P73 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P72 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P71 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P70 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P84 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P83 PARALLEL 4 ONLINE;
ALTER INDEX IDX_MKT_EXEC_01 REBUILD PARTITION SYS_P82 PARALLEL 4 ONLINE;
重建過程中發現很慢,每一個分割槽都是走的全表掃描。
因此想透過刪掉索引然後再建立索引的方式來加快索引的建立。
因此想透過刪掉索引然後再建立索引的方式來加快索引的建立。
我採用ps -ef | grep LOCAL=YES 的方式找到本地登入的重建索引的程式ID。
然後想也沒想的就採用kill -9 pid 的方式結束了重建索引的程式。
然後杯具出現了
SQL> drop INDEX IDX_MKT_EXEC_01;
drop INDEX IDX_MKT_EXEC_01
*
ERROR at line 1:
ORA-08104: this index object 88214 is being online built or rebuilt
drop INDEX IDX_MKT_EXEC_01
*
ERROR at line 1:
ORA-08104: this index object 88214 is being online built or rebuilt
異常終止的線上重建索引導致SMON程式沒有將索引的重建標誌改回來,ORACLE認為索引還在ONLINE REBUILD中,禁止刪除索引。
如果不著急的話,可以等待SMON程式自己去清理。
如果著急的話可以採用如下的方法來清理重建索引的標誌位:
如果著急的話可以採用如下的方法來清理重建索引的標誌位:
SQL> declare
2 done boolean;
3 begin
4 done:=dbms_repair.online_index_clean(88214);
5 end;
6 /
2 done boolean;
3 begin
4 done:=dbms_repair.online_index_clean(88214);
5 end;
6 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.43
再次刪掉索引,成功。
SQL> drop INDEX IDX_MKT_EXEC_01;
Index dropped.
在生產環境中,應該儘量避免KILL 作業系統的方式來直接結束程式,否則可能遇到不可避免的麻煩。
在sys使用者下執行下面的指令碼
DECLARE
RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;
BEGIN
OBJECT_ID := 67420;
-- 我的資料庫中非法索引的id為67420.
WAIT_FOR_LOCK := NULL;
RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN ();
COMMIT;
END;
在sys使用者下執行下面的指令碼
DECLARE
RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;
BEGIN
OBJECT_ID := 67420;
-- 我的資料庫中非法索引的id為67420.
WAIT_FOR_LOCK := NULL;
RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN ();
COMMIT;
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2117050/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysqldump意外終止的原因以及解決方法MySql
- 【邏輯備份】深入淺出mysqldump:常用操作、案例分享、意外終止的原因以及解決方法MySql
- 無法啟動mysql服務”1067 程式意外終止”解決辦法【簡記】MySql
- Windows 程式的建立和終止Windows
- Java 終止執行緒方法Java執行緒
- TCP/IP之TCP的建立與終止TCP
- win10藍屏終止程式碼kmode exception not handled最佳解決方法Win10Exception
- win10電腦藍屏終止程式碼memory management的解決方法Win10
- win10藍屏終止程式碼badpoolheader的最佳解決方法Win10Header
- TCP連線是如何建立和終止的?TCP
- win10藍色畫面終止程式碼kmode exception not handled最佳解決方法Win10Exception
- win10電腦藍色畫面終止程式碼memory management的解決方法Win10
- ORA-00031:session marked for kill(標記要終止的會話)解決方法Session會話
- 終止Android中HandlerThread的方法Androidthread
- win10藍色畫面終止程式碼badpoolheader的最佳解決方法Win10Header
- ROS意外崩掉解決方案ROS
- 終止java執行緒的2種方法Java執行緒
- win10電腦終止程式碼driver irql not less or equal藍屏最簡單解決方法Win10
- Internet Explorer無法開啟internet站點,已終止操作的解決方法合集
- 不能建立降序索引的問題的解決索引
- Win10系統提示終止程式碼video_scheduler_internel_error的藍屏解決方法Win10IDEError
- Linux——程式建立、程式終止、程式等待、程式程式替換Linux
- 程式控制:程式的建立、終止、阻塞、喚醒和切換
- 終止程式碼driver_irql_not_less_or_equal怎麼解決win10Win10
- mysql 建立索引的方法--建立檢視MySql索引
- win10電腦終止程式碼driver irql not less or equal藍色畫面最簡單解決方法Win10
- 終止imp/exp和expdp/impdp程式執行的方法
- Win10系統提示終止程式碼video_scheduler_internel_error的藍色畫面解決方法Win10IDEError
- macOS 10.15.5 軟體意外退出打不開的解決方法Mac
- 終止指定埠的程式
- 兩階段終止模式模式
- 終止非同步任務非同步
- NumPy 陣列建立方法與索引訪問詳解陣列索引
- WIN10系統藍屏終止程式碼SYSTEM_SERVICE_EXCEPTION解決方案Win10Exception
- 藍屏終止程式碼dpc-watchdog-violation什麼意思怎麼解決
- 系列TCP/IP協議-TCP建立與終止連線(012)TCP協議
- EXP-00056: 遇到 ORACLE 錯誤 600 ORA-00600 EXP-00000: 匯出終止失敗 解決方法Oracle
- win10電腦藍屏終止程式碼driver怎麼辦 win10藍屏程式碼driver解決方法Win10