首页 文章

使用物理视图,主表空

提问于
浏览
0

我正在使用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
  • 在稍后的某个时间点,由于某种原因,主表master_tab被截断

  • 因此,现在,只有物化视图具有与主表master_tab上的任何查询相关的任何数据

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

SELECT col1, col2
SUM(tr_val1), SUM(tr_val2)
FROM master_tab
GROUP BY col1, col2
  • Oracle内部采取什么样的决策来从物化视图中获取数据?

  • 即使Master表为空,Oracle仍然会从物化视图中检索正确的数据吗?

  • 如果对#2的回答是肯定的,那是否意味着只要不再次刷新实体化视图,Oracle仍然可以获取从主站查找数据的所有查询的数据?

谢谢你的帮助

1 回答

  • 2

    试着回答你的问题:

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

    以上除了检查SQL本身是否可以使用MV重写(您可以在SQL上使用 DBMS_MVIEW.EXPLAIN_REWRITE 来建议是否可以重写以及使用哪个MV

    • 完整性级别 QUERY_RESRITE_INTEGRITY 用于查看是否允许使用查询重写 . 默认值为 ENFORCED ,可以是 TRUSTEDSTALE_TOLERATED . 在您的情况下,如果它是 TRUSTEDSTALE_TOLERATED ,查询仍将被重写,并且将从MV检索数据

    • 我相信是的,2

相关问题