redo结构

来源:互联网 发布:sai绘画软件下载 编辑:程序博客网 时间:2024/05/21 04:21

Block Changes

数据块从当前物理的一致状态变换到下一个物理一致状态,这个原子性操作成为Block Change。
Block Change包括数据写入,指针变化和计数器更新。
一致状态意味着指针和计数器共同正确描述了数据块的内容。

Block Version

当数据块发生变化时,会把当前redo产生的scn写入块头,由于一个scn中可能会产生多个change,还会在块头存入一个序列号。当在相同scn中有多个change时,sequence number就会增加。
SWQ=0xFF作为soft corruption的标记。

Block Recovery

当一个数据块被pin住时server进程挂了,PMON进程会识别到数据块上的Lock不再被任何人持有。此时内存里的数据块副本处于一个部分改变的未知状态。PMON进程会把数据块从磁盘重新读入内存,然后扫描online redo和log buffer寻找该块被pin住之前产生的redo并且apply。

Change/Redo Vector

改变向量或者叫redo向量指的是block change的列表。包括这么几个部分:
* 块的前镜像版本号
* 操作代码
* 发生变化的值

变化向量

redo向量可能会包含多个change,这些change都是发生在一个数据块上。向量由前镜像唯一标记,只有对于相应的数据块版本,redo向量才能应用。
数据库的数据块,索引块,undo块,段头块等等都是如此。
数据块只能按照redo向量前滚。当一个表数据块上应用了一些undo数据,这个操作是一个新的change向量,会产生新的scn/seq号。唯一回退块版本的方法是使用数据块备份restore。

Redo Records

redo记录的作用:
* 描述数据库中发生的物理一致的原子性的变化
* 由1或多个改变向量组成
* oz做恢复时会保证一条redo记录中的改变全部发生或全部不发生
* 由scn号排序
* 由RBA唯一标记

redo记录按照scn号排序:
* 当前发生变化产生的scn叫做change scn
* commit产生的scn叫做commit scn。

一条redo record由RBA唯一标记。意指redo记录的物理地址(文件号和偏移量)。

Redo Log Buffer

log buffer的作用和特点:
* redo记录的临时存放区域
* 由lgwr进程将其刷到位于磁盘的redo log file
* 在sga的buffer中分配
* 只有redo记录在redo buffer中构造好之后,数据块的改变才能应用。
* log buffer以循环使用的方式。当Lgwr进程将某块区域刷出内存时,server进程可以向log buffer中的其他区域写于新的条目
* 刷出redo记录的空间即被释放。

Redo Logs

redo log的头部包含:
* low scn:第一条redo记录
* next scn:最后一条redo记录,是下一个log的low scn。当前redo log的next scn为无穷大。
redo log由thread号,sequence号,scn范围唯一确认。这些都记录在文件头里。

Redo Groups and Members

db要求最少两组redo ,每组至少包含一个文件。redo log的组员关系记录在control file里,并不记录在redo log中。

Redo Stream

在单机数据库中,stream和thread是同义词。在rac环境中,多个thread并行运行,构成一个流。

Resetlogs

open resetlogs操作创建一个新的数据库化身。在7.3之前,恢复数据库是不能穿越resetlogs点的。在某些特性条件下,恢复可以穿越resetlogs点。
穿越resetlogs恢复的方法见Doc ID 237232.1。

Checkpoints

checkpoint是一个时间点(scn),所有在此点或者在此点之前产生的脏块都要刷到磁盘上。
checkpoint发生在以下几个场景:
* DB/Global checkpoint
拥有最小checkpoint scn的thread checkpoint称为db/global checkpoint。它记录在控制文件和所有Online的数据文件头。
* Thread/Local Checkpoint
log switch会触发thread checkpoint。在RAC环境中,thread checkpoint只会与对应的实例有关。它记录在控制文件和所有Online的数据文件头。
* Data File checkpoint
db ck,热备份或者将表空间offline会将db file ck初始化。它记录在控制文件和受作用的数据文件头。
* Incremental checkpoint
增量ck是一直发生的,目的是减少数据库恢复的时间。它不会更新数据文件头,只在控制文件中更新一个条目。
* Mini-Checkpoint(DDL)
一些ddl操作,比如drop table,会触发mini ck。它只会影响ddl语句中影响到的对象的数据块。

full checkpoint

触发full ck的两个条件:
* log file switch
* 满足初始化参数指定的条件:log_checkpoint_to_alert,log_checkpoint_timeout,log_checkpoint_interval
触发full ck后,DBWn会把buffer中一定数量的Buffer写入磁盘。

Incremental checkpoint

在7中,Oracle使用LRUW链来串起要写入的数据块。从8开始,被checkpoint queue代替,它将数据块按照”oldest first”来排列。ck queue解决了两个问题:首先启用了incremental checkpoint来避免cache中充满大量的脏块,同时也避免了full ck时的IO高峰。其次,可以加速db的crash recovery。
链的长度,是指当实例crash后需要恢复的Buffer的数量。这个可以在v$instance_recovery查到。
8中触发由DB_BLOCK_MAX_DIRTY_TARGET参数规定。8i中,由FAST_START_IO_TARGET参数,9i中由FAST_START_MTTR_TARGET参数,它制定了希望限制的oracle做实例恢复的时间,oracle会监控文件的打开和IO,限制脏块的数量。

0 0
原创粉丝点击