是否可以在Oracle中部分刷新物化视图?

Gal*_*mon 11 oracle partitioning materialized-views data-warehouse

我有一个非常复杂的Oracle视图,基于其他物化视图,常规视图以及一些表(我无法"快速刷新"它).大多数情况下,此视图中的现有记录基于日期并且是"稳定的",新记录集具有新日期.

偶尔,我会收到回复日期.我知道那些是什么以及如果我维持一张桌子如何处理它们,但我想保持这个"观点".完全刷新大约需要30分钟,但任何给定日期只需25秒.

我是否可以指定只应更新物化视图的一部分(即受影响的日期)?

我是否必须废弃视图并使用表和过程来填充或刷新该表中的给定日期?

小智 8

答案3(skaffman)按日期分区.

您可以只刷新正常的mv(table_refreshed下面),然后使用exchange关键字ie

ALTER TABLE all_partitions
  EXCHANGE PARTITION to_calculate
  WITH TABLE table_refreshed
  WITHOUT VALIDATION
  UPDATE GLOBAL INDEXES;
Run Code Online (Sandbox Code Playgroud)


Gal*_*mon 3

经过更多阅读和判断这个问题缺乏答案,我得出的结论是不可能刷新物化视图的单个分区。

如果您能给出一个语法示例来证明事实并非如此,我会很乐意将您的答案标记为已接受的答案。

对于将来可能会发现此问题有用的其他人:您可能还想知道在 Oracle 10g 中,刷新分区(或任何 mview)将导致 Oracle 发出DELETE,然后发出INSERT

如果这给你带来了性能问题(像我一样),可以选择使用atomic_refresh => false,它将TRUNCATE,然后INSERT /*+APPEND*/