2019-01-22
ORA-00600: 内部错误代码, 参数: [kkogbro: no kkoaptyp], [2]
数据库中一个定时执行的存储过程报错,报错代码为
ORA-00600: 内部错误代码, 参数: [kkogbro: no kkoaptyp], [2]
这个存储过程之前一直无异常,在1月9日开始报错,程序没有更新,业务也没有变动。
报错的位置是一个merge语句,里面通过union all 包含了几个厂家的数据
实验发现,将其中两个厂家的union all注释,则不会报错,这两个厂家无数据(应该是一直没有数据)
原sql
MERGE /*+ NO_MERGE(S) USE_HASH(D,S) */ INTO DS_LTE_BUSY_CITY_D D USING (SELECT START_TIME, CITY_ID, (CASE WHEN PRB_OCCU_MORNING = 0 THEN TRUNC(V_DATE) + 10 / 24 ELSE BUSY_TIME_MORNING END) AS BUSY_TIME_MORNING, (CASE WHEN PRB_OCCU_EVENING = 0 THEN TRUNC(V_DATE) + 21 / 24 ELSE BUSY_TIME_EVENING END) AS BUSY_TIME_EVENING, (CASE WHEN PRB_OCCU_DAY = 0 THEN TRUNC(V_DATE) + 21 / 24 ELSE BUSY_TIME_DAY END) AS BUSY_TIME_DAY, PRB_OCCU_MORNING, PRB_OCCU_EVENING, PRB_OCCU_DAY FROM ( --数据源 WITH V AS (SELECT START_TIME, CITY_ID, SUM(PRB_OCCU) AS PRB_OCCU FROM (select /*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*/ TB0.START_TIME, TB0.CITY_ID, Round(100 * decode(Round(C373424611, 4), 0, 0.0, Round(C373424610, 4) / Round(C373424611, 4)), 4) AS PRB_OCCU from DS_COUNTER_GROUP_ZTE_CM_L_4 TB0, DS_COUNTER_GROUP_ZTE_CM_L_3 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.CITY_ID = TB1.CITY_ID AND TB0.START_TIME = TB1.START_TIME) union all select /*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*/ TB0.START_TIME, TB0.CITY_ID, Round(100 * (decode(Round(CELL_TSUM_NSUM * 3600 * 1000 * 100, 4), 0, 0.0, Round((C_12032_CUM), 4) / Round(CELL_TSUM_NSUM * 3600 * 1000 * 100, 4))), 4) AS PRB_OCCU from DS_COUNTER_GROUP_ALU_CM_L_1 TB0, DS_COUNTER_GROUP_ALU_CM_L_4 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.CITY_ID = TB1.CITY_ID AND TB0.START_TIME = TB1.START_TIME) union all select /*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*/ TB0.START_TIME, TB0.CITY_ID, Round(100 * (decode(Round((M8001C216 / 4), 4), 0, 0.0, Round((((M8011C51 / 60) / 60) / 1000), 4) / Round((M8001C216 / 4), 4))), 4) AS PRB_OCCU from DS_COUNTER_GROUP_NK_CM_L_1 TB0, DS_COUNTER_GROUP_NK_CM_L_2 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.CITY_ID = TB1.CITY_ID AND TB0.START_TIME = TB1.START_TIME) union all select /*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*/ TB0.START_TIME, TB0.CITY_ID, Round(100 * (decode(Round(COUNTER_1526728433, 4), 0, 0.0, Round(COUNTER_1526726740, 4) / Round(COUNTER_1526728433, 4))), 4) AS PRB_OCCU from DS_COUNTER_GROUP_HW_CM_L_1 TB0, DS_COUNTER_GROUP_HW_CM_L_2 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.CITY_ID = TB1.CITY_ID AND TB0.START_TIME = TB1.START_TIME) UNION ALL SELECT /*+ full(t) */ T.START_TIME, T.CITY_ID, Round(100 * (PMPRBUSEDDLDTCH + PMPRBUSEDDLBCCH + PMPRBUSEDDLPCCH +PMPRBUSEDDLSRBFIRSTTRANS * (1 + PMPRBUSEDDLRETRANS / PMPRBUSEDDLFIRSTTRANS)) /PMPRBAVAILDL, 4) AS PRB_OCCU FROM DS_COUNTER_GROUP_ERIC_CM_L_1 T WHERE START_TIME >= V_DATE AND START_TIME < V_DATE + 1 ) GROUP BY START_TIME, CITY_ID) -- SELECT V_DATE AS START_TIME, CITY_ID, MAX(BUSY_TIME_MORNING) AS BUSY_TIME_MORNING, MAX(PRB_OCCU_MORNING) AS PRB_OCCU_MORNING, MAX(BUSY_TIME_EVENING) AS BUSY_TIME_EVENING, MAX(PRB_OCCU_EVENING) AS PRB_OCCU_EVENING, (CASE WHEN MAX(NVL(PRB_OCCU_MORNING, 0)) >= MAX(NVL(PRB_OCCU_EVENING, 0)) THEN MAX(BUSY_TIME_MORNING) ELSE MAX(BUSY_TIME_EVENING) END) AS BUSY_TIME_DAY, MAX(CASE WHEN NVL(PRB_OCCU_MORNING, 0) >= NVL(PRB_OCCU_EVENING, 0) THEN PRB_OCCU_MORNING ELSE PRB_OCCU_EVENING END) AS PRB_OCCU_DAY FROM (SELECT CITY_ID, FIRST_VALUE(START_TIME) OVER(PARTITION BY CITY_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS BUSY_TIME_MORNING, FIRST_VALUE(PRB_OCCU) OVER(PARTITION BY CITY_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS PRB_OCCU_MORNING, NULL AS BUSY_TIME_EVENING, NULL AS PRB_OCCU_EVENING FROM V WHERE START_TIME >= V_DATE AND START_TIME <= V_DATE + 11 / 24 UNION ALL SELECT CITY_ID, NULL, NULL, FIRST_VALUE(START_TIME) OVER(PARTITION BY CITY_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS BUSY_TIME_EVENING, FIRST_VALUE(PRB_OCCU) OVER(PARTITION BY CITY_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS PRB_OCCU_EVENING FROM V WHERE START_TIME >= V_DATE + 12 / 24 AND START_TIME < V_DATE + 1) GROUP BY CITY_ID) ) S ON (D.START_TIME = S.START_TIME AND D.CITY_ID = S.CITY_ID AND D.START_TIME = V_DATE) WHEN MATCHED THEN UPDATE SET D.BUSY_TIME_MORNING5 = S.BUSY_TIME_MORNING, D.BUSY_TIME_EVENING5 = S.BUSY_TIME_EVENING, D.BUSY_TIME_DAY5 = S.BUSY_TIME_DAY, D.PRB_OCCU_MORNING5 = S.PRB_OCCU_MORNING, D.PRB_OCCU_EVENING5 = S.PRB_OCCU_EVENING, D.PRB_OCCU_DAY5 = S.PRB_OCCU_DAY;
修改后的sql
MERGE /*+ NO_MERGE(S) USE_HASH(D,S) */ INTO DS_LTE_BUSY_NEGROUP_D D USING (SELECT START_TIME, GROUP_ID, (CASE WHEN PRB_OCCU_MORNING = 0 THEN TRUNC(V_DATE) + 10 / 24 ELSE BUSY_TIME_MORNING END) AS BUSY_TIME_MORNING, (CASE WHEN PRB_OCCU_EVENING = 0 THEN TRUNC(V_DATE) + 21 / 24 ELSE BUSY_TIME_EVENING END) AS BUSY_TIME_EVENING, (CASE WHEN PRB_OCCU_DAY = 0 THEN TRUNC(V_DATE) + 21 / 24 ELSE BUSY_TIME_DAY END) AS BUSY_TIME_DAY, PRB_OCCU_MORNING, PRB_OCCU_EVENING, PRB_OCCU_DAY FROM ( --数据源 WITH V AS (SELECT START_TIME, GROUP_ID, SUM(PRB_OCCU) AS PRB_OCCU FROM (select /*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*/ TB0.START_TIME, TB0.GROUP_ID, Round(100 * decode(Round(C373424611, 4), 0, 0.0, Round(C373424610, 4) / Round(C373424611, 4)), 4) AS PRB_OCCU from DS_COUNTER_GROUP_ZTE_CG_L_4 TB0, DS_COUNTER_GROUP_ZTE_CG_L_3 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.GROUP_ID = TB1.GROUP_ID AND TB0.START_TIME = TB1.START_TIME) /* union all select \*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*\ TB0.START_TIME, TB0.GROUP_ID, Round(100 * (decode(Round(CELL_TSUM_NSUM * 3600 * 1000 * 100, 4), 0, 0.0, Round((C_12032_CUM), 4) / Round(CELL_TSUM_NSUM * 3600 * 1000 * 100, 4))), 4) AS PRB_OCCU from DS_COUNTER_GROUP_ALU_CG_L_1 TB0, DS_COUNTER_GROUP_ALU_CG_L_4 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.GROUP_ID = TB1.GROUP_ID AND TB0.START_TIME = TB1.START_TIME) union all select \*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*\ TB0.START_TIME, TB0.GROUP_ID, Round(100 * (decode(Round((M8001C216 / 4), 4), 0, 0.0, Round((((M8011C51 / 60) / 60) / 1000), 4) / Round((M8001C216 / 4), 4))), 4) AS PRB_OCCU from DS_COUNTER_GROUP_NK_CG_L_1 TB0, DS_COUNTER_GROUP_NK_CG_L_2 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.GROUP_ID = TB1.GROUP_ID AND TB0.START_TIME = TB1.START_TIME)*/ union all select /*+FULL(TB0) FULL(TB1) USE_HASH(TB0,TB1)*/ TB0.START_TIME, TB0.GROUP_ID, Round(100 * (decode(Round(COUNTER_1526728433, 4), 0, 0.0, Round(COUNTER_1526726740, 4) / Round(COUNTER_1526728433, 4))), 4) AS PRB_OCCU from DS_COUNTER_GROUP_HW_CG_L_1 TB0, DS_COUNTER_GROUP_HW_CG_L_2 TB1 where (TB0.START_TIME >= V_DATE AND TB0.START_TIME < V_DATE + 1 AND TB1.START_TIME >= V_DATE AND TB1.START_TIME < V_DATE + 1 AND TB0.GROUP_ID = TB1.GROUP_ID AND TB0.START_TIME = TB1.START_TIME) UNION ALL SELECT /*+ full(t) */ T.START_TIME, T.GROUP_ID, Round(100 * (PMPRBUSEDDLDTCH + PMPRBUSEDDLBCCH + PMPRBUSEDDLPCCH +PMPRBUSEDDLSRBFIRSTTRANS * (1 + PMPRBUSEDDLRETRANS / PMPRBUSEDDLFIRSTTRANS)) /PMPRBAVAILDL, 4) AS PRB_OCCU FROM DS_COUNTER_GROUP_ERIC_CG_L_1 T WHERE START_TIME >= V_DATE AND START_TIME < V_DATE + 1 ) GROUP BY START_TIME, GROUP_ID) -- SELECT V_DATE AS START_TIME, GROUP_ID, MAX(BUSY_TIME_MORNING) AS BUSY_TIME_MORNING, MAX(PRB_OCCU_MORNING) AS PRB_OCCU_MORNING, MAX(BUSY_TIME_EVENING) AS BUSY_TIME_EVENING, MAX(PRB_OCCU_EVENING) AS PRB_OCCU_EVENING, (CASE WHEN MAX(NVL(PRB_OCCU_MORNING, 0)) >= MAX(NVL(PRB_OCCU_EVENING, 0)) THEN MAX(BUSY_TIME_MORNING) ELSE MAX(BUSY_TIME_EVENING) END) AS BUSY_TIME_DAY, MAX(CASE WHEN NVL(PRB_OCCU_MORNING, 0) >= NVL(PRB_OCCU_EVENING, 0) THEN PRB_OCCU_MORNING ELSE PRB_OCCU_EVENING END) AS PRB_OCCU_DAY FROM (SELECT GROUP_ID, FIRST_VALUE(START_TIME) OVER(PARTITION BY GROUP_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS BUSY_TIME_MORNING, FIRST_VALUE(PRB_OCCU) OVER(PARTITION BY GROUP_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS PRB_OCCU_MORNING, NULL AS BUSY_TIME_EVENING, NULL AS PRB_OCCU_EVENING FROM V WHERE START_TIME >= V_DATE AND START_TIME <= V_DATE + 11 / 24 UNION ALL SELECT GROUP_ID, NULL, NULL, FIRST_VALUE(START_TIME) OVER(PARTITION BY GROUP_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS BUSY_TIME_EVENING, FIRST_VALUE(PRB_OCCU) OVER(PARTITION BY GROUP_ID, TRUNC(START_TIME, 'DD') ORDER BY PRB_OCCU DESC NULLS LAST) AS PRB_OCCU_EVENING FROM V WHERE START_TIME >= V_DATE + 12 / 24 AND START_TIME < V_DATE + 1) GROUP BY GROUP_ID) ) S ON (D.START_TIME = S.START_TIME AND D.GROUP_ID = S.GROUP_ID AND D.START_TIME = V_DATE) WHEN MATCHED THEN UPDATE SET D.BUSY_TIME_MORNING5 = S.BUSY_TIME_MORNING, D.BUSY_TIME_EVENING5 = S.BUSY_TIME_EVENING, D.BUSY_TIME_DAY5 = S.BUSY_TIME_DAY, D.PRB_OCCU_MORNING5 = S.PRB_OCCU_MORNING, D.PRB_OCCU_EVENING5 = S.PRB_OCCU_EVENING, D.PRB_OCCU_DAY5 = S.PRB_OCCU_DAY;
相关10046trace文件如附件
收藏
分享
5条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

评论
