You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于预填充表创建物化视图,刷新时如何保留原有数据?

解决预建表物化视图刷新时保留原数据的问题

当你基于预建表创建物化视图后状态为unknown,默认全量刷新会清空重填数据,要保留预建表数据并让MV支持查询重写,可通过以下方法实现:

核心方案:用一致性验证替代全量刷新

调用DBMS_MVIEW.REFRESH时指定method => 'C'参数执行一致性验证:

exec dbms_mview.refresh(list => 'T_MV', method => 'C');

这个操作会对比预建表数据与物化视图定义的查询结果:

  • 若数据完全匹配,MV状态直接更新为fresh,不会修改预建表的任何数据(包括原有的排序规则);
  • 若数据不匹配,Oracle会自动执行全量刷新同步数据。

前置要求

  1. 预建表的结构(列名、数据类型、精度等)必须和物化视图定义的查询结果完全一致;
  2. 预建表的数据要严格符合物化视图的查询逻辑(即执行select col1, col2, col3 from t得到的结果,和预建表t_mv的数据完全相同)。

补充说明

如果后续需要增量刷新,需满足:

  • 基表t已创建对应的物化视图日志;
  • 创建物化视图时指定支持快速刷新的属性,示例:
create materialized view t_mv
on prebuilt table
enable query rewrite
with primary key
as
    select col1, col2, col3 from t
;

内容的提问来源于stack exchange,提问作者Michael Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:37:04