概述
控制文件里面有每个数据文件的检查点SCN(Checkpoint
SCN)和终止SCN(StopSCN),检查点SCN同样也会记录在数据文件头里面(即亦是所谓的启动SCN)。在控制文件里面还会记录每个重做线程的检查点的SCN(即是系统检查点SCN)。Oracle决定是否执行数据恢复动作则需要比较这些SCN值是否一至。
例如,这里将从一个正常关闭的数据库冷备份的控制文件和数据文件头里面提取相关的内容,现我只显示第一个数据文件的其中一部份,因为在数据库正常关闭之前这里的线程已经发生了检查点动作,这个线程检查点SCN和所有的数据文件检查点SCN和数据文件终止SCN都一样,同样,也是记录了线程和数据文件关闭后的状态。相关的内容将会在下面以高亮显示。
THREAD #1 - status:0x6 thread links forward:0 back:0
#logs:2 first:1 last:2 current:2 last used seq#:0x3f8
enabled at scn: 0x0000.00000001 07/28/2000 14:00:08
disabled at scn: 0x0000.00000000 01/01/1988 00:00:00
opened at 02/07/2001 08:44:40 by instance o816
Checkpointed at scn:0x0000.000efde3 02/09/2001 15:40:34
thread:1 rba:(0x3f8.e73.10)
DATA FILE #1:
(name #4) C:ORA816ORADATAO816SYSTEM01.DBF
creation size=29696 block size=2048 status=0xe head=4 tail=4 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.0005b05e 11/19/2000 11:11:37
Checkpoint cnt:1196 scn: 0x0000.000efde3 02/09/2001 15:40:34
Stop scn: 0x0000.000efde3 02/09/2001 15:40:34
FILE HEADER:
File Number=1, Blksiz=2048, File Type=3 DATA
Tablespace #0 - SYSTEMrel_fn:1
Creationatscn: 0x0000.00000004 07/28/2000 14:00:32
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
reset logs count:0x1816bc64 scn: 0x0000.00000001 recovered at 02/07/2001 08:44:17
status:0x0 root dba:0x00400219 chkpt cnt: 1196 ctl cnt:1195
begin-hot-backup file size: 0
Checkpointed at scn:0x0000.000efde3 02/09/2001 15:40:34
thread:1 rba:(0x3f8.e73.10)
这里将显示一个等同于数据库崩溃之后的相关信息,记录着数据库打开正常运行时线程和数据文件的状态,所有的检查点的SCN值都一样,而终止SCN的值为空,即是无穷大。由于终止SCN处于无穷大,因此数据库在进行恢复时将从检查点的SCN开始一直恢复完所有的重做日志。如果一个数据文件在数据库崩溃前已正常离线,这样其终止SCN的值将会低于这个重做线程的结束值,并
且可以通过这个终止SCN进行一个完全的恢复过程。但如果仅仅只有这个数据文件可以执行恢复,Oracle是不能够进行整个数库恢复的。
THREAD #1 - status:0x7 thread links forward:0 back:0
#logs:2 first:1 last:2 current:2 last used seq#:0x3f8
enabled at scn: 0x0000.00000001 07/28/2000 14:00:08
disabled at scn: 0x0000.00000000 01/01/1988 00:00:00
opened at 02/07/2001 08:44:40 by instance o816
Checkpointed at scn:0x0000.000efb56 02/07/2001 08:44:40
DATA FILE #1:
(name #4) C:ORA816ORADATAO816SYSTEM01.DBF
creation size=29696 block size=2048 status=0xe head=4 tail=4 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.0005b05e 11/19/2000 11:11:37
Checkpoint cnt:1195 scn: 0x0000.000efb56 02/07/2001 08:44:40
Stop scn: 0xffff.ffffffff 02/07/2001 06:09:59
FILE HEADER:
File Number=1, Blksiz=2048, File Type=3 DATA
Tablespace #0 - SYSTEMrel_fn:1
Creationatscn: 0x0000.00000004 07/28/2000 14:00:32
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
reset logs count:0x1816bc64 scn: 0x0000.00000001 recovered at 02/07/2001 08:44:17
status:0x4 root dba:0x00400219 chkpt cnt: 1195 ctl cnt:1194
begin-hot-backup file size: 0
Checkpointed at scn:0x0000.000efb56 02/07/2001 08:44:40
thread:1 rba:(0x3f8.2.10)
下面显示一份热备份的内容,数据文件的状态显示这是一个热备份模式,数据文件的检查点SCN值是低于线程检查点的SCN值的。因而这个备份的恢复将从数据文件的检查点SCN(这个SCN是在数据文件开始备份时产生的)开始。
THREAD #1 - status:0x7 thread links forward:0 back:0
#logs:2 first:1 last:2 current:2 last used seq#:0x3f8
enabled at scn: 0x0000.00000001 07/28/2000 14:00:08
disabled at scn: 0x0000.00000000 01/01/1988 00:00:00
opened at 02/09/2001 16:39:39 by instance o816
Checkpointed at scn:0x0000.000efe32 02/09/2001 16:40:45
thread:1 rba:(0x3f8.f35.10)
DATA FILE #1:
(name #4) C:ORA816ORADATAO816SYSTEM01.DBF
creation size=29696 block size=2048 status=0xe head=4 tail=4 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.0005b05e 11/19/2000 11:11:37
Checkpoint cnt:1205 scn: 0x0000.000efe2a 02/09/2001 16:39:52
Stop scn: 0xffff.ffffffff 02/09/2001 16:39:13
FILE HEADER:
File Number=1, Blksiz=2048, File Type=3 DATA
Tablespace #0 - SYSTEMrel_fn:1
Creationatscn: 0x0000.00000004 07/28/2000 14:00:32
Backup taken at scn: 0x0000.000efe2a 02/09/2001 16:39:52 thread:1
reset logs count:0x1816bc64 scn: 0x0000.00000001 recovered at 02/07/2001 08:44:17
status:0x1 root dba:0x00400219 chkpt cnt: 1205 ctl cnt:1204
begin-hot-backup file size: 29696
Checkpointed at scn:0x0000.000efe2a 02/09/2001 16:39:52
thread:1 rba:(0x3f8.eac.10)
当Oracle检测到里面有任何一个SCN值不同时就会执行数据恢复,问题是是否需要使用归档日志文件进行恢复将由Oracle按照控制文件里面的范围段在日志文件里查找作为恢复开始的SCN。这样的查找将会历遍每个日志文件的“LowSCN“和”Next SCN”。这里将为在线日志文件,当前日志文件和两个归档日志文件分别地从控制文件里面提取相关信息,其中记录的第一个归档日志文件实际上是一个非活动在线日志文件的复制,所以在恢复的开始将会使用这个在线日志文件,换句话讲即是在SCN0x0000.000ea9c4后面开始恢复,执行任何的恢复都会从一个比较前面的SCN值开始并且可能会使用到几个归档日志文件。
LOG FILE #1:
(name #1) C:ORA816ORADATAO816REDO01.LOG
Thread 1 redo log links: forward: 2 backward: 0
siz: 0x4e20 seq: 0x000003f7 hws: 0x7 bsz: 512 nab: 0x81a flg: 0x1 dup: 1
Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.000ea988
Low scn: 0x0000.000ea9c4 02/06/2001 13:40:19
Next scn: 0x0000.000efb55 02/07/2001 08:44:40
LOG FILE #2:
(name #2) C:ORA816ORADATAO816REDO02.LOG
Thread 1 redo log links: forward: 0 backward: 1
siz: 0x4e20 seq: 0x000003f8 hws: 0xb bsz: 512 nab: 0xffffffff flg: 0x8 dup: 1
Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.000ea9c4
Low scn: 0x0000.000efb55 02/07/2001 08:44:40
Next scn: 0xffff.ffffffff 02/06/2001 13:40:19
RECID #1015 Recno 453 Record timestamp02/07/01 08:44:40 Thread=1 Seq#=1015 Link-Recid=1014
Low scn: 0x0000.000ea9c4 02/06/01 13:40:19 Next scn: 0x0000.000efb55
RECID #1014 Recno 452 Record timestamp02/06/01 13:40:20 Thread=1 Seq#=1014 Link-Recid=1013
Low scn: 0x0000.000ea988 02/02/01 21:04:49 Next scn: 0x0000.000ea9c4
如果你想看到更多、更详细的相关信息,可以使用以下命令行去将控制文件和文件头的相关信息载入到你的进程跟踪文件里面。
oradebug setmypid
oradebug dump
controlf10
oradebug dump
file_hdrs10
如果你还想读更多关于这方面的概念,RamaVelpuri写的“Oracle8i
Backup & Recovery”会有一个更系统描述。
问题:
当执行一个数据文件的恢复时,Oracle在决定使用哪一个归档文件来执行恢复之前将会用控制文件头的哪些不同的值与这个数据文件头的值进行比较呢?我的理解是“StopSCN”会是其中一个,但还有哪些值也会参与呢?
最后
以上就是丰富大叔为你收集整理的oracle scn与数据恢复,[转]oracle如何根据SCN来进行数据恢复的呢?的全部内容,希望文章能够帮你解决oracle scn与数据恢复,[转]oracle如何根据SCN来进行数据恢复的呢?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复