龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

解析OracleOLAP使用MView刷新Cube(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
关于第二点,otn 上给的global_schema 的price_cube 的聚合操作就不是同一的sum 操作,所以你启用MView 刷新的时候会报错,注意根据错误信息调整。 关于第三点

关于第二点,otn 上给的global_schema 的price_cube 的聚合操作就不是同一的sum 操作,所以你启用MView 刷新的时候会报错,注意根据错误信息调整。

关于第三点, calculated measure 支持的分析函数:

除了在第一个文件夹 简单算术 文件夹下的六个(+,-,×,/,%) , 其他都算高级分析函数。

关于第四点,fact table 和dimension table 之间至少要有外键约束,这应该是建模标准之一,如果不是多维数据集 比如11g 之前的类型,你可以方便的在外键之间建立组合索引。对于11g 的cube 类型来说,必须需要至少外键约束。

关于第六点,默认的用awm 创建的cube 里面的是没有指定压缩类型和压缩比率的,只有在第一次刷新之后,再启用MView 刷新的时候才能选择压缩选项。awm 里面有提示,注意参考提示信息。

关于第七点最重要, 所谓relational dimension 就是我们通过create dimension 创建的对象。而我们之前说的dimension 一般都是指cube dimension ,它指的是在analysis workspace 里面的dimension 对象。

relational dimension 你可以通过查看dba_dimensions 视图查看. 主要用来控制mv query rewrite 的。

cube dimension 可以通过查看dba_cube_dimensions 视图查看。 另外两个跟aw 相关的视图是dba_cubes 和dba_aws ,

11g 有一些新的跟aw 相关的试图,你可以查看

SELECT * FROM dba_objects WHERE object_name LIKE ‘%AW%’;

其中包括了dimension 和cube 的元数据,dimension 和cube 的统计图信息(analyze 之后收集的), dimension 和cube mv 的元数据, cube 的分区建议和储存建议。具体查看oracle 11g 的文档。

默认的你创建cube 的时候,它会创建对应的relational dimension (awm 里面是这样, 手工从pl/sql 里面创建没试过),你可以删除relational dimension ,cube 里面的dimension 是不会跟着删除的。

relational dimension的一些操作:

查看dimension 的pl/sql

exec dbms_dimension.describe_dimension('global.product_dimension');

输出:

  1. DIMENSION GLOBAL.PRODUCT_DIMENSION  LEVEL FAMILY IS GLOBAL.PRODUCT_DIM.FAMILY_ID  LEVEL ITEM IS GLOBAL.PRODUCT_DIM.ITEM_ID  
  2.  
  3. LEVEL TOTAL IS GLOBAL.PRODUCT_DIM.TOTAL_ID  
  4.  
  5. LEVEL class IS GLOBAL.PRODUCT_DIM.CLASS_ID  
  6.  
  7. ATTRIBUTE FAMILY LEVEL FAMILY DETERMINES GLOBAL.PRODUCT_DIM.FAMILY_DSC  
  8.  
  9. ATTRIBUTE ITEM LEVEL ITEM DETERMINES GLOBAL.PRODUCT_DIM.ITEM_DSC  
  10.  
  11. ATTRIBUTE TOTAL LEVEL TOTAL DETERMINES GLOBAL.PRODUCT_DIM.TOTAL_DSC  
  12.  
  13. ATTRIBUTE class LEVEL class DETERMINES GLOBAL.PRODUCT_DIM.CLASS_DSC 

启用cube MView 刷新

实际启用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 ;

精彩图集

赞助商链接