前滚和回滚撤销

来源:互联网 发布:淘宝美工修图技巧 编辑:程序博客网 时间:2024/06/09 21:03
重做日志流中始终存在足够的信息,不仅可以重构发生崩溃前进行的所有操作,而且


可以重构回滚崩溃时正在进行的事务所需的撤销信息。
例如:
用户jon启动了一个事务,jon更新某个表的一行,其服务器则将旧值复制至一个撤销


段。在数据库缓冲区缓存中完成这些更新之前,服务器进程将变更写入日志缓冲区。
用户roop也启动一个事务,两个用户都未提交事务,也没有在磁盘上写下任何数据。


如果此时实例崩溃,那么不存在与任一个事务相关的记录。因此,两个事务都不会被
恢复。但这并不是一个问题。因为没有提交,所以不应当恢复这两个事务。
随后,用户jon提交了自己的事务。这个提交操作会触发LGWR进程将日志缓冲区中的
内容刷新到联机重做日志文件,也就是说,此时重做日志文件内存在jon和roop的事


务对表和撤销段的更改以及针对jon的事务的提交记录。只有在LGWR进程结束


后,"commit complete"消息才会被返回给jon的用户进程。但是,数据文件中仍然不


会写入任何数据。如果此时实例失败,那么前滚阶段会重新构造这两个事务,不过处


理完所有重做后仍然不会得到针对roop的更新操作的提交记录,这将通知smon进程回


滚roop所作的变更,同时保留jon所作的变更。
    如果DBWn进程在实例崩溃前将某些数据块写入磁盘,那么将会出现什么情况呢?
jon可能频繁的重新查询与其相关的数据,而roop对数据进行了未提交的更改,并且


不再查看这些数据。因此,DBWn进程将确定在磁盘上有限写入roop所做的变更,然后


再写入jon所作的变更。DBWn进程总是会在磁盘上先写入不活跃的数据块,然后再写


入活跃的数据块。此时,数据文件中存储了roop没提交的事务,但是丢失了jon的已


提交事务。
不过即使此时实例崩溃,前滚仍然可以解决这个问题。重做流中始终存在重新构建已


提交变更所需的足够信息。因为提交操作在DBWn进程完成写入之前不会结束。不过,


因为LGWR进程将所有数据块的所有变更都写至了日志文件,因此日志文件中也将存在


重新构建撤销段所需的足够信息,从而能够回滚roop未提交的事务。
     因此,综上:因LGWR进程总是先于DBWn进程进行写操作,并且在提交的同时进


行实时的写操作。因此在重做流中始终存在足够的信息,从而能够重新构建任何已提


交的未被写入数据文件的变更以及回滚任何已被写入数据文件的未提交变更。
只要没有物理损坏,重做和回滚这种实例恢复机制就可以使Oracle数据库绝对不被损


坏。
(注:执行shutdown abort命令不会损坏数据库..)
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 冬天脚冷怎么办膝盖疼 拉拉裤大了怎么办小妙招 孕37周翻身困难怎么办 晚上睡不好白天犯困怎么办 抑郁症又不想起床了怎么办 儿童憋尿功能太差怎么办 一个月的宝宝睡眠不好怎么办 被商场要求撤场怎么办 上班没法接孩子放学怎么办 幼儿下午放学与上班错开怎么办 宝宝早上醒的早怎么办 晚卜睡不着尿多怎么办 要求正常休息公司不准怎么办 我早起被室友说怎么办? 小孩晚上睡的晚怎么办 初中一年级学不扎实怎么办 一年级学生上课爱说话怎么办 孩子不按时完成作业怎么办 高三理科基础不好怎么办 字写快了就难看怎么办 高一文科280分怎么办 高三了学不进去怎么办 副职兼任法人不够条件怎么办 正职和上级不和副职怎么办 中层正职和上级不和副职怎么办 陆军军官年龄大了怎么办 ps选区选多了怎么办 香港货物被海关扣了怎么办 羽绒服棉填充物不均匀了怎么办 蛀牙到牙神经了怎么办 t恤袖子长了怎么办 t恤袖子短了怎么办 ofo突然要交押金余款怎么办 裙子的腰小了怎么办 白衬衣棉质变软怎么办? 车被自行车刮了怎么办 刮花别人的车门怎么办 破腹产九个月意外怀孕怎么办 破腹产一年半意外怀孕怎么办 37天流产了该怎么办 旧鞋穿着磨脚了怎么办