2009-11-23 93 views
9

我有一个非常复杂的基于其他物化视图,常规视图以及一些表(我不能“快速刷新”)的Oracle视图。大多数情况下,此视图中的现有记录基于日期并且“稳定”,新记录集具有新日期。是否可以部分刷新Oracle中的物化视图?

有时,我会收到反向日期。我知道这些是什么以及如果我维护一张桌子时如何处理它们,但我想保留这个“视图”。完整刷新大约需要30分钟,但在任何给定日期只需要25秒。

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

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

回答

2

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

如果您可以给出一个证明其他语法的例子,我会很乐意将您的答案标记为已接受的。

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

如果这是给你的性能问题(像我一样),还有使用选项atomic_refresh =>假,这将截断,然后再插入/ + APPEND/

+0

为什么downvote? – Galghamon 2010-01-21 08:09:34

1

您可以像使用普通表一样对物化视图进行分区。按日期对mview进行分区,然后只能刷新所需的分区。

+2

在脑子里只想忘记,分区是Enterprise Edition许可的额外费用。因此,请确保您在投入生产之前获得了许可。 – APC 2009-11-23 14:29:30

+1

你是指分区更改跟踪?如果MV查询与所述的一样复杂,那么OP将能够利用这一点看起来像是一个长镜头。 – 2009-11-23 14:37:19

+0

好吧,但我怎么实际刷新只是一个分区?我似乎无法找到任何此语法的例子... – Galghamon 2009-11-23 15:31:59

2

我已经能够刷新具有分区更改跟踪的物化视图的单个分区。

它似乎要求使用REFRESH FAST WITH ROWID选项创建视图,并且使用'P'方法调用DBMS_MVIEW.REFRESH。

9

分区的日期在回答3.你可以只是做一个正常的MV刷新(以下table_refreshed),比使用交换关键字即

ALTER TABLE all_partitions 
    EXCHANGE PARTITION to_calculate 
    WITH TABLE table_refreshed 
    WITHOUT VALIDATION 
    UPDATE GLOBAL INDEXES; 

亲切的问候