如何跟踪应用程序上次处理的数据库记录/行?
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 不必要的行访问。
【讨论】:
以上是关于如何跟踪应用程序上次处理的数据库记录/行?的主要内容,如果未能解决你的问题,请参考以下文章