Oracle物化视图刷新数据可用性
Oracle materialized view refresh data availability
在具有 Oracle 物化视图的应用程序中,我对刷新期间的数据可用性感到好奇。
我将描述一个潜在的例子。
创建了一个实例化视图,每小时整点刷新一次。查询需要 1 分钟才能 运行 刷新此视图。同时,一组 API 使用此视图来检索数据,并可能写入底层 table(如果这有所不同)。
我的问题如下:
- 在那 1 分钟的刷新时间内查询发生了什么,它们被阻止了吗?他们是否获得数据的旧副本?
- 在此期间写入底层 table 会发生什么情况,它们是否受到任何影响。
- 如果活动查询进入 2:59:59 并在物化视图上运行 30 秒怎么办,这会锁定视图并且直到 3:00:29 才会开始刷新还是该查询被中断并因刷新而暂停?
关于数据查询在物化视图中看到的内容的规则与适用于数据查询在正在发生变化的 table 中看到的内容的规则相同。这些规则总结在 multiversion read consistency.
下的文档中
我假设您正在对实体化视图进行原子刷新。您可以执行非原子刷新,这会在刷新之前对实体化视图进行 运行 分类,但在这种情况下,这几乎肯定不是您想要的。
- 查询将看到查询开始时存在的数据(或者如果会话处于可序列化事务隔离级别,则在事务开始时)。因此它会在刷新开始之前看到一致的数据图片。
- 读取器不会阻止写入器,因此不会影响对底层的写入 table。
- 与 1 相同,查询将看到与查询开始时 运行ning(或事务开始时)存在的数据一致的图片。刷新将 运行 同时发生在一个单独的事务范围内。唯一的影响是查询可能会稍微慢一些,因为它可能需要将一定数量的 UNDO 应用于当前缓存的块,以便 return 查询开始时存在的数据。
在具有 Oracle 物化视图的应用程序中,我对刷新期间的数据可用性感到好奇。
我将描述一个潜在的例子。
创建了一个实例化视图,每小时整点刷新一次。查询需要 1 分钟才能 运行 刷新此视图。同时,一组 API 使用此视图来检索数据,并可能写入底层 table(如果这有所不同)。
我的问题如下:
- 在那 1 分钟的刷新时间内查询发生了什么,它们被阻止了吗?他们是否获得数据的旧副本?
- 在此期间写入底层 table 会发生什么情况,它们是否受到任何影响。
- 如果活动查询进入 2:59:59 并在物化视图上运行 30 秒怎么办,这会锁定视图并且直到 3:00:29 才会开始刷新还是该查询被中断并因刷新而暂停?
关于数据查询在物化视图中看到的内容的规则与适用于数据查询在正在发生变化的 table 中看到的内容的规则相同。这些规则总结在 multiversion read consistency.
下的文档中我假设您正在对实体化视图进行原子刷新。您可以执行非原子刷新,这会在刷新之前对实体化视图进行 运行 分类,但在这种情况下,这几乎肯定不是您想要的。
- 查询将看到查询开始时存在的数据(或者如果会话处于可序列化事务隔离级别,则在事务开始时)。因此它会在刷新开始之前看到一致的数据图片。
- 读取器不会阻止写入器,因此不会影响对底层的写入 table。
- 与 1 相同,查询将看到与查询开始时 运行ning(或事务开始时)存在的数据一致的图片。刷新将 运行 同时发生在一个单独的事务范围内。唯一的影响是查询可能会稍微慢一些,因为它可能需要将一定数量的 UNDO 应用于当前缓存的块,以便 return 查询开始时存在的数据。