2

我想知道为什么我会为以下查询获得不同的 SCN 号码

  1. SELECT TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL - 我将它用于 POINT IN TIME RECOVER FOR TABLESPACE 。

  2. 从 V$DATABASE 中选择 CURRENT_SCN。- 我将它用于数据库恢复(RMAN)

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

我知道 SCN 的基本知识,但我仍然很困惑。任何人都可以澄清查询的确切含义是什么

4

2 回答 2

1

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

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

于 2015-05-21T02:50:23.130 回答
0

它不是关于 2 个不同的查询,即使您尝试使用任何一个查询,SCN 每次都是不同的,因为它每实时生成一次。即使运行您的查询也会强制数据库每次创建新的 SCN。因此每个当您触发查询时,您将获得不同的 SCN 数据库编号。

于 2015-05-21T12:42:41.440 回答