0

背景:我有一个 oracle 表,该表在创建表时没有任何特定列作为时间戳。该表可以有数百万行。

例子:

Employee {Emp_No, Name, Manager,Division, Role, Region}

我的任务:如果通过该表上的作业发生任何更新,我能否知道所有行都更新了。oracle 是否有我可以利用的每一行的任何内部时间戳。我可以在查询中使用它来获取所有记录吗?

原因:我需要向我的团队展示那些模棱两可的记录并没有被我们都怀疑的工作所更新。

4

2 回答 2

2

Oracle 有ORA_ROWSCN伪列。此列返回对行或数据块进行的最后一个事务的“保守上限系统更改数 (SCN)”。这是对上次更改块或行的时间的一个很好的估计。

如果您的表是使用 创建的ROWDEPENDENCIESORA_ROWSCN 则为行返回 scn。NOROWDEPENDENCIES是默认值,在这种情况下,Oracle 在块级别跟踪 SCN。

SCN_TO_TIMESTAMP允许您将 scn 转换为时间戳,但对于旧 scn 它会引发异常。

于 2017-03-24T15:22:29.393 回答
1

大概的更新时间可以用SCN_TO_TIMESTAMP(ORA_ROWSCN)

对于每一行,ORA_ROWSCN 返回该行最近更改的保守上限系统更改数 (SCN)。此伪列可用于大致确定上次更新行的时间。这不是绝对精确的,因为 Oracle 通过为该行所在的块提交的事务来跟踪 SCN。

https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm

于 2017-03-24T15:17:24.277 回答