本文共 1792 字,大约阅读时间需要 5 分钟。
3.2 Redo组成结构
Oracle Redo由两部分组成:日志头(Redo Header):记录Redo的基本概要信息;日志记录(Redo Record):记录数据库的详细更改。3.2.1 Redo HeaderRedo Header主要记录了Redo基本概要信息,例如数据库名称、控制文件序列号及日志Thread号等信息,如下所示:3.2.2 Redo Record
日志记录(Redo Record)又被称为日志记录条目,记录了原子级的数据库更改操作。Redo Record由日志记录头(Redo Record Header)、更改矢量(Change Vector)两部分组成。(1)Change Vector Header
Change Vector Header结构如下:其中:
CLS为Block类型,与x$bh.class保持一致。例如示例中的CLS为1,表示数据块的操作。OP表示数据库操作码,用于记录数据库的操作类型。OP主要特点:数据库的任何更改操作(OP)都会被记录在Redo中;数据库更改操作(OP)包含Layer Code和Sub Code,中间使用“.”分开。例如OP(11.2)表示单行插入操作;Oracle包含多种类型的更改操作(OP)。Oracle主要的Layer Code如表3-1所示。Layer Code不同使得Sub Code代表的操作也不一样,我们以常见的索引操作(OP:10)和行操作(OP:11)为例,介绍Sub Code的具体含义。
1)索引操作的Sub Code,如表3-2所示。2)行操作Sub Code,如表3-3所示。
通过表3-3可以看到,示例中的OP(11.5)代表行更新操作。
Oracle Change Vector包含了多种类型的OP,记录了数据库的所有(类型)更改。(2)Change Vector BodyChange Vector Body详细描述了数据库块级的更改信息,如下所示:有关Redo结构的详细介绍,请参考7.1.3节。
(3)Change Vector 与 ITLChange Vector与事务槽(ITL)的关系如下:当事务开始时,系统在回滚段头的事务表中分配一个ITL事务槽,在Change Vector中以OP(5.2)表明事务开始;当事务提交后,Change Vector中以OP(5.4)代表事务结束;事务XID(Transaction ID)用于唯一标识事务;UBA(Undo Block Address)记录了事务相关的Undo Record的存储位置;ITL为XID与UBA组合,描述了事务的详细信息,关系如下所示:ITL=XID+UBA其中:XID组成结构:USN(Undo Segment Number):事务所在的Undo Segment ID;TX TABLE SLOT(Undo Segment Header Transaction Table Slot):回滚段头事务表中的事务Slot号;WRAP(Sequence Number):事务序列号。UBA组成结构:Undo Block DBA(Data Block Address):事务相关的Undo Block物理地址;Sequence Number:Undo Block中的序列号;Record Number:Undo Block中的记录索引号(Rec#)。可以通过以下Dump示例查证Change Vector中的事务槽(ITL)。1)Change Vector中的事务:其中:OP(5.2)代表事务开始。
2)Change Vector中的ITL:事务与ITL的详细介绍,请参考4.1.3节。
转载地址:http://fdkda.baihongyu.com/