我正在使用 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 的原因(这很明显,因为每个线程都管理自己的事务)。现在回答大家的问题:
- 这个问题有点奇怪,因为您应该参考所需的 SCN,如果您想从 3 天前开始"时间点"恢复,请从 3 天前引用 SCN。如果要将数据库还原/恢复到上次提交的事务,则根本不需要引用任何 SCN。
- 是的 - "从双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。 - 是的,每个线程管理自己的事务(和隐式 SCN)
通常,仅当需要"时间点"恢复时,才应在还原/恢复方案中引用 SCN。 select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;
并不意味着您是最新的系统范围的 SCN,这意味着 MAX 存档的 SCN(考虑到您当前的在线重做日志中也有很多 SCN)。还要考虑您的数据库是否处于NO_ARCHIVE模式 - 在这种情况下,选择 将不返回任何内容......