2009-11-23 90 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; 

親切的問候