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
为标签吗?
是否有任何其他我应该注意的障碍可能会导致插入、更新或删除记录而不增加此值?
ORA_ROWSCN是始终递增当行的变化-但在默认配置中也可以增加当行不改变
如果您需要检查整个表的 udates,一种方法是使用 auditing。在另一方面,如果你只需要检查你正在努力更新冲突的行,ora_rowscn
与rowdependencies
理想。
每次获取 max(ora_rowscn) 都需要进行全表扫描。每次刷新整个缓存可能会更快。
听起来您需要一种方法来通知其他服务发生了更改以及更改的内容。您可以维护一个日志表,其中有一列指示哪个系统需要使用更改。该列可以有两个基于函数的索引,每个服务一个索引,这样每个索引只包含需要使用的条目。然后,当它们被消耗时,它们可以将值设为 NULL 以将其从索引中删除。
或者您可以只使用 Oracle 的Advanced Queuing。
归档时间: |
|
查看次数: |
29175 次 |
最近记录: |