0

我正在使用 RMAN 进行 oracle 备份并保存当前的 scn 号我从下面的命令中获取 scn 号

select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;

它给出如下输出

MAX(NEXT_CHANGE#)
-----------------
          3911392
          3903950

我从oracle文档中发现,如果日志被归档两次,将会有两条归档的日志记录具有相同THREAD#SEQUENCE#、、和FIRST_CHANGE#,但名称不同。

Que 1)在SET Until SCNcommnd中恢复时我应该参考哪个SCN

Que 2)还有一个获取SCN的命令如下

select current_scn from v$database;

它的输出是

CURRENT_SCN
-----------
    3914145

这两个命令输出 SCN 有什么区别?

Que 3) 我有一个 RAC 设置,它有两个 oracle 机器,这两个线程# 与此有关吗?

4

1 回答 1

1

让我们从 Oracle 只有一个系统 SCN 的事实开始(不管您的 RAC 中有多少节点)。每个事务都有自己的 SCN,这就是为什么在不同的线程上有不同的 SCN(这很明显,因为每个线程都管理自己的事务)。现回复您的问题:

  1. 这个问题有点奇怪,因为您应该参考您需要的 SCN,如果您想要“时间点”从 3 天前恢复,您可以参考 3 天前的 SCN。如果您想恢复/恢复您的数据库直到最后提交的事务,那么您根本不必参考任何 SCN。
  2. 是的-“从双重选择dbms_flashback.get_system_change_number”并且可能存在其他一些方法。select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;和之间的区别在于 select current_scn from v$database;,在第一种情况下,您会得到 max(SCN),它被归档(进入归档日志),第二种情况是当前的 DB SCN,它总是大于第一个 SELECT。
  3. 是的,每个线程管理自己的事务(和隐式 SCN)

通常,仅当您想要“时间点”恢复时,您才应该在恢复/恢复方案中参考 SCN。select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;并不意味着您是最新的、系统范围的 SCN,这意味着 MAX 存档的 SCN(考虑到您当前的在线重做日志中也有很多 SCN)。还要考虑您的数据库是否处于 NO_ARCHIVE 模式 - 在这种情况下,选择将不会返回任何内容......

于 2016-02-23T13:24:50.407 回答