Oracle物化视图的生命周期

时间:2012-10-01 14:05:39

标签: sql oracle materialized-views

我正在寻找Oracle物化视图的生命周期。例如声明:

Create materialized view foo
Refresh On Commit
...

每次提交数据库时,或者只是视图语句中引用的某个表时,是否会更新此视图?除此之外,Oracle在什么时候销毁旧缓存并将其替换为新缓存?具体来说,物化视图的“陈旧性”窗口是什么?意思是它取决于创建物化视图所需的时间。

1 个答案:

答案 0 :(得分:2)

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

  

指定ON COMMIT以指示只要数据库提交在实例化视图的主表上操作的事务,就会发生快速刷新。此子句可能会增加完成提交所需的时间,因为数据库会在提交过程中执行刷新操作。

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

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

您必须注意的一些事项:

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