【環境介紹】
系統環境:IBM P740 8205-E6C (AIX) + 11.2.0.3.0 Oracle RAC
【背景介紹】
故障描述:數據庫表空間超過90%,無法進行擴容表空間,需要業務側清理歷史數據,在清理期間出現ORA-08104報錯,無法再進行清理數據。
反饋報錯信息:
從數據庫報錯看出,有會話執行了重建索引操作或者重建索引操作時回退。
【問題分析】
查看數據庫日志信息:發現數據庫報錯,出現臨時表空間不足情況,查看當前表為分區表,大小為180多G,懷疑重建索引時臨時表空間不足導致回滾。
查看等待事件信息:沒有發現異常等待事件。
查看有會話對這個對象進行索引操作:根據用戶帥選,發現ACTIVE狀態會話沒有對該對象索引操作。
查看是否有大事務回滾情況:查詢沒有大事務回滾信息。
查看是否僵死進程:根據對象名,定位sqltext,sql_id發現有INACTIVE狀態會話有重建索引操作
經過咨詢,需求方反饋期間對該對象重建索引操作,但是期間終端終端,之后重新刪除分區時報錯。
確認可以殺掉該會話,當前status為INACTIVE狀態,需要spid定位主機進程殺掉,殺到進行后需要清理索引信息,否則還是會報錯。
declare
done boolean;
begin
done:=dbms_repair.online_index_clean(275314);---OBJECT_ID
end;
/
【總結】
雖然操縱很簡單,但是注意的問題會有很多,准確評估才能使工程的正常完成:
刪除數據時,需要備份數據(物理備份,邏輯備份),制定正確清理策略,定期移動或者清理歷史數據,防止誤操作引起的數據丟失;
對於日志類型監控表,建議使用分區方式存儲數據,方便清理歷史數據,SQL分區查詢性能優化;
對於全局索引建議在表比較小的情況下使用online方式重建索引;
重建索引時注意表大小和臨時表空間大小,對於對象較大的情況,建議使用並行方式重建索引;
建議使用腳本刪除或者重建索引操作,防止網絡引起終端斷開導致事務回滾;
建議對表操作后可根據分區進行收集統計信息;
建議對分區表使用local index,全局索引刪除分區導致索引失效。