oracle刷新cube,OracleOLAP如何使用MView刷新Cube呢?

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

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

dbms_cube。

build(‘’) 才会被刷新。

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

select * from table(cube_table(’price_cube’))

where product=’ITEM_ENVY STD’

and time=’MONTH_1998。

01′;

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

unit_cost

unit_price

time

product

3346。85

3480。92

MONTH_1998。01

ITEM_ENVY STD

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

update price_fact set unit_price=9999

where month_id=1998。

01 and item_id=’ENVY STD’;

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 对象。

关于第二点,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');。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值