当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
OracleOLAP使用mv刷新Cube(2)
发布时间:2010/12/10 14:53:18 来源:www.xue.net 编辑:城市总裁吧
     输出:

  DIMENSION GLOBAL.PRODUCT_DIMENSION  LEVEL FAMILY IS GLOBAL.PRODUCT_DIM.FAMILY_ID  LEVEL ITEM IS GLOBAL.PRODUCT_DIM.ITEM_ID

  LEVEL TOTAL IS GLOBAL.PRODUCT_DIM.TOTAL_ID

  LEVEL class IS GLOBAL.PRODUCT_DIM.CLASS_ID

  HIERARCHY primary ( ITEM CHILD OF

  FAMILY CHILD OF

  class CHILD OF

  TOTAL

  )

  ATTRIBUTE FAMILY LEVEL FAMILY DETERMINES GLOBAL.PRODUCT_DIM.FAMILY_DSC

  ATTRIBUTE ITEM LEVEL ITEM DETERMINES GLOBAL.PRODUCT_DIM.ITEM_DSC

  ATTRIBUTE TOTAL LEVEL TOTAL DETERMINES GLOBAL.PRODUCT_DIM.TOTAL_DSC

  ATTRIBUTE class LEVEL class DETERMINES GLOBAL.PRODUCT_DIM.CLASS_DSC

  启用cube mv 刷新

  实际启用cube mv 刷新是很简单的, 主要是前提条件都满足了, 在awm 的cube 里面Materialized Views 选项卡里面点击 Enable Materalized View 选项和 Enable Query Rewrite 选项.

  刷新模式有Complete , Fast ,Force . 其他可选方法还有PCT (Partition Change Tracking) 和Fast Solve;

  1. Complete – 全部删除再全部装载

  2. Fast – 使用mv log 记录变化的记录,并且只更新这些记录和对应的聚合记录

  3. Force-  默认使用fast, 如果fast 不可用,才使用complete

  4. Partition Change Tracking:  只刷新部分分区的数据,这在awm 里面没有

  5. Fast Solve:  加载所有的原始数据,但是只计算新数据的聚合值,awm 里面没有

  mv 不会计算calculated measures , 并且随着mv 的体积增大,创建和刷新的速度会变慢(不是呈线性下降),如果你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 ;

  刷新MV

  刷新时间点上有三种方式:

  on demand , 等待手工刷新

  start next ,  定时到将来刷新

  on commit ,  每次源表有提交都刷新.

  推荐的维护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 仍然可用.

  MV 的一些注意事项

  如果query rewrite 没有使用mv , 则检查:

  query_rewrite_enabled =FORCE

  query_rewrite_integrity=stale_tolerated

  使用dbms_mview.explain_rewrite 查看为什么query rewrite 没有成功.

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved