理解redo(2)redo内容:change vector和redo entries

php中文网
发布: 2016-06-07 17:18:35
原创
1171人浏览过

每次修改cache buffer中的这些block时,需要先在PGA中生成对应的change vector,然后由server process从PGA copy到SGA REDO LOG

redo log file由redo records(又名redo entries)组成。一条redo record由一组change vectors构成。

redo record:是change vector的集合。每个redo record是由多个change vector组成的。Oracle在恢复过程中,会保证一个transaction要么被全部恢复,要么全部不恢复。实际上就是通过恢复redo record中的全部change vector来做到的,只要有一个change vector恢复失败,这个redo record的所有change vector都将失败。所以,,redo record是构成数据库变更的最小恢复单位。

change vector:表示数据库内某一个数据块所做的一次变更。一个CV只针对一个数据块的变更,一个CV只包含一个变化。

这个数据块可以是:

                数据块data block
                回滚块undo block
                数据段头块data segment header block
                回滚段头块undo header block   

   

    Change vector的结构,包含一个头信息和身体信息。
        change vector header主要包括:
                 change #n:同一个redo record中的change vector的编号
                 TYP:变更类型
                 CLS:本次修改对应的block的类别,等于x$bh.class
                 AFN:绝对文件号
                 DBA:回滚块地址
                 SCN:修改时的SCN
                 SEQ:同一个SCN的不同修改以seq编号,注意:在oracle中,序列号的本质是,不同序列号都是对应不同的内容
                 OP:操作码,由两部分组成,layer code. sub code

DALL·E 2
DALL·E 2

OpenAI基于GPT-3模型开发的AI绘图生成工具,可以根据自然语言的描述创建逼真的图像和艺术。

DALL·E 2 44
查看详情 DALL·E 2

       change vector body主要包括:
                1)变更数据块的版本号:在建立change vector时oracle会从data block copy其版本号,在做前滚的时候,通过REDO LOG文件里记录的change vector,根据SCN的比对,提交到相关的数据文件上,从而使数据文件的状态向前滚动,被恢复的数据块版本号加一(临时段的数据块不会生成change vector)。注意,重新运用redo来recover,这是个二元运算的过程,并不会产生sql!
               2)DBA:回滚块地址
               3)事务操作代码
               4)更新后的数据 

    每次修改cache buffer中的这些block时,需要先在PGA中生成对应的change vector,然后由server process从PGA copy到SGA REDO LOG BUFFER。user process修改数据时产生redo entries,此时redo存于pga中,将PGA中redo copy到 redo log buffer 需要redo copy latch,LGWR只有等待进程COPY 完成才能把目标log buffer block写入redo log file。redo entries在内存中是占用连续的顺序的空间,他是按顺序写入到redo log file,其块大小不同于数据块大小是由db_block_size参数设置的,而是在Oracle源代码中固定的,和os相关,大部分os中都是512字节。只有当一个事务所包含的全部redo records被安全着陆到磁盘,user process才能得到commit completed的通告。redo log buffer里面的redo records,或者全部被写、或者全部不写。

   

    由于user process 向redo log buffer写数据,所以需要latch保护:
    redo copy latch:写redo 到redo log buffer
    redo allocation latch:控制log buffer分配
    在将PGA中redo copy到 log buffer时,获取redo copy latch,获取后接着获取redo allocation latch 分配redo log buffer空间,分配后释放redo allocation latch,然后server process 将PGA中redo信息 COPY 到redo log buffer,OK 后redo copy latch释放。

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号