解析OracleOLAP使用MView刷新Cube(1)(3)
刷新MView
刷新时间点上有三种方式:
on demand , 等待手工刷新
start next ,定时到将来刷新
推荐的维护mv 刷新还是使用awm , 如果是定时的话就使用下面一些pl/sql。
exec dbms_cube.build(’PRICE_CUBE’); — 这是全刷新
可以一句话包含多个cube 或dimension , exec dbms_cube.build(’PRICE_CUBE, xxx_CUBE , xxx_dimension’);
刷新mv:
exec dbms_mview.refresh(’CB$PRODUCT_PRIMARY’,'C’);
C 当然是代表complete , 这会刷新所有跟这个dimension 的这个hierarchy 有关的mv,
或者exec dbms_mview.refresh(’CB$PRICE_CUBE’,'F’) 这会以force 方式刷新这个cube 的它对应的mv。
你可以说使用以下sql 查看mv 的状态:
- select owner||’.'||mview_name cube_mv, rewrite_enabled, staleness
- from all_mviews
- where container_name like ‘CB$%’;
Staleness 这一栏下有fresh 和stale 两种状态,fresh 表示所有数据都已经最新了, stale 表示有新的数据没有刷新但是mv 仍然可用。
MView的一些注意事项
如果query rewrite 没有使用mv ,则检查:
- query_rewrite_enabled =FORCE
- query_rewrite_integrity=stale_tolerated
使用dbms_mview.explain_rewrite 查看为什么query rewrite 没有成功。
有关Oracle数据库的更多知识请参考我们网站的Oracle专栏: