Oracle SQL采访关于物化视图的问题?

时间:2018-12-16 06:18:10

标签: sql oracle

我在实现视图时遇到了这个问题。

  1. 如果用户在实例化视图刷新正在进行时(基于需要完成刷新方法)运行基于实例化视图之上的报表,将会发生什么情况

我的回答是:按需完成刷新方法将截断整个数据并再次创建,因此用户刷新时可能看不到报告中的任何数据。

  1. 如果我的事务表当前正在更新,并且如果我发出了一条运行20分钟左右的select语句,那么我的select语句会检索旧数据还是检索新更新的数据?

我的回答:Oracle拍摄数据快照。当我点击我的选择语句时,它将从该快照中检索数据。这样它将检索我的旧数据。

请您分享一下您的知识。

1 个答案:

答案 0 :(得分:2)

  1. 根据刷新方式,数据是否可见。如果atomic_refresh = true,则刷新基本上将是DELETE + INSERT(即没有TRUNCATE),因此使用Oracle的读取一致性功能,您将在选择查询被触发时获得数据。如果atomic_refresh = false,它将遵循TRUNCATE + INSERT / + APPEND /逻辑,因此在刷新完成之前,您不允许读取该表,因此会出错。

看看下面的链接

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1857127200346321681

  1. 您是正确的,Oracle会在选择被触发时为您获取数据。因此,即使添加并提交了新行,您也将获得查询开始时存在的记录。对于常规表也是如此。如果您运行一个select count(*)查询,该查询大约需要10分钟才能完成,并且该表具有1000行,并且在评估期间,如果有人要在那10分钟内添加100行并提交到表中,则查询将返回输出一千行。(Oracle就是这种情况)