导航菜单
欢迎访问本站!
首页 » 排球 » 正文

redo-是先写到内存还是磁盘

redo先写到内存中的redobuffer,再写到磁盘,LGWR的触发条件达到,再把这个内存写磁盘停电还没有写入磁盘的数据,在oracle起来的时候会进行继续回滚操作的

oracle的归档模式分为archivelog/noarchivelog如果是noarchivelog非归档模式,那么oracle会循环使用日志组,是以覆盖的方式向日志组里写日志的。如果是archivelog归档模式,当正在使用的redo日志组写满后,会关闭当前日志文件,arch进程把redo日志中的数据移到归档日志中。归档日志如果长时间不清理,可能会导致磁盘空间不足。可以写个操作系统脚本定时删除归档日志。也就是说,redo日志中的内容,要么覆盖,要么归档。不会出现满了不在记录的情况。

因为undo和redo也是功能复合键,不仅是在CAD中,在其他软件中也有同样的功能,因为这两个键的功能设置,甚至有人都申请了专利,所以这个解释起来比较复杂

会事务处理过程update或Insert操作:1.计算更新后tuple到原tuple的delta信息,把这个delta复制到回滚段,作为undo;2.写redo日志,记录对回滚段的更改,回滚段也是由缓冲区管理机构管理,也是相当于对页面(page)的更改;3.把缓冲区中的对应tuple更新成新值,把新值的rollbackpointer写入undo(更改回滚段);4.写redo日志,记入对页(回滚段)的更改;5.将被更改的页面的状态改成dirty,表示要被刷盘事务提交操作:日志刷盘,当前事务的对应的最后的LSN(LogSequenceNumber)之前的redo日志都被写入持久化存储。崩溃恢复过程1.启动开始时,检测是数据库在上次退出时是否发生崩溃;2.定位到最近的一个检查点(checkpoint);3.定位在这个检查点时刷磁盘的数据页,检查校验checksum。如果不正确,说明这个页在上次写入是不完整的,从双写缓冲(doublewritebuffer)里把正确的页读出来,更新到内存缓冲区中的页;4.顺序地(从上个检查点开始到最后一个LSN)分析redo日志,标识出未提交事务;5.顺序执行redo,这些redo日志不仅包含对数据段的更改(写tuple),也包括对回滚段的更改(写undolog);6.回滚所有未提交的事务。

评论(0)