記錄一次oracle的坑 ORA-08103


背景:程序正常運行中,突然技術支持人員反映數據庫數據好久沒有增加,於是乎各種排查問題,但是一直沒有找到原因,由於代碼比較久,也不是本人所寫,更氣的是居然用的是oracle數據庫,並且是通過java代碼調用存儲過程。存儲過程中包含了大量的邏輯。而java服務的日志也就少的可憐,根本無法排查出具體問題,唯一可以確認的是存儲過程有問題。

1.首先排查存儲過程,從上到下依次看,一共二百多行的代碼,花了一小時看了一遍,感覺沒什么問題,於是又通過手動輸入參數,通過plsql測試存儲過程,也沒什么問題。

2.經歷了第一步,感覺整個世界都不好了,於是開始拆解存儲過程邏輯,將存儲過程邏輯轉移到java代碼中(改寫了半天),打印詳細日志,每一句sql都打印日志。終於在一句insert處出現了問題,返回結果 內部錯誤。

3.針對這張表,開始了有一個坑,

  a.  select * from tableName; 完全沒有問題。

  b. select count(*) from tableName; 提示   ORACLE 報ORA-08103: 對象不再存在錯誤.

    wtf?什么情況??明明數據庫用眼睛是可以看到這個表的,並且select *  是可以正常查詢出數據的,難道是眼睛有問題?於是又開始了三次同樣的sql,還是同意的結果,於是終於拿出了神器 google,google一圈發現都是說數據損壞,導致無法插入。

       c.  復制表咯。create table tableNameNew as select * from tableName;

  d. 刪除原來的表 (本來想重命名的,但是重命名失敗,於是直接刪除)

  e.重命名新表名為舊表名。

大功告成!!!!!!!!!!!!oracle線上使用檢查會出現崩潰還有用戶被鎖定的情況,很崩潰。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM