prod oracle table 继续阅读

prod oracle table continues read

在一种情况下寻求帮助。 我有一个经常读取元数据 table 的 OLTP 应用程序 (app1),这个 table 只有 2k 条记录。 另一个应用程序 (app2) 需要在一天内刷新(再次删除和插入 2k 条记录)元数据 table 几次。

既然没有停机时间,我该如何刷新元数据table?

我能想到的一个选项是:

  1. 将列“ACTIVE”添加到元数据table(初始加载将 1 作为活动)
  2. app1 阅读时始终使用 Active=1
  3. app2:第一次插入新元数据,Active=0
  4. app2: 第二次删除活动=1
  5. app2:第 3 次更新所有行 Active=1
  6. app2:终于提交

我不是很确定上面的选项,还有其他选择吗?

需要停机的问题是什么?你不需要在这里做任何特别的事情,除非你有 2,000 行数据,但每行的大小为数百 MB,或者你在 App1 中有一些 运行 几个小时的查询(这在OLTP 应用程序)。

只要您将 deleteinsert 作为单个事务的一部分进行(如您所言),您应该不会对 App1 造成任何问题。刷新提交之前的任何查询 App1 运行s 都将看到刷新之前的数据状态。刷新提交后 App1 运行s 的任何查询都将看到刷新后的数据状态。 Readers never block writer and writers never block readers in Oracle 所以 App1 不会关心 App2 是否正在刷新(好吧,如果它需要使用数据,它可能需要做更多的工作来读取数据在 undo 段中重建数据的读取一致视图,但这不太可能对性能产生有意义的影响。