4

我有以下物化视图-

CREATE MATERIALIZED VIEW TESTRESULT 
ON PREBUILT TABLE WITH REDUCED PRECISION
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY
AS 
SELECT...
FROM...
WHERE...

此物化视图没有支持 MATERIALIZED VIEW LOG。从上面的条款中可以看出,这个 MV 有“ON DEMAND”指定,并且根据 Oracle 文档,

“[ON DEMAND] 指示 [s] 物化视图将通过调用三个 DBMS_MVIEW 刷新过程之一按需刷新。”

当我调用 DBMS_MVIEW.REFRESH('TESTRESULT') 时,发生了什么?是否手动检查每条记录以查看是否已更新?

甲骨文版本:10g

4

1 回答 1

8

默认情况下(以及此默认更改在不同版本的 Oracle 中),这将对物化视图进行完整的原子刷新。这意味着物化视图中的数据将被删除,底层查询将被重新执行,结果将被加载到物化视图中。您可以通过为参数传入 FALSE 值来提高刷新效率ATOMIC_REFRESH,即

dbms_mview.refresh( 'TESTRESULT', atomic_refresh => false );

这将导致物化视图被截断,查询重新执行,结果通过直接路径插入插入到物化视图中。这将比原子刷新更有效,但在刷新期间物化视图将为空。

于 2011-06-14T20:15:49.153 回答