解析OracleOLAP使用MView刷新Cube(二)

2014-11-24 08:26:04 来源: 作者: 浏览: 7
变慢(不是呈线性下降),如果你mv 过大,你应该考虑分割成几个sub cube , 或者去掉一些不用的属性。
  你选择使用mv 来刷新数据之后,oracle 会为每一个dimension 的每个hierarchy 都创建一个mv , 并且mv 的名字都是以CB$ 开头, 你是不能控制这些mv 的,只能控制cube . 以下的sql 可以得到所有的cube 对应的mv。
  启用Query Rewrite
  要使用query rewrite 必须满足以下条件:
  要有create mv 权限和其他相关对象的权限。
  在init.ora 文件中设置QUERY_REWRITE_ENABLED= TRUE 或FORCE ,在session 里面也可以。
  注意awm 里面的检查信息
  注意查看Relational Schema Advisor ,注意这很重要,Relational Schema Advisor 在mv 选项卡的最下面,里面会列出你的schema 不符合query rewrite 的条件。它会给出sql 让你执行,注意查看这些sql 以避免query rewrite 失败。
  你也可能会想要改变约束类型, 从enforced , trusted , norely 到‘RELY’ 因为oracle执行计划消耗会更小。
  alter table "price_fact" add constraint "xxx_constraint" PRIMARY KEY (ITEM_ID, MONTH_ID, UNIT_PRICE, UNIT_COST) RELY enable validate ;

 刷新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 没有成功。

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: