如果 v$archive_log 预言机中有两个线程#,我应该参考哪个 SCN



我正在使用 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#,但名称不同。

阙 1)在SET Until SCN通信中还原时,我应该引用哪个 SCN

阙2)还有一个用于获取 SCN 的命令,如下所示

select current_scn from v$database;

其输出为

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

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

阙3)我有一个 RAC 设置,它有两个预言机,这两个线程#与此有关吗?

让我们从 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模式 - 在这种情况下,选择 将不返回任何内容......

最新更新