解析OracleOLAP使用MView刷新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 对象。

#p#

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

#p#

刷新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 的状态:

  1. select owner||’.'||mview_name cube_mv, rewrite_enabled, staleness  
  2.  
  3. from all_mviews  
  4.  
  5. where container_name like ‘CB$%’; 

Staleness 这一栏下有fresh 和stale 两种状态,fresh 表示所有数据都已经最新了, stale 表示有新的数据没有刷新但是mv 仍然可用。

MView的一些注意事项

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

  1. query_rewrite_enabled =FORCE 
  2.  
  3. query_rewrite_integrity=stale_tolerated 

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

有关Oracle数据库的更多知识请参考我们网站的Oracle专栏:

http://database./oracle/

【编辑推荐】

  1. Service Broker基础应用(上)
  2. Service Broker基础应用(下)
  3. 浅述远程Service Broker的实现
  4. 优化你的DiscuzNT,让它跑起来
  5. SQL Server 2008自动化数据采集方法

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/275585.html<

(0)
管理的头像管理
上一篇2025-05-10 06:37
下一篇 2025-05-10 06:39

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注