1.通过JOB SCHEDULER 进行 ORACLE CUBE 中的物化视图进行刷新时,出现的LOG如下:
SQL> exec dbms_mview.refresh('DW.CB$DSS_TFAC_DEVICE_CUBE'); BEGIN dbms_mview.refresh('DW.CB$DSS_TFAC_DEVICE_CUBE'); END; * 第 1 行出现错误: ORA-37162: OLAP 错误 XOQ-00703: 执行 OLAP DML 命令 "(SYS.AWXML!R11_AGGREGATE_CONSISTENT('DSS_TFAC_DEVICE_CUBE.CUBE' 'DSS_TFAC_DEVICE_CUBE.SOLVE.AGGREGATIONDEFINITION' 'DSS_TFAC_DEVICE_CUBE.QUANTITY.MEASURE' NA) : ORA-00600: 内部错误代码, 参数: [xscbTest], [18446744073709551615], [], [], [], [], [], [], [], [], [], [] )" 时出错 ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2558 ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2771 ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2740 ORA-06512: 在 line 1
问题很奇怪,其他的物化视图正常,唯独该视图无法刷新,查了一下ORA-00600的报错,大部分人
给出的方案是重启数据库,或者ORACLE BUG 无法修复。这些等于没有说,肯定不是问题的所在。
2.尝试通过AWM对CUBE 进行刷新,幸运的是得到了更详细的LOG ,贴在下面。
1: <ERROR TEXT="XOQ-01600: 执行 DML "SYS.AWXML!R11_LOAD_MEASURES('DSS_TFAC_DEVICE_CUBE.CUBE' SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 1) SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 2) 'DSS_TFAC_DEVICE_CUBE.QUANTITY.MEASURE' 'NO')" 时发生 OLAP DML 错误 "ORA-35571: 已达到最大加载错误数。""/>
1:
2:
3: <ERROR TEXT="XOQ-01600: 执行 DML "SYS.AWXML!R11_LOAD_MEASURES('DSS_TFAC_DEVICE_CUBE.CUBE' SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 1) SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 2) 'DSS_TFAC_DEVICE_CUBE.QUANTITY.MEASURE' 'NO')" 时发生 OLAP DML 错误 "ORA-35571: 已达到最大加载错误数。""/>
出现以上问题时,执行的SQL是:
1: <SQL> <![CDATA[ SELECT /*+ bypass_recursive_check cursor_sharing_exact no_expand no_rewrite */ T36_DLLX ALIAS_145, T33_XZQH ALIAS_146, T30_DEVTYPEID ALIAS_147, T27_MONTH_ID ALIAS_148, SUM(T39_COUNTFLAG) ALIAS_149 FROM ( SELECT /*+ no_rewrite */ T1."DEVTYPEID" T39_DEVTYPEID, T1."XZQH" T39_XZQH, T1."DLLX" T39_DLLX, T1."AZRQ" T39_AZRQ, T1."COUNTFLAG" T39_COUNTFLAG FROM DW."ITMS_DW_FACT_DEVICE" T1 ) T39, ( SELECT /*+ no_rewrite */ T1."DLLX" T36_DLLX FROM DW."ITMS_DW_DIM_DLLX" T1 ) T36, ( SELECT /*+ no_rewrite */ T1."XZQH" T33_XZQH FROM DW."ITMS_DW_DIM_DISTRICT" T1 ) T33, ( SELECT /*+ no_rewrite */ T1."DEVTYPEID" T30_DEVTYPEID FROM DW."ITMS_DW_DIM_DEVTYPE" T1 ) T30, ( SELECT /*+ no_rewrite */ T1."DATE_KEY" T27_DATE_KEY, T1."MONTH_ID" T27_MONTH_ID FROM DW."ITMS_DW_DIM_TIME" T1 ) T27 WHERE ((T36_DLLX = T39_DLLX) AND (T33_XZQH = T39_XZQH) AND (T30_DEVTYPEID = T39_DEVTYPEID) AND (T27_DATE_KEY = T39_AZRQ) ) GROUP BY (T27_MONTH_ID, T30_DEVTYPEID, T33_XZQH, T36_DLLX) ORDER BY T27_MONTH_ID ASC NULLS LAST , T30_DEVTYPEID ASC NULLS LAST , T33_XZQH ASC NULLS LAST , T36_DLLX ASC NULLS LAST ]]>/> </SQL>
再仔细查看刷新的日志,MV 拒绝了1170条 数据,原因可能就在这里,问题定位到由于外键引用,事实表的存在的数据,在维中没有相关值。
仔细排查后得到正确的数据。