Oracle 10g:正确使用 ora_rowscn 检测表行更改(即插入、更新、删除)

osc*_*tin 6 delete oracle-10g insert update

对检查表的记录上次更新、修改或删除时间的一些研究使我找到了称为 ora_rowscn 的伪列。

首先,我这样做:

select max(ora_rowscn) from tablename;

我记下了这个数字。然后我执行插入、更新和删除,检查每个之前和之后的最大值。它似乎随着每种类型的变化而增加。

如果您想知道我为什么要这样做,我们会在 C# windows 服务中缓存实体列表。此服务在两个负载平衡的服务器上运行,因此每个服务器都有一个单独的实例运行。当服务器 A 上发生更新时,服务器 B 需要知道它。我想要做的是将 max(ora_rowscn) 缓存到一个变量中。每次我们的应用程序插入、更新或删除一条记录时,它都会从数据库中获得一个新的最大值。如果值不同,那么它显然知道它需要从数据库中获取一个新列表。

所以我的实际问题是:是否还有其他我应该注意的问题可能会导致插入、更新或删除记录而不增加该值?

编辑:有人可以添加ora_rowscn为标签吗?

Jac*_*las 9

是否有任何其他我应该注意的障碍可能会导致插入、更新或删除记录而不增加此值?

ORA_ROWSCN始终递增当行的变化-但在默认配置中也可以增加当行不改变

如果您需要检查整个表的 udates,一种方法是使用 auditing。在另一方面,如果你只需要检查你正在努力更新冲突的行,ora_rowscnrowdependencies理想。


Lei*_*fel 6

每次获取 max(ora_rowscn) 都需要进行全表扫描。每次刷新整个缓存可能会更快。

听起来您需要一种方法来通知其他服务发生了更改以及更改的内容。您可以维护一个日志表,其中有一列指示哪个系统需要使用更改。该列可以有两个基于函数的索引,每个服务一个索引,这样每个索引只包含需要使用的条目。然后,当它们被消耗时,它们可以将值设为 NULL 以将其从索引中删除。

或者您可以只使用 Oracle 的Advanced Queuing