一,问题描述
用户反馈,执行一段SQL时,出现ora-600的异常。
create or replace view grp_cust_ucs_v as
select distinct
a.CUST_ID,
a.CUST_NAME,
b.service_id,
b.list_system_id,
a.CUST_ADDR,
decode(a.CUST_TYPE,'01','大客','02','中小','03','公众','04','校园','未知')CUST_TYPE,
a.CARD_TYPE,
a.CRAD_NO,
a.EPARCHY_CODE,
a.CITY_CODE,
a.SCORE_VALUE,
a.CREDIT_CLASS,
a.BASIC_CREDIT_VALUE,
a.CREDIT_VALUE,
a.DEVELOP_DEPART_ID,
f_develop_staff_tonumber(a.CUST_ID) DEVELOP_STAFF_ID,
a.IN_DEPART_ID,
a.IN_STAFF_ID,
a.IN_DATE,
a.REMOVE_FLAG,
a.REMOVE_DATE,
a.REMOVE_STAFF_ID,
a.REMOVE_CHANGE,
a.UPDATE_TIME,
a.UPDATE_STAFF_ID,
a.UPDATE_DEPART_ID,
b.ACTIVE_TIME,
b.active_man,
case
when b.cust_id is null then '10'
when b.cust_id is not null then '11'
end as CUST_STATUS,
b.if_valid,
b.sync_status,
b.inactive_time,
b.inactive_man,
a.new_cust_type,
(select b2.SYSTEM_USER_NAME||'('||b2.SYSTEM_USER_CODE||')' from grp_distribute_cust_manager b1,v_system_user b2
where b1.cust_id=a.cust_id and b1.status=10 and b1.manager_id=b2.SYSTEM_USER_ID)accept_man,
(select b2.SYSTEM_USER_NAME||'('||b2.SYSTEM_USER_CODE||')' from grp_distribute_cust_manager b1,v_system_user b2
where b1.cust_id=a.cust_id and b1.status=10 and b1.send_user=b2.SYSTEM_USER_ID)send_man,
(select to_char(b1.send_date,'yyyy/mm/dd') from grp_distribute_cust_manager b1
where b1.cust_id=a.cust_id and b1.status=10)send_date,
(select b1.manager_id from grp_distribute_cust_manager b1
where b1.cust_id=a.cust_id and b1.status=10)accept_man_id
from GRP_BMS_CUST_INFO a,GRP_CUST_UCS_T b
where a.cust_id = b.cust_id(+)
and b.if_valid(+) = '10';
二、问题解决
这是oracle的一个bug,在10.2.0.5.4和以后版本已经解决了,当大表hash join关联或者大表执行hash group by就有可能出现上述的ora-600 [kcblasm_1], [103], [], [], [], [], [], []问题。
可以选择规避掉hash join执行计划或者hash group by的执行计划来避开相应sql引起的错误,我们可以在执行这个sql语句之前:
alter session set “_hash_group_enabled”=false 禁掉hash join连接方式,或者sql语句里面使用hint no_use_hash。
alter session set “_gby_hash_aggregation_enabled”=falase 禁掉hash group by执行路径
Oralce给出的最快捷的方式是直接打patch到10.2.0.5.4或者以上版本,也可以选择在linux和unix平台打patch 7612454去解决这个问题,而windows下需要下载patch 3或者以上版本来解决这个问题。
在这里,我们选择在sql语句里面使用hint no_use_hash,问题得到解决。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7836221/viewspace-2215950/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7836221/viewspace-2215950/