Oracle物化视图BUILD DEFERRED下REFRESH ON COMMIT未触发问题咨询
Oracle BUILD DEFERRED物化视图常见问题解答
1. “首次(延迟)刷新必须始终为全量刷新”的具体含义
使用BUILD DEFERRED参数创建物化视图时,Oracle仅会创建物化视图的元数据结构,不会执行定义中的SELECT语句拉取基表数据生成初始快照。
增量刷新的核心逻辑是对比「上一次刷新的基准快照」和「基表后续的变更记录」,仅同步差异数据。而刚创建的DEFERRED物化视图没有初始基准快照,不存在用于对比的参照数据,因此第一次刷新无法使用增量模式,必须完整执行物化视图的SELECT查询,把所有符合条件的基表数据全量写入物化视图,生成第一个可用的基准快照,这就是要求首次刷新必须为全量刷新的原因。
2. 指定REFRESH FORCE ON COMMIT后基表提交未触发自动刷新的原因
ON COMMIT自动刷新机制仅对处于可用状态的物化视图生效。
你使用BUILD DEFERRED创建物化视图后、完成首次全量刷新前,物化视图的陈旧度(staleness)状态为UNUSABLE(不可用),此状态下Oracle不会将该物化视图纳入提交时的自动刷新队列,哪怕基表发生变更并提交也不会触发刷新。
只有手动执行EXEC DBMS_MVIEW.REFRESH('mcastfilm');完成首次全量刷新,物化视图状态转为可用后,后续基表的变更提交才会自动触发你配置的REFRESH FORCE ON COMMIT刷新逻辑。
内容的提问来源于stack exchange,提问作者Lev
相关产品推荐
相关产品推荐

