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

问题描述 投票:1回答:1

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

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

创建一个物化视图,可以按小时刷新每小时。查询需要1分钟才能刷新此视图。与此同时,一组API使用此视图来检索数据,如果这会产生影响,可能会写入基础表。

我的问题如下?

  1. 在1分钟刷新时间内查询会发生什么,是否被阻止?他们得到旧数据的副本吗?
  2. 在此期间写入基础表会发生什么,是否会受到任何影响。
  3. 如果活动查询在2:59:59中出现并在物化视图上运行30秒怎么办,这会锁定视图并且刷新不会在3:00:29之前启动,或者该查询是否被刷新中断和暂停?

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

谢谢!

sql oracle materialized-views oracledb
1个回答
3
投票

数据查询在物化视图中看到的规则与适用于数据查询在正在发生更改的表中看到的规则相同。这些规则总结在multiversion read consistency的文件中。

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

  1. 查询将查看查询启动时存在的数据(或者当会话处于可序列化事务隔离级别时事务启动时)。因此,在刷新开始之前,它会看到数据的一致画面。
  2. 读者不会阻止编写器,因此对基础表的写入没有影响。
  3. 与1相同,查询将看到查询开始运行时(或事务开始时)存在的数据的一致图片。刷新将仅在单独的事务范围内同时运行。唯一的影响是查询可能会稍微慢一些,因为它可能需要将一定量的UNDO应用于当前缓存的块,以便返回查询开始时存在的数据。
© www.soinside.com 2019 - 2024. All rights reserved.