oracle 10.2.0.5 平臺上ORA-600錯誤

yezhibin發表於2011-06-03
     專案中,客戶執行以下語句,出現ORA-600錯誤,具體如下;

select t1.* from       
      (select * from    A.B where etl_date=20110526)  t1    
    where not exists
    (   
      select * from A.B t2
      where etl_date=20110527 and t1.tx_date=t2.tx_date and t1.open_date=t2.open_date and t1.done_no=t2.done_no   
    )
     ;

ora-00600: internal error code, arguments:[kcblasm_1],[103],[],[]

通過trace 檔案檢視call stack.

使用call stack命令,從metalink相關文件中查詢符合所發生問題的描述:

        在10.2.0.5版本中,所有平臺環境下補丁程式P7612454,該補丁是解決hash

join時候,Direct IO最大限制4096,我們從執行計劃中可以看出,hash join的build

table表的cardinality非常大,這個是造成該問題的罪魁禍首。解決方案如下:

1、11.2版本解決了上述問題

2、升級補丁P7612454,該補丁替換lib中的kcbl.o檔案

3、如果執行計劃中是hash join造成的,在會話層中設定"_hash_join_enable"

=false,如果執行計劃是hash group by 造成的,設定"_gby_hash_aggregation_

enable"=false

4、修改SQL語句,儘量減少build table的cardinality的值,可以避免該問題的生成


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/354732/viewspace-697070/,如需轉載,請註明出處,否則將追究法律責任。

相關文章