2012-10-01 69 views
1

我正在查找Oracle物化视图的生命周期。例如以下语句:Oracle物化视图的生命周期

Create materialized view foo
Refresh On Commit
...

将这一观点在每次有一个承诺,我的数据库,或者只是在视图语句中引用的表的一次更新?除此之外,Oracle何时销毁旧缓存并将其替换为新缓存?具体来说,什么是物化视图的“陈旧”窗口?含义取决于创建物化视图需要多长时间。

回答

2

ON COMMIT子句将modify the commit process of all transactions that issue DML on a base table

指定ON COMMIT以指示快速刷新每当数据库提交,关于物化视图的主表进行操作交易发生。此子句可能会增加完成提交所需的时间,因为数据库将执行刷新操作作为提交过程的一部分。

提交将取决于物化视图刷新的成功(这意味着提交可能失败,因为依赖MV无法刷新)。

刷新发生在发出提交的同一事务中。这意味着只要提交完成,所有会话都可以看到更改(因此数据永远不会过时)。

一些你必须要知道的事情:

  • 使用对提交的MV有性能上的代价:物化视图日志(增加了DML“触发器”基表)提高了工作在DML上,显然这个提交会比平时执行更多的工作。评估你的工作量,确保额外的工作不会成为负担。
  • 在聚合on-commit MV中,并发事务可以更新相同的MV行,这可能导致在额外工作之上的提交期间发生一些争用。
  • 有些工具不希望提交失败,这可能会导致一些UI问题(通常是旧的客户端 - 服务器应用程序)。
+0

好吧,很高兴知道。有没有什么特别需要担心什么时候不使用'On Commit'? – Woot4Moo

+0

@ Woot4Moo在使用on-commit时,我已经添加了一些要注意的事项。当您不使用提交时,Oracle只会在您询问时(手动或通过计划的作业)刷新MV。当基表被修改时,这些MV将变得陈旧。 –