Oracle – 使用DBMS_MVIEW.REFRESH刷新’REFRESH FORCE ON DEMAND’视图时会发生什么

前端之家收集整理的这篇文章主要介绍了Oracle – 使用DBMS_MVIEW.REFRESH刷新’REFRESH FORCE ON DEMAND’视图时会发生什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下物化视图 –

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] indicate[s] that the materialized
view will be refreshed on demand by
calling one of the three DBMS_MVIEW
refresh procedures.”

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

Oracle版本:10g

解决方法

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

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

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

猜你在找的Oracle相关文章