oracle笔记整理3——commit,rollback,flashback

来源:互联网 发布:mui css js哪边下载 编辑:程序博客网 时间:2024/04/30 07:29

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之前的数据。

0 0
原创粉丝点击