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

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

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
Cube 在Oracle数据库中的应用非常广泛,特别是在产生交叉报表的情况。OracleOLAP使用 MView 刷新cube的方法是比较常用的。 我们用Oracle数据库创建了一个cube ,这时cube 里面的数据只有在我们

Cube在Oracle数据库中的应用非常广泛,特别是在产生交叉报表的情况。OracleOLAP使用MView刷新cube的方法是比较常用的。

我们用Oracle数据库创建了一个cube ,这时cube 里面的数据只有在我们手工执行。

dbms_cube.build(‘<cube_name>’) 才会被刷新。

比如你在前面已经建立好了global 的price_cube , 并且执行了第一次dbms_cube.build(‘price_cube’) 你才能查询到数据. 比如执行以下sql:

  1. select * from table(cube_table(’price_cube’))  
  2.  
  3. where product=’ITEM_ENVY STD’  and time=’MONTH_1998.01′; 

此时输出如下 (注意大小写,下划线和空格):

  1. unit_cost    unit_price    time                        product  
  2.  
  3. 3346.85     3480.92       MONTH_1998.01     ITEM_ENVY STD 

现在我们手工更新price_fact 表的这条数据(price_cube 的实际数据来源),

  1. update price_fact set unit_price=9999 
  2.  
  3. where month_id=1998.01 and item_id=’ENVY STD’;  
  4.  
  5. 1 rows updated 

现在重新查看price_cube 的数据,你会发现跟刚才的一样, unit_price 还是等于3480.92 , 而不是随着price_fact 表的数据更新到9999。

启用Cube MView  刷新数据的前提条件

如果你希望你的cube 随着实体表的更新而刷新的话(不一定要是同步), 你就需要把cube 设置成按mv 方式来组织. 不过首先你需要满足以下几个条件:

1.所有的dimension 必须至少有一个level 和 hierarchy。

2.所有的dimension 必须使用同一种聚合操作, sum,min,max 等等。

3.一个cube 的所有属性必须正确的映射到实体表. 一个cube 可以有calculated measures , 但是不能映射到mv , 如果一个cube 的脚本中有高级分析函数也不能映射。

4.dimension 和fact table 之间必须要有约束.至少是外键约束. 如果你没有定义,你可以在启用mv 的时候用Relational Schema Advisor 帮你映射。

5.所有的表上的约束必须同一类型。

6.cube 被压缩了。

7.为了更好的使用query rewrite , 你应该创建relational dimension 对象。

精彩图集

赞助商链接