2011-09-19 101 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。