1. 程式人生 > >ORA-00600和ORA-08103錯誤處理

ORA-00600和ORA-08103錯誤處理

iamlaosong

工作需要每月將總部下發的結算資料匯入到表中,然後進行統計清分。每個月的資料量很大,累計下來後資料量更大。用sqlldr匯入資料速度比較快。本次用sqlldr匯入8月結算資料後,進行統計時報錯:ORA-00600: internal error code, arguments: [kcbz_check_objd_typ_3], [0], [0], [1], [], [], [], []。這不是第一次碰到這樣的問題了,其實就是表中資料損壞了。首先想到的解決辦法是刪除這個表,重新匯入資料,結果往往是又碰到這個問題。後來想到這可能是某些儲存區域有問題,也就不再刪除壞表了,解決辦法如下:

1、通過日誌知道計算到哪一步,再根據這一步涉及到的表,統計一下相關表的記錄數就可以定位到表了。語句select count(*) from emsapp_js_jk_bcf 遍歷整個表,碰到壞塊就會報錯。也可以加上時間條件:select count(*)  from emsapp_js_jk_bcf t where t.jsrq>=to_date('20180801','yyyymmdd')。修改時間條件可以定位到到哪一天的資料壞了。

2、將壞表改名,再建立新表並複製前幾個月的資料(前幾個月是好的,還是可以複製的:create table emsapp_js_jk_bcf as


(select * from emsapp_js_jk_bcf_bad t where t.jsrq<to_date('20180801','yyyymmdd')))。雖然可以通過條件查詢定位到哪一天的資料壞了,但是這樣比較麻煩,重新匯入一個月的資料就行了,反正是電腦幹活,不知道累的,呵呵。

3、用指令碼tab_impsuan.sh(匯入某個表某些天的資料)匯入8月份的資料。

4、重新統計,問題解決。

同樣的錯誤,有時提示:ORA-08103: object no longer exists,試著定位到哪一天,發現最早到9月3日資料有誤,但檢查4號以的資料,同樣有誤,所以壞的不止一天,按照上面的解決辦法,重新匯入3號以後的資料。

還有一個發現,就是出現上述錯誤的表都是用sqlldr匯入的資料,以前用Pro*C寫的匯入程式匯入的資料(一條一條的插入),沒有發生過這樣的問題。