代码之家  ›  专栏  ›  技术社区  ›  Sofia

使用主表为空的物化视图

  •  0
  • Sofia  · 技术社区  · 7 年前

    我在Oracle中使用物化视图的概念执行了一些测试,但我无法回答这个问题,当最初创建物化视图的主表变为空时,它会获取行吗?我在下面列出了一系列事件,以形象化我的想法,

    这里有一个例子

    主表

    CREATE TABLE master_tab
    (                    
    col1 varchar2(10),         
    col2 varchar2(10), 
    col3 varchar2(10),
    tr_val1 number,
    tr_val2 number,
    tr_val3 number
    )
    

    物化视图定义

    CREATE MATERIALIZED VIEW mview_test
    BUILD IMMEDIATE 
    REFRESH COMPLETE
    ON DEMAND 
    ENABLE QUERY REWRITE
    AS SELECT col1, col2
    SUM(tr_val1), SUM(tr_val2)
    FROM master_tab
    GROUP BY col1, col2
    
    1. 在稍后的某个时间点,由于某种原因,主表master\u选项卡被截断
    2. 因此,现在只有物化视图具有与主表Master\u选项卡上的任何查询相关的任何数据

    我不太熟悉Oracle在幕后如何获取正确的数据。现在,当从主表中寻找数据的应用程序执行查询时会发生什么?例如,当应用程序查询时会发生什么情况,

    SELECT col1, col2
    SUM(tr_val1), SUM(tr_val2)
    FROM master_tab
    GROUP BY col1, col2
    
    1. Oracle在内部采取什么样的决策来从物化视图中获取数据?
    2. 即使主表为空,Oracle还会从物化视图中检索正确的数据吗?

    谢谢你的帮助

    1 回复  |  直到 7 年前
        1
  •  2
  •   BA.    7 年前

    尝试回答您的问题:

    1. 要使用查询重写并从MV中提取数据,需要检查以下内容:a)查询重写启用(会话)b)查询重写启用(MV)和c)重写完整性检查(我认为这是您需要控制的地方)

    如果可以使用MV重写SQL(您可以使用 DBMS_MVIEW.EXPLAIN_REWRITE 在SQL上,建议是否可以重写以及使用哪个MV

    1. QUERY_RESRITE_INTEGRITY 用于查看是否允许使用查询重写。默认值为 ENFORCED TRUSTED STALE_TOLERATED . 在你的情况下,如果是 STALE_容忍

    推荐文章