redo,undo的问题疑问

问题归档 2019-05-08
20
0 0
摘要:1:超大事物commit前,是否一定不写入redo日志。2:insert,update,delete哪种操作在rollback时用时最少,为什么。

问题描述

老师好,因为听到过这么一个故事,某dba在检修升级快结束时发现一个超大事物操作错了,需要rollback,如果此时rollback时间肯定来不及,于是该dba直接shutdown abort了。于此产生一些疑问


1:超大事物commit前,是否一定不写入redo日志。

2:insert,update,delete哪种操作在rollback时用时最少,为什么。

3:insert,update,delete,在rollback一半宕机,恢复数据库时,数据库是什么状态,数据库在恢复时具体做了什么操作。

4.故事中的操作在极端情况下是否可行。


个人理解

1.commit前感觉应该不写入redo。

2.insert用时最少,update,delete用时一样,因为insert不需undo回写。

3.应该恢复到dml操作之前状态(事物一致性),如果commit前不写redo,那数据库对dml操作可以无视。


谢谢老师

专家解答

1、commit前,也是有可能写入redo的,这个可以参考重做日志缓冲区中的内容写到redo的几个条件。

2、insert,update和delete的Rollback时间,时间和事务的大小有关,相比起来,insert产生的undo确实是要少一些的,因为update和delete都是保存数据修改前的映象的,所以生成的undo会多一些,rollback的时间上也会相应的长一点。

3、Rollback一半宕机,open的时候数据库会继续回滚。

4、故事中的这个场景,虽然是可行的,但是在数据库重新启动的时候数据库就会进行一系列的前滚以及回滚操作。但是abort还是不建议用,这样可能会导致数据库无法启动等问题。

「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
Oracle
订阅
欢迎订阅Oracle频道,订阅之后可以获取最新资讯和更新通知。
墨值排行
今日本周综合
近期活动
全部
相关课程
全部