Oracle物化视图刷新数据可用性

时间:2019-03-01 23:43:45

标签: sql oracle materialized-views oracledb

在具有Oracle实例化视图的应用程序中,我对刷新期间的数据可用性感到好奇。

我将描述一个潜在的例子。

创建的物化视图每小时刷新一次。该查询需要1分钟才能运行以刷新此视图。 同时,一组API使用此视图来检索数据,如果有区别的话,可能会写入基础表。

我的问题如下?

  1. 在那一分钟的刷新时间内查询发生了什么,它们被阻止了吗?他们是否获得了数据的旧副本?
  2. 在这段时间内写入基础表会发生什么,无论它们以任何方式受到影响。
  3. 如果活动查询出现在2:59:59中并在实例化视图上运行了30秒,这会锁定视图并刷新直到3:00:29才开始,还是该查询被中断并暂停了怎么办?刷新吗?

如果需要任何澄清,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:3)

关于在物化视图中看到的数据查询的规则与适用于正在发生变化的表中看到的数据查询的规则相同。这些规则在multiversion read consistency下的文档中进行了总结。

我将假定您正在对物化视图进行原子刷新。您可以执行非原子刷新,这将在刷新之前截断物化视图,但是在这种情况下,这几乎肯定不是您想要的。

  1. 查询将看到查询开始时(或如果会话处于可序列化的事务隔离级别中的事务开始时)存在的数据。因此,在刷新开始之前,它将看到一致的数据图片。
  2. 读取器不会阻止写入器,因此不会影响对基础表的写入。
  3. 与1相同,当查询开始运行(或事务开始)时,查询将看到一致的数据图片。刷新将在单独的事务范围内同时运行。唯一的影响是查询可能会稍微慢一些,因为它可能需要对当前缓存的块应用一定数量的UNDO才能返回查询开始时存在的数据。