当前位置: 首页 > 面试题库 >

如何确定上次更新Oracle表的时间

彭朝
2023-03-14
问题内容

我能否找出对Oracle数据库中的表执行最后一条INSERT,UPDATE或DELETE语句的时间,如果是,如何执行?

背景知识:Oracle版本为10g。我有一个定期运行的批处理应用程序,可从单个Oracle表中读取数据并将其写入文件中。如果自上次运行作业以来数据未更改,我想跳过此步骤。

该应用程序用C ++编写,并通过OCI与Oracle通信。它以“普通”用户身份登录到Oracle,因此我不能使用任何特殊的管理员内容。

编辑:好的,“ Special Admin Stuff”并不是一个很好的描述。我的意思是:除了从表中选择并调用存储过程外,我什么也不能做。如果要在2010年之前完成更改数据库本身的任何事情(例如添加触发器),则很遗憾。


问题答案:

由于您的重量为10克,因此可以使用ORA_ROWSCN伪列。这样,您就可以得出导致该行发生更改的最后一个SCN(系统更改号)的上限。由于这是一个递增的序列,因此您可以存储ORA_ROWSCN已看到的最大值,然后仅查找SCN大于该最大值的数据。

默认情况下,ORA_ROWSCN实际上保持在块级别,因此对块中任何行的更改都会更改该块ORA_ROWSCN中所有行的。如果要在不考虑“正常”数据访问模式的情况下将多次处理的行数减至最少,而无需进行更改,那么这可能就足够了。您可以重建表,ROWDEPENDENCIES通过该表ORA_ROWSCN可以在行级别跟踪,这将为您提供更详细的信息,但需要一次性的精力来重建表。

另一种选择是配置诸如更改数据捕获(CDC)之类的内容,并使OCI应用程序成为对表进行更改的订阅者,但这还需要一次性的精力来配置CDC。



 类似资料:
  • 问题内容: 有一个Oracle数据库模式(数据很小,但仍然约有10-15个表)。它包含一种配置(路由表)。 有一个应用程序必须不时轮询此架构。通知将不被使用。 如果没有更新架构中的数据,则应用程序应使用其当前的内存版本。 如果任何表有任何更新,则应用程序应将所有表重新加载到内存中。 自给定关键点(时间或交易ID)以来,检查整个架构以进行更新的最有效方法是什么? 我猜想Oracle会为每个架构保留一

  • 问题内容: 有没有一种方法可以从ElasticSearch中检索有关特定索引的最新更新时间的信息?我的目标是能够知道什么时候是最后一次在索引中插入/更新/删除任何文档。如果无法做到这一点,是否可以在索引修改请求中添加一些内容,以便稍后提供此信息? 问题答案: 您可以从_timestamp获取修改时间 为了更轻松地返回时间戳,您可以设置Elasticsearch来存储它: 如果插入文档然后对其进行查

  • 问题内容: 我有一个很少更新的SQL Server 2000数据库实例。我也有一个数据库表,该表没有任何列保存每一行的创建日期或修改日期。 有什么方法可以确定上一次对整个数据库进行更新或插入的时间,以便至少可以限制表中特定记录的更改时间? 注意:我正在寻找有关已经发生的交易的信息。触发器可能会帮助我们将来再次出现此问题,但不能解决我要描述的问题。 如果可以做到,我该怎么办? 问题答案: 数据库的日

  • 问题内容: 匹配条件后,如何在一段时间后更新表? 我需要在满足某些条件后进行更新,并在2天后根据收到的最新答案(即e)进行更新,因此应在上进行更新。 问题答案: 试试这个 如此看来,这两个表是由相连的,并且具有的最新回答日期。通过使用我们可以知道今天的日期和比赛的答案之间的差异。

  • 我想对一个MySQL表进行顺序读取,而不需要一个标识符。另外,我想给每个记录的第一列分配一个相关的数字。更新时应使用哪些说明? 太感谢你了。

  • 主要内容:Oracle UPDATE语句简介,Oracle UPDATE示例在本教程中将学习如何使用Oracle 语句来更改表中的已存在值。 Oracle UPDATE语句简介 要更改表中已存在的值,请使用以下Oracle 语句: Oracle UPDATE示例 下面让我们来创建一个包含示例数据的新表。 首先,下面的CREATE TABLE语句创建一个名为的新表: 其次,以下语句将示例数据添加到表中: Oracle 12c 插入数据语句 - 现在,查询上面创建的表中的数据