在特定时间后更新所有表格的行

时间:2017-03-24 15:10:48

标签: sql oracle sql-timestamp

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

示例:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

可以使用SCN_TO_TIMESTAMP(ORA_ROWSCN)

检索近似更新时间
  

对于每一行,ORA_ROWSCN返回保守的上限系统   更改行的最新更改的编号(SCN)。这个   伪列对于确定行的大致时间非常有用   最近更新时间。它并不是绝对精确的,因为Oracle跟踪SCN   通过为行所在的块提交的事务。

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