背景: 我有一个oracle表,表创建脚本时没有任何特定列作为时间戳。该表可以有数百万行。
示例:
Employee {Emp_No, Name, Manager,Division, Role, Region}
我的任务:如果通过该表上的作业进行任何更新,我是否可以知道所有行都已更新。 oracle是否有我可以利用的每一行的内部时间戳。我可以在查询中使用它来获取所有记录。
原因:我需要向我的团队展示那些模糊的记录没有被我们所怀疑的工作更新。
答案 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