我正在使用RMAN进行oracle备份并保存当前scn编号我从命令下面获取scn编号
no more job
array (size=2)
0 =>
array (size=4)
'worker1' =>
array (size=2)
0 => string 'j1' (length=2)
1 => string 'j2' (length=2)
'worker2' =>
array (size=2)
0 => string 'j3' (length=2)
1 => string 'j4' (length=2)
'worker3' =>
array (size=2)
0 => string 'j5' (length=2)
1 => string 'j6' (length=2)
'worker4' =>
array (size=2)
0 => string 'j7' (length=2)
1 => string 'j8' (length=2)
1 =>
array (size=1)
'worker1' =>
array (size=2)
0 => string 'j9' (length=2)
1 => string 'j10' (length=3)
它给出了如下的输出
select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;
我从oracle文档中发现,如果日志存档两次,则会有两个归档日志记录具有相同的MAX(NEXT_CHANGE#)
-----------------
3911392
3903950
,THREAD#
和SEQUENCE#
,但具有不同的名。
Que 1)在FIRST_CHANGE#
commnd
Que 2)还有一个命令用于获取SCN,如下所示
SET Until SCN
其输出
select current_scn from v$database;
这两个命令之间的区别是什么输出SCN?
Que 3)我有一个RAC设置,它有两个oracle机器,这两个线程#是否与此有关?
答案 0 :(得分:1)
让我们先从Oracle只有一个系统SCN这一事实开始(你的RAC中有多少个节点并不重要)。每个事务都有它自己的SCN,这就是为什么你在不同的线程上有不同的SCN(这很明显,因为每个线程管理它自己的事务)。现在回答你的问题:
select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;
和select current_scn from v$database;
是第一种情况,你得到的最大值(SCN)被存档(存档日志),第二种是当前数据库SCN,它总是大于第一次选择。通常,只有在需要“时间点”恢复时,才应在恢复/恢复方案中引用SCN。 select max(next_change#) from v$archived_log where archived = 'YES' group by thread#;
并不意味着您是最新的系统级SCN,这意味着MAX归档SCN(考虑到您当前的在线重做日志中也有很多SCN)。还要考虑一下你的数据库是否处于NO_ARCHIVE模式 - 在这种情况下,select将不返回任何内容......