1. commit和rollback

1) commit之前

a) 困难的工作已经完成,数据已经修改,99%的工作已经完成。
b) 已经在SGA中生成了undo块
c) 已经在SGA中生成了已修改数据块。
d) 已经在SGA中生成了对于前两项的缓存redo。
e) 已经得到了所需的全部锁。

2) commit时

a) 为事务生成一个SCN号。
b) LGWR将所有余下的缓存重做日志条目写到磁盘,并把SCN记录到在线重做日志文件中。这一步就是真正的COMMIT。
c) V$LOCK中记录这我们的会话持有的锁,这些所都将被释放,而排队等待这些锁的每一个人都会被唤醒,可以继续完成他们的工作。
d) 总结:写日志、做标记、释放锁。

3) rollback

a) rollback要做的事就是commit之前的推倒重来,非常耗时。
b) 撤销已做的所有修改。其完成方式如下:从undo段读回数据,然后实际上逆向执行前面所做的操作,并将undo条目标记为已用。如果先前插入了一行,ROLLBACK会将其删除。如果更新了一行,回滚就会取消更新。如果删除了一行,回滚将把它再次插入。
c) 会话持有的所有锁都将释放,如果有人在排队等待我们持有的锁,就会被唤醒。

2. flashback

1) 概述

闪回技术包括以下几项:
a) 闪回数据库(flashback database):基于闪回日志
b) 闪回丢弃(flashback drop):基于undo
c) 闪回版本查询(flashback version query):基于undo
d) 闪回事务查询(flashback transaction query):基于undo
e) 闪回表(flashback table):基于undo

2) 常用闪回语句

a) 闪回被drop掉的表
flashback table table_name to before drop;
b) 闪回被更改的数据
1.alter table table_name enable row movement;
2.flashback table table_name to timestamp to_timestamp(‘2013/12/03 18:50:00’,’yyyy/mm/dd hh24:mi:ss’);
c) 闪回数据版本查询
select * from table_name as of timestamp to_timestamp(‘2015-10-10 12:00:00’,’yyyy-mm-dd hh24:mi:ss’) where id = ‘01’;
——查询table_name表中2015-10-10 12:00:00之前的数据。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐