Oracle SCN 说明

Oracle SCN clarification

我想知道为什么我为以下问题得到不同的 SCN 号码

  1. SELECT TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL - 我将其用于表空间的时间点恢复。

  2. SELECT CURRENT_SCN 来自 V$ 数据库。 - 我将其用于数据库恢复 (RMAN)

为什么我得到两个不同的 SCN?

我了解了SCN的基础知识,但还是一头雾水。 谁能阐明查询的确切含义

timestamp_to_scn给出了一个大概的结果。在任何给定的一秒钟内,数据库都可能经过数千个 SCN,因此结果可能不准确。维护一个 table 将时间戳与系统遇到过的每个 SCN 相关联的成本会非常高。在幕后,Oracle 维护着一个 table 每隔几秒存储一次当前 SCN 并将该数据保存几天。在最近的版本中,table 的粒度是每 3 秒 1 个 SCN,尽管这可能会随着时间的推移而改变。

因此,当您调用 timestamp_to_scn 时,您会得到一个在您感兴趣的日期后几秒钟内创建的 SCN,但它永远不会准确,也不会永远有效。对于时间点恢复来说,这通常足够接近——您知道要恢复到 2015 年 5 月 20 日上午 12:05:00,但您并不真正关心是否恢复到早一两秒或之后。如果您确定要将系统还原到(或之前)的特定不良事务,则您不想使用 timestamp_to_scn.

这不是关于 2 个不同的查询,即使您尝试使用任何一个查询,SCN 每次都是不同的,因为它是每次实时生成的 second.Even 运行 您的查询强制数据库创建新的 SCN evry time.Hence 每次你触发查询你都会得到不同的数据库 SCN 号。