2011-09-19 147 views
2

我發現我可以有兩個表,並基於這些已連接的表創建一個fast refresh on commitmaterialized view基於非快速刷新視圖的快速刷新物化視圖

我想什麼但是做的是讓基於以下一個fast refresh on commit物化視圖:

(1)的表連接到它本身是基於其他視圖
(2)complete refresh on demand物化視圖(普通觀點,就是這樣)。

當我嘗試這樣做時,我得到錯誤ORA-12053,它討論了from子句中的條目彼此之間存在依賴關係,即使它們明顯沒有。

我可以通過用一個普通的表替換(2),只是在該表中進行批量插入而不是刷新物化視圖來解決此問題。但是,如果沒有必要,我寧願不這樣做。

我會盡量在一個說明錯誤的小例子上工作,但是如果你能給我一個關於我想做什麼是可能的(最好是通過一個例子)的想法或者不太可能,那將會很棒。

+0

這是一個有趣的問題,請添加例子。 –

回答

0

請按照以下事實瞭解錯誤。

  1. Fast Refresh on Commit物化視圖是基於基表的變更刷新行由行 。
  2. Refresh Complete on Demand物化視圖被刷新 截斷目標表並重新插入所有內容。
  3. 上的刷新物化因爲 Oracle無法跟蹤表2變化視圖將是不可能的(即,刷新完整 物化視圖。)
+0

(1)表和(2)'complete refresh on demand'物化視圖都在物化視圖日誌上,所以我不確定爲什麼我無法從物化視圖快速刷新,但如果我只是快速刷新截斷表並手動重新插入? – Clinton

+0

截斷和提交後可以快速刷新,但「截斷」不會在目標實例化視圖上覆制。你只會在物化視圖中獲得插入。這在嵌套的物化視圖中是不允許的,因爲可以這麼說,很奇怪。它不會反映基表數據。 –

0

上有嵌套限制物化觀點。我在this blogpost中描述了它們。 ORA-12053是不滿足嵌套MV的第一個限制的結果。使底層MV更復雜(一個連接,聚合或聯合所有MV)是一種解決方案。

Regards,
Rob。