scn 如何在 Oracle 中使用 sys.smon_scn_time 映射到时间戳?

axr*_*ble 6 sql oracle timestamp

在 Oracle DB 中,您可以使用以下命令找出上次更新表的时间

SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) from myTable; 
Run Code Online (Sandbox Code Playgroud)

(看这里)

ora_rowscn 列中的值以系统更改号 (SCN)格式存储。

Oracle 使用 sys.smon_scn_time 表知道什么时间戳对应于特定的 scn: 在此处输入图片说明

如您所见,此表中有 scn、time_dp 和其他一些列。记录每 5 分钟(大约)添加一次 sys.smon_scn_time。所以scn和date之间没有单值关系。但是 Oracle 知道每个 scn 的时间戳。

那么,sys.smon_scn_time 表是如何工作的呢?

Oracle 如何将 scn 映射到时间戳以及这种映射的准确性如何?

Phi*_*erg 2

tim_scn_map列是时间戳到 SCN 映射的数组。它的大小是RAW(1200)。每个条目有 12 个字节。这使得每行有 100 个条目,并且这导致大约 3 秒的准确度,因为 SMON 进程每 300 秒创建一行。另请参阅scn_to_timestamp函数的文档。

列中单个映射的结构tim_scn_map为:

  • time_mp 为 4 个字节
  • scn_bas 4 个字节
  • scn_wrp 2 个字节
  • 2 个字节表示“未知”