《Oracle高性能自动化运维》一一3.2 Redo组成结构

    xiaoxiao2021-07-06  212

    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)两部分组成。

    Redo Record HeaderRedo Record Header位于每个Redo Record头部,记录了Redo Record信息概要,如下所示:

    Change VectorRedo Record包含一到多个更改矢量。一个Change Vector记录了一个数据块的一次更改。Change Vector由更改矢量头(Change Vector Header)、更改矢量主体结构(Change Vector Body)两部分组成。

    (1)Change Vector HeaderChange 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节。

    相关资源:七夕情人节表白HTML源码(两款)

    最新回复(0)