1. 程式人生 > >Oracle ORA-08104報錯處理方法及註意事項

Oracle ORA-08104報錯處理方法及註意事項

nbsp local 3.0 性能 AI image IV sqlt 很多

【環境介紹】

系統環境: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,全局索引刪除分區導致索引失效。

Oracle ORA-08104報錯處理方法及註意事項