代码之家  ›  专栏  ›  技术社区  ›  Shankar Panda

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

  •  0
  • Shankar Panda  · 技术社区  · 6 年前

    1. 如果用户在进行物化视图刷新时运行构建在物化视图之上的报表(刷新方法按需完成),会发生什么情况

    我的回答是:

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

    我的回答是: Oracle拍摄数据快照。当我点击select语句时,它将从该快照中检索数据。因此它将检索我的旧数据。

    你能分享一下你在这方面的知识吗。

    1 回复  |  直到 6 年前
        1
  •  2
  •   George Joseph    6 年前
    1. 数据是否可见取决于刷新的方式。如果atomic_refresh=true,则刷新基本上是一个DELETE+INSERT(即no TRUNCATE),因此使用Oracles的读取一致性功能,您将获得触发select查询时的数据。如果atomic_refresh=false,它将跟随一个TRUNCATE+INSERT/ +附加

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

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