告警日志裡這兩天一直顯示這個錯誤:
ORA-00600: internal error code, arguments: [kcblasm_1], [103], [], [], [], [], [], []
Tue Aug 12 09:20:17 CST 2014
Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_29974.trc:
ORA-00600: internal error code, arguments: [kcblasm_1], [103], [], [], [], [], [], []
Tue Aug 12 09:30:17 CST 2014
Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_30084.trc:
ORA-00600: internal error code, arguments: [kcblasm_1], [103], [], [], [], [], [], []
Tue Aug 12 09:40:17 CST 2014
Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_29919.trc:
ORA-00600: internal error code, arguments: [kcblasm_1], [103], [], [], [], [], [], []
網上查的解決辦法:
1:臨時的解決方法
如果執行計劃中是hash join造成的,在會話層中設置"_hash_join_enable"=false,如:alter session set "_hash_join_enabled" = false亦可;
如果執行計劃是hash group by 造成的,設置"_gby_hash_aggregation_enabled"=false
2:根本的解決方法
2.1.優化sql語句,避免遇到bug;
2.2.升級
(1)將數據庫升級psu到10.2.0.5.4和11.2可以修正該問題
(2)對於10.2.0.5.0到10.2.0.5.3的版本,打PATCH 7612454來避免改錯誤(該補丁替換lib中的kcbl.o文件)。
通過臨時解決辦法解決問題示例:
追蹤報警日志裡提示的trace文件,找到導致出現此錯誤的sql語句
ORA-00600: internal error code, arguments: [kcblasm_1], [103], [], [], [], [], [], []
Current SQL statement for this session:
格式化後的sql語句如下:
SELECT INDENTDATE,
INDENTGROUP,
TRANSDATE,
TRANSBY,
TRANSGROUP,
FEEDBACKBY,
FEEDBACKGROUP,
FINANCEDATE,
FINANCEBY,
FINANCEGROUP,
TOTALCOST,
A.TOTALPAY,
PAY_CASH,
PAY_POINTS,
PAY_ADVANCE1,
PAY_ADVANCE2,
PAY_TYPE,
TRANS_PAY,
DISCOUNT_STAFF,
DISCOUNT_SPECIAL,
GAIN_CASH,
GAIN_POINTS,
GAIN_ADVANCE1,
GAIN_ADVANCE2,
TRANS_CUSTNAME,
TRANS_TEL,
TRANS_PROVINCE,
TRANS_CITY,
TRANS_ADDRESS,
TRANS_ZIPCODE,
TRANS_WEIGHT,
TRANS_COMMENTS,
INDENT_COMMENTS,
INDENT_ID,
A.PARTNER_GUID,
A.PROXY_GUID,
TRANS_TEL2,
CUST_MEDIA_ID,
CUST_PARTNER_GUID,
CUST_PROXY_GUID,
PARTNER_VALUE,
PROXY_VALUE,
CUST_PARTNER_VALUE,
CUST_PROXY_VALUE,
DEALBY,
A.FAILREASON,
ISFOOT,
S_REASONID,
DEALFAILREASON,
A.PRE_FUND,
MEDIA_CALLTYPE,
PRE_ADVANCE,
WEB_FLAG,
NEED_INVOICE,
INVOICE_TITLE,
TRANS_AREA,
ORDERTYPE,
PAY_POINTSPRICE,
A.MEDIA,
USERDEFINEDSTATUS,
CUSTOMERNAME,
CUSTOMERID
FROM ELITE.TABCINDENT A
LEFT JOIN ELITE.OBJECTIVE B
ON A.RELATION_ID = B.OBJECTIVE_GUID
LEFT JOIN ELITE.CUSTOMER C
ON A.CUSTOMER_GUID = C.CUSTOMER_GUID
WHERE (INDENTDATE BETWEEN :1 AND :2 OR B.MODIFIEDDATE BETWEEN :3 AND :4);
將變量:1,:2,:3,:4替換成具體的值執行:
SELECT INDENTDATE,
INDENTGROUP,
TRANSDATE,
TRANSBY,
TRANSGROUP,
FEEDBACKBY,
FEEDBACKGROUP,
FINANCEDATE,
FINANCEBY,
FINANCEGROUP,
TOTALCOST,
A.TOTALPAY,
PAY_CASH,
PAY_POINTS,
PAY_ADVANCE1,
PAY_ADVANCE2,
PAY_TYPE,
TRANS_PAY,
DISCOUNT_STAFF,
DISCOUNT_SPECIAL,
GAIN_CASH,
GAIN_POINTS,
GAIN_ADVANCE1,
GAIN_ADVANCE2,
TRANS_CUSTNAME,
TRANS_TEL,
TRANS_PROVINCE,
TRANS_CITY,
TRANS_ADDRESS,
TRANS_ZIPCODE,
TRANS_WEIGHT,
TRANS_COMMENTS,
INDENT_COMMENTS,
INDENT_ID,
A.PARTNER_GUID,
A.PROXY_GUID,
TRANS_TEL2,
CUST_MEDIA_ID,
CUST_PARTNER_GUID,
CUST_PROXY_GUID,
PARTNER_VALUE,
PROXY_VALUE,
CUST_PARTNER_VALUE,
CUST_PROXY_VALUE,
DEALBY,
A.FAILREASON,
ISFOOT,
S_REASONID,
DEALFAILREASON,
A.PRE_FUND,
MEDIA_CALLTYPE,
PRE_ADVANCE,
WEB_FLAG,
NEED_INVOICE,
INVOICE_TITLE,
TRANS_AREA,
ORDERTYPE,
PAY_POINTSPRICE,
A.MEDIA,
USERDEFINEDSTATUS,
CUSTOMERNAME,
CUSTOMERID
FROM ELITE.TABCINDENT A
LEFT JOIN ELITE.OBJECTIVE B
ON A.RELATION_ID = B.OBJECTIVE_GUID
LEFT JOIN ELITE.CUSTOMER C
ON A.CUSTOMER_GUID = C.CUSTOMER_GUID
WHERE (INDENTDATE BETWEEN '2012-06-19' AND '2012-08-19' OR B.MODIFIEDDATE BETWEEN '2012-06-19' AND '2012-08-1');
執行報錯:
解決辦法:
alter session set "_hash_join_enabled"=false;
alter session set "_gby_hash_aggregation_enabled"=false
--先嘗試一種,如果一種解決了,就沒必要設置另外一種了。
然後再次執行上面的查詢語句,不報錯啦,嘎嘎
成功啦,(*^__^*) 嘻嘻……
讓開發人員在程序裡加上這條命令即可。
可能是AUDSES$ 這張數據字典基礎表受損了,而且由於你登錄的時候要訪問這張 SESSION登錄審計表的,所以就無法登錄了。
可以通過修復AUDSES$來解決該
Oracle登錄報錯:ORA-00600:internal error code,arguments:[6807]
問題
如果自己搞不定可以找詩檀軟件專業ORACLE數據庫修復團隊成員幫您恢復!
詩檀軟件專業數據庫修復團隊
這個bug 和綁定變量有關,去掉綁定變量可以workaround,但要改程序。
另外可能與cursor_sharing參數的設置有關,具體要看alert.log
如果自己搞不定可以找詩檀軟件專業ORACLE數據庫修復團隊成員幫您恢復!
詩檀軟件專業數據庫修復團隊