今天上班的時候一看,發現資料庫的目錄97%了,頓時覺得奇怪,都已經寫了shell定期刪除oracle目錄下的檔案,怎麼會突然就這麼滿了呢,估計又是出問題了,果然一看alertlog全是下面這樣的報錯,生成了大量的trace
thu jun 16 13:54:44 2011
errors in file /oracle/admin/zhdu/bdump/zhdu2_j000_19455.trc:
thu jun 16 13:56:51 2011
errors in file /oracle/admin/zhdu/bdump/zhdu2_j000_19455.trc:
thu jun 16 13:58:40 2011
trace dumping is performing id=[cdmp_20110616135840]
thu jun 16 14:00:50 2011
errors in file /oracle/admin/zhdu/bdump/zhdu2_j000_19455.trc:
thu jun 16 14:04:54 2011
errors in file /oracle/admin/zhdu/bdump/zhdu2_j001_27814.trc:
thu jun 16 14:08:54 2011
errors in file /oracle/admin/zhdu/bdump/zhdu2_j000_29512.trc:
開啟trace檔案發現有這樣的報錯資訊
*** 2011-06-04 06:00:18.414
ksedmp: internal or fatal error
current sql statement for this session:
delete from wfe_activity where processinsid = :b1
----- pl/sql call stack -----
object line object
handle number name
c0000000ce7a4a60 94 procedure ccatsupt.cp_wf_archive_flowinstance
c0000000bc1d74e8 1 anonymous block
看來是過程ccatsupt.cp_wf_archive_flowinstance 的94行
delete from wfe_activity where processinsid = :b1
這條sql執行的時候丟擲來的,仔細檢查了這個過程發現過程本身倒沒有什麼問題,這下感覺非常奇怪,alertlog 裡面沒有 ora錯誤,無從查起,花了很長時間都無法定位到問題,後來trace檔案中的
c0000000bc1d74e8 1 anonymous block
ora-00600: internal error code, arguments: [kcbz_check_objd_typ], [0], [0], [1], , , ,
mon jun 27 12:10:55 2011
errors in file /oracle/admin/zhdu/udump/zhdu2_ora_471.trc:
ora-00600: internal error code, arguments: [kcbz_check_objd_typ], [0], [0], [1], , , ,
mon jun 27 12:11:31 2011
errors in file /oracle/admin/zhdu/udump/zhdu2_ora_785.trc:
ora-00600: internal error code, arguments: [kcbz_check_objd_typ], [0], [0], [1], , , ,
mon jun 27 12:12:09 2011
errors in file /oracle/admin/zhdu/udump/zhdu2_ora_25118.trc:
ora-00600: internal error code, arguments: [kcbz_check_objd_typ], [0], [0], [1], , , ,
這下鬱悶了,看了下trace檔案內容基本如下:
*** 2011-06-27 11:47:46.396
*** action name:() 2011-06-27 11:47:46.396
*** module name:(jdbc thin client) 2011-06-27 11:47:46.396
*** service name:(zhdu) 2011-06-27 11:47:46.396
*** session id:(371.6344) 2011-06-27 11:47:46.396
*** session id:(371.6344) 2011-06-27 11:47:46.396
objd mismatch typ=6, seg.obj=128602, diskobj=146729, ds***=100000, dsobj=128602, tid=128602, cls=1
集合google出來的資料,發現問題是:
diskobj 是物件的data object id
dsobj 是object id
根據objectid來查詢:
sql> select t.object_id,t.data_object_id from dba_objects t where t.object_id = 146729;
object_id data_object_id
---------- --------------
146729 394023
sql>
可以發現這個物件的data_object_id已經變了,而又由於此時pmon程序正在對這個表的資料進行事物的回滾操作,當pmon根據以上資訊檢查物件是發現物件不存在,於是就丟擲了以上錯誤。
Python中大量插入資料到SQLITE
這是我的第乙個python和sqlte的文章,雖然短小,但相信對遇到的會很有用。當你需要向sqlite資料庫插入上百萬條資料時,你會怎麼做?for i in range 0 len s list db.execute insert into txt txt values i,這樣效率奇低,你會怎麼做...
大表中大量資料更新問題
最近遇到個大批量資料更新表字段問題,需要將a表中m欄位儲存的字串進行某種統一格式的替換,where條件類似m like aaa 源資料有1700萬條,需要更新的資料有200多萬條。因為所更新的字段沒有索引,如果用 update set from where m like aaa 更新時需要鎖表,這在...
方法中大量if判斷,利用列舉進行優化
在乙個方法類中有大量if語句判斷,有沒有大佬幫忙看看,怎麼用列舉的方式進行優化 public locatedatasourceeventhandler sourcelist string requestid,string reportname if reportname.contains wb zt...