oracle体系结构理解

体系结构相关内容每次看遍书,过段时间就忘了。。无奈用自己理解的方式记录之。

1、commit与写盘与否没有关系,也就是说修改数据(insert update delete)后并提交数据,这条被修改的数据不一定会写盘。但是会记redo,写盘只与dbwr有关
dbwr触发脏数据块写盘(写到数据文件)的几个条件:发生检查点、脏缓存达到限指(1/4满)、没有自由的缓存、超时发生、表空间离线、表空间只读、热备份表空间开始动作、表删除或者截断
2、理解redo和undo
insert into 一条语句 commit后没还没写盘(commit后不一定会写盘,写盘只与dbwr有关但redo会有记录) -----掉电 下次启动实例恢复时redo 进行恢复这时不用undo。
insert into 一条语句没commit 但是这时正好dbwr把脏数据(内存中)写盘(redo也会有记录但是commit之前的数据在undo记录)-----掉电 下次启动时redo一看这条语句没有提交但是已经写盘了,这会就用undo了。因为undo记录有前镜像通过undo进行回滚恢复。注意dbwr触发之前要触发lgwr把logbuffer的数据写到redo
lgwr触发redo logbuffer的数据写redo文件的几个条件:commit的时候、redolog buffer达到1/3满、redolog buffer日志大小达到1M、每个三秒、在dbwn进程写之前。

3、脏数据内存中被修改还没有写盘的数据

4、SMON实例恢复:前滚所以重做日志的改变(redo)、打开数据库为了用户能访问、回滚没有提交的事物(undo),还有个作用是释放临时表空间(效果不明显)

5、PMON

清除失败的进程:回滚事物、释放锁、释放其他资源

重启死掉的 dispatchers

动态注册监听

6、检查点进程(CKPT):给DBWn信号、更新数据文件头、更新控制文件

7、buffer和cache:buffer缓冲,举例数据不会直接写盘有个内存区做缓冲再由缓冲区写盘,起缓冲作用减小IO。cache缓存,顾名思义就是把盘里的数据载入内存做缓冲提高查询效率。

原文地址:https://www.cnblogs.com/datalife/p/6490728.html