如果 v$archive_log oracle 中有两个线程#,我应该参考哪个 SCN
Which SCN should i refer if there are two thread# in v$archive_log oracle
我正在使用 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
commnd
中恢复时我应该引用哪个 SCN
问题2)还有一个获取SCN的命令如下
select current_scn from v$database;
它的输出是
CURRENT_SCN
-----------
3914145
这两个命令输出SCN有什么区别?
问题 3) 我有一个 RAC 设置,其中有两个 oracle 机器,这两个线程# 是否与此有关?
让我们从 Oracle 只有一个系统 SCN 这一事实开始(无论您的 RAC 中有多少个节点)。每个事务都有它自己的 SCN,这就是为什么你在不同的线程上有不同的 SCN(这是显而易见的,因为每个线程管理它自己的事务)。现在回复您的问题:
- 这个问题有点奇怪,因为你应该引用你需要的 SCN,如果你想 "point in time" 从 3 天前恢复你引用 3 天前的 SCN。如果您想 restore/recover 您的数据库直到最后提交的事务,那么您根本不必引用任何 SCN。
- 是 - "select dbms_flashback.get_system_change_number from dual" 也许还有其他方法。
和...之间的不同
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)
一般来说,只有当您想要 "point in time" 恢复时,您才应该在 restore/recovery 场景中引用 SCN。 select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;
并不意味着您是最新的、系统范围的 SCN,这意味着 MAX 存档的 SCN(考虑到您当前的联机重做日志中也有很多 SCN)。还要考虑您的数据库是否处于 NO_ARCHIVE 模式 - 在这种情况下 select 将 return 什么都没有...
我正在使用 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
commnd
问题2)还有一个获取SCN的命令如下
select current_scn from v$database;
它的输出是
CURRENT_SCN
-----------
3914145
这两个命令输出SCN有什么区别?
问题 3) 我有一个 RAC 设置,其中有两个 oracle 机器,这两个线程# 是否与此有关?
让我们从 Oracle 只有一个系统 SCN 这一事实开始(无论您的 RAC 中有多少个节点)。每个事务都有它自己的 SCN,这就是为什么你在不同的线程上有不同的 SCN(这是显而易见的,因为每个线程管理它自己的事务)。现在回复您的问题:
- 这个问题有点奇怪,因为你应该引用你需要的 SCN,如果你想 "point in time" 从 3 天前恢复你引用 3 天前的 SCN。如果您想 restore/recover 您的数据库直到最后提交的事务,那么您根本不必引用任何 SCN。
- 是 - "select dbms_flashback.get_system_change_number from dual" 也许还有其他方法。
和...之间的不同
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)
一般来说,只有当您想要 "point in time" 恢复时,您才应该在 restore/recovery 场景中引用 SCN。 select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;
并不意味着您是最新的、系统范围的 SCN,这意味着 MAX 存档的 SCN(考虑到您当前的联机重做日志中也有很多 SCN)。还要考虑您的数据库是否处于 NO_ARCHIVE 模式 - 在这种情况下 select 将 return 什么都没有...