Oracle恢复内部原理(基础数据结构)
Oracle基础数据结构
2.1 控制文件
控制文件包含了数据库中所有其他文件的状态信息。
控制文件包含了如下几类数据:
A. 数据库信息记录(一条)
B. 数据文件记录(每个数据文件一条)
C. 线程记录(每个线程一条。注:每个实例一个线程)
D. 日志文件记录(每个日志文件一条)
E. 文件名记录(每个数据文件或者日志文件成员一条)
F. 日志历史记录(每个已经完成的日志文件一条)
控制文件的被后面文档引用到的字段如下,后面是引用该字段的章节:
2.1.1 数据库信息记录(控制文件)
所含字段:
A. resetlogs timestamp: 8.2
B. resetlogs scn: 8.2
C. enabled thread bitvec: 8.3
D. force archiving scn: 3.8
E. database checkpoint thread(thread record index) : 2.13, 3.10
2.1.3 数据文件记录(控制文件)
A. thread checkpoint structure: 2.12, 3.4, 8.3
B. thread-open flag: 3.9, 3.11, 8.3
C. current log (logfile record index)
D. head and tail (logfile record indices) of list of logfiles in thread: 2.8
2.1.4 日志文件记录(控制文件)
A. log sequence number: 2.7
B. thread number: 8.4
C. next and previous (logfile record indices) of list of logfiles in thread: 2.8
D. count of files in group: 2.8
E. low SCN: 2.7
F. next SCN: 2.7
G. head and tail (filename record indices) of list of filenames in group: 2.8
H. "being cleared" flag: 10.3
I. "archiving not needed" flag: 10.3
2.1.5 文件名记录(控制文件)
A. filename
B. filetype
C. next and previous (filename record indices) of list of filenames in group: 2.8
2.1.6 日志文件历史记录(控制文件)
A. thread number: 2.11
B. log sequence number: 2.11
C. low SCN: 2.11
D. low SCN timestamp: 2.11
E. next SCN: 2.11
2.2 数据文件头
数据文件头部分的被后面文档引用的字段如下,后面跟的是引用该字段的章节:
A. datafile checkpoint structure: 2.14
B. backup checkpoint structure: 4.1
C. checkpoint counter: 2.16, 3.4, 5.3, 6.2
D. esetlogs timestamp: 8.2
E. resetlogs SCN: 8.2
F. creation SCN: 8.1
G. online-fuzzy bit: 3.5, 6.7.1, 8.1
H. hotbackup-fuzzy bit: 4.1, 4.4, 6.7.1, 8.1
I. media-recovery-fuzzy bit: 6.7.1, 8.1
2.3 日志文件头
日志文件头部分的被后面文档引用的字段如下,后面跟的是引用该字段的章节:
A. thread number: 2.7
B. sequence number: 2.7
C. low SCN: 2.7
D. next SCN: 2.7
E. end-of-thread flag: 6.10
F. resetlogs timestamp: 8.2
G. resetlogs SCN: 8.2
2.4 改变向量(Change Vector)
改变向量表示对数据块的一次变更。改变向量头部记录了发生变更的数据块的DBA地址,该块的版本号,序列值和操作代码。头部以后的内容跟具体的变更操作有关。数据块版本号和序列值是在创建改变向量时从数据块的头部复制过来的。当块被更新后,版本号值就比原来的值大一点,而序列号则被设为1。此后数据块每变更一次,序列值就增长1.
2.5 重做记录
一个重做记录是由一组改变向量组成,代表一个数据库变更。如一个事务的重做记录由三部分组成。首先是事务表(回滚段段首)的改变向量,其次是回滚段块的改变向量,最后是数据块的改变向量。一个事务可以产生多个重做记录组成。一个重做记录是数据库恢复的最小单位,一个重做记录由多个改变向量组成的机制允许多个数据块被修改并且这些修改要么都发生要么就都没发生,即使发生突然的失败。这种原子性是由数据库缓冲层的一个基础Job来保证的。Oracle恢复保证重做记录是不可分割的,即使在数据库失败的时候。