我正在使用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 回答
试着回答你的问题:
以上除了检查SQL本身是否可以使用MV重写(您可以在SQL上使用
DBMS_MVIEW.EXPLAIN_REWRITE
来建议是否可以重写以及使用哪个MV完整性级别
QUERY_RESRITE_INTEGRITY
用于查看是否允许使用查询重写 . 默认值为ENFORCED
,可以是TRUSTED
或STALE_TOLERATED
. 在您的情况下,如果它是TRUSTED
或STALE_TOLERATED
,查询仍将被重写,并且将从MV检索数据我相信是的,2