如何跟踪应用程序上次处理的数据库记录/行?

Posted

技术标签:

【中文标题】如何跟踪应用程序上次处理的数据库记录/行?【英文标题】:How to keep track of database record/row processed by an application last time? 【发布时间】:2019-12-09 08:17:24 【问题描述】:

我正在运行一个 Spring Boot 应用程序,它将读取 Oracle 数据库中的记录/行,处理/转换它,将转换后的数据保存到 no-sql 类型的辅助数据库中。我的要求是跟踪应用程序已经处理的记录/行。我有以下限制:

    数据量巨大,无法一次性处理所有记录。 向数据库添加一列(可能是一个布尔标志以指示该行是否已处理)以进行跟踪不是一种选择。

【问题讨论】:

此应用程序的目的是将数据从主(具有数十亿条记录的oracle数据库)迁移到辅助(无sql数据库)数据库。 如何添加与问题表的主键列相关的列和标志列? 【参考方案1】:

我认为您可能需要考虑 ROWID 伪列,具体取决于数据库上当前发生的情况。 除非您对表执行特定操作,否则 ROWID 对行应该是唯一的: What can cause an Oracle ROWID to change?

表的导出/导入 更改表 XXXX 移动 ALTER TABLE XXXX 缩小空间 闪回表 XXXX 分割分区 更新值以将其移至新分区 合并两个分区 在 IOT 的情况下,更新主键也会为您提供不同的 ROWID。

如果这些操作都没有发生,您可以选择带有 rowid 的记录,将其存储到您的第二个数据库(或任何地方)并始终检查记录是否已被处理。 如果您不知道数据库可能会发生什么,那么使用主表的主键引用的已处理行列表创建新表似乎是个好主意。 考虑将第二个表创建为索引组织表,因为它会不断增长,它可能会为您节省大量通过 rowid 不必要的行访问。

【讨论】:

以上是关于如何跟踪应用程序上次处理的数据库记录/行?的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 和 iCloud;如何跟踪上次保存到云端的设备?

跟踪自上次尝试______以来的时间

如何在pl sql中跟踪异常终止

如何从像 Asp.Net 这样的堆栈跟踪中获取“源错误”?

Ruby 异常处理:反向堆栈跟踪顺序

spring cloud sleuth 如何将跟踪信息添加到 logback 日志行