【问题标题】:Materialized View won't get created if I use refresh fast clause如果我使用刷新快速子句,将不会创建物化视图
【发布时间】:2016-07-20 18:34:01
【问题描述】:

我使用这个子句来创建物化视图

CREATE MATERIALIZED VIEW mvName
REFRESH FAST
START WITH TO_DATE('01-APR-2016 12:19:00','dd-mon-yyyy hh24:mi:ss')
NEXT SYSDATE+1/1440 as ....;

使用这个脚本,这不会创建实体化视图。但是如果我使用 REFRESH COMPLETE,那么它将创建物化视图。

oracle 文档中还有一条注释说 如果您指定 REFRESH FAST,则 CREATE 语句将失败,除非物化视图主表已经存在物化视图日志。发生直接路径插入时,Oracle 数据库会自动创建直接加载程序日志。无需用户干预。

而且我不确定我遇到的问题是否是因为我不完全理解的这条评论(特别是这条评论:然后 CREATE 语句将失败,除非物化视图的物化视图日志已经存在主表)。

【问题讨论】:

  • 真的,脚本中唯一重要的部分是as ... 部分......你漏掉了。
  • 哇?为什么?这是一个选择 * stmt。使用 REFRESH FAST 子句时有什么需要特别注意的吗?
  • 好吧,因为您的选择中有大量 restrictions 可能会或可能不会使其符合快速刷新的条件。如果不知道你的 sql 是什么,就不可能知道它是否可用于快速刷新。

标签: oracle materialized-views


【解决方案1】:

FAST REFRESH 选项允许我们通过仅应用自上次刷新以来的增量来将物化视图与其基础表同步。诀窍是甲骨文需要知道增量是什么。

所以我们需要在底层源表上创建物化视图日志。而且,正如错误消息所表明的,我们无法使用 FAST REFRESH 选项创建物化视图,除非 SELECT 子句中的所有表都具有此类日志。 Find out more

我们不需要带有 COMPLETE REFRESH 选项的具体化视图的日志,因为它每次都会查询整个表。

【讨论】:

    【解决方案2】:
    create materialized view log on xx_test_tab;
    
    CREATE MATERIALIZED VIEW mvName
    REFRESH FAST
    START WITH TO_DATE('01-APR-2016 12:19:00','dd-mon-yyyy hh24:mi:ss')
    NEXT SYSDATE+1/1440 as select * from xx_test_tab;
    

    【讨论】:

      猜你喜欢
      • 2016-12-11
      • 2013-06-28
      • 2021-11-06
      • 1970-01-01
      • 2012-07-03
      • 2015-06-13
      • 2013-12-04
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多