在 Master table 为空的情况下使用实体化视图
Using a Materialized View with the Master table empty
我正在使用 Oracle 中的实体化视图的概念执行一些测试,但我无法回答这个问题,当最初创建实体化视图的主 table 变为空时,实体化视图是否会获取行?我在下面列出了一系列事件来形象化我的想法,
- 基于巨大的Master创建一个有效的物化视图table
举个例子
大师table
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 table master_tab 被截断了
- 因此,现在只有物化视图具有与主控上的任何查询相关的任何数据table master_tab
我不是很了解 Oracle 在幕后为获取正确数据所做的工作。现在,当从主 table 寻找数据的应用程序执行查询时会发生什么?例如,当应用程序查询时会发生什么,
SELECT col1, col2
SUM(tr_val1), SUM(tr_val2)
FROM master_tab
GROUP BY col1, col2
- Oracle 在内部采取什么样的决策来从物化视图中获取数据?
- 即使 Master table 为空,Oracle 是否仍会从实体化视图中检索正确的数据?
- 如果#2 的答案是肯定的,是否意味着只要物化视图不再刷新,Oracle 仍然能够为所有从 Master 查找数据的查询获取数据?
感谢您的帮助
尝试回答您的问题:
- 要使用查询重写并从 MV 中获取数据,请检查以下内容:a) 启用查询重写(会话)b) 启用查询重写(MV)和 c) 重写完整性检查(我认为这是你需要控制的地方)
以上除了检查 SQL 本身是否可以使用 MV 重写(您可以在 SQL 上使用 DBMS_MVIEW.EXPLAIN_REWRITE
来告知是否可以重写以及使用了哪个MV
完整性级别QUERY_RESRITE_INTEGRITY
用于查看是否允许使用查询重写。默认为 ENFORCED
,可以是 TRUSTED
或 STALE_TOLERATED
。在您的情况下,如果它是 TRUSTED
或 STALE_TOLERATED
,查询仍将被重写并且数据将从 MV
中检索
我相信是的,鉴于 2
我正在使用 Oracle 中的实体化视图的概念执行一些测试,但我无法回答这个问题,当最初创建实体化视图的主 table 变为空时,实体化视图是否会获取行?我在下面列出了一系列事件来形象化我的想法,
- 基于巨大的Master创建一个有效的物化视图table
举个例子
大师table
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 table master_tab 被截断了
- 因此,现在只有物化视图具有与主控上的任何查询相关的任何数据table master_tab
我不是很了解 Oracle 在幕后为获取正确数据所做的工作。现在,当从主 table 寻找数据的应用程序执行查询时会发生什么?例如,当应用程序查询时会发生什么,
SELECT col1, col2
SUM(tr_val1), SUM(tr_val2)
FROM master_tab
GROUP BY col1, col2
- Oracle 在内部采取什么样的决策来从物化视图中获取数据?
- 即使 Master table 为空,Oracle 是否仍会从实体化视图中检索正确的数据?
- 如果#2 的答案是肯定的,是否意味着只要物化视图不再刷新,Oracle 仍然能够为所有从 Master 查找数据的查询获取数据?
感谢您的帮助
尝试回答您的问题:
- 要使用查询重写并从 MV 中获取数据,请检查以下内容:a) 启用查询重写(会话)b) 启用查询重写(MV)和 c) 重写完整性检查(我认为这是你需要控制的地方)
以上除了检查 SQL 本身是否可以使用 MV 重写(您可以在 SQL 上使用 DBMS_MVIEW.EXPLAIN_REWRITE
来告知是否可以重写以及使用了哪个MV
完整性级别
QUERY_RESRITE_INTEGRITY
用于查看是否允许使用查询重写。默认为ENFORCED
,可以是TRUSTED
或STALE_TOLERATED
。在您的情况下,如果它是TRUSTED
或STALE_TOLERATED
,查询仍将被重写并且数据将从 MV 中检索
我相信是的,鉴于 2