rollback与flashback的区别

来源:互联网 发布:h5游戏模板源码 编辑:程序博客网 时间:2024/05/21 11:10

 

1flashback---闪回:实现闪回数据库的基础是闪回日志,配置了闪回数据库后会自动创建闪回日志,只要数据库里数据发生变化,就会将数据被修改前旧址放入闪回日志。闪回主要用于出现逻辑错误时比如误删除表,误删除用户等,快速完成对业务数据的恢复。

flashback具体来说有4种常用的操作,这几种操作虽然都冠以flashback,但是还是有着一些较大的差别

Ø flashback database(闪回数据库)
对应flashback database来说,一般用来处理误删除了user或者一些错误的数据操作。
要使用flash database的特性。我们一定要启动flashback功能,
SQL>alter database flashback on; 如果要关闭使用alter database flashback off;
同时要配置和检查参数db_flashback_retention_target,这个是控制flashback log的保留时间的参数,默认是1440分钟,即24小时。我们也只能恢复到这个时间之内。

使用如下
SQL>shutdown immediate;
SQL>startup open exclusive;
SQL>flashback database to timestamp to_date(’2009-05-13 00:35:50′, ‘yyyy-mm-dd hh24:mi:ss’);
或者基于scn
SQL>flashback database to scn 5342420;
先用read only模式打开数据库,确定恢复的正确性,如果不对,调整时间或者scn,直到确认数据恢复正确。以resetlogs的方式打开数据库,由于flashback logredo log是分开的,所以即使resetlogs,闪回区的内容依然存在,我们一样能够能够闪回到以resetlog打开数据库点之钱的那个状态上,只有当flashback的开关关掉以后,闪回区的内容将自动删除。

Ø flashback drop(闪回删除)

用来恢复被误drop掉的表的恢复,这里有一个我以前错误理解的一个地方,其实这里的flash drop已经脱离了flashback log,在10g的版本里,Oracle在表删除以后,并没有真的把这个表删除,而是对删除表做了重命名,并且用recycle bin来对其进行管理,我们可以通过user_recyclebindba_recyclebin来进行查询.
SQL>select * from user_recyclebin或者是select * from dba_recyclebin;
通过flashback table testtable to before drop.
有时可能一个表被反复的建立和drop,这样在recycle一个origianl name的有多个记录相对,默认将是恢复最后一个,如果要指定恢复一个可以用他们的可以通过指定name的方式

Ø flashback table(闪回表)

有时,不小心,对表进行了错误的update,那么我们就可以通过这个feature来进行恢复,比如,我们update … set … where ..或者delete了表里不应该的数据,我们可以使用flashback table testtable to timestamp to_date(’2009-05-13 00:35:50′, ‘yyyy-mm-dd hh24:mi:ss’)),这里要注意和前两个不同的,这里是利用undo表做恢复的基准,所以有关undo的参数undo_managementundo_retention对这个有影响。具体可以看看这两个参数的说明文档。注,flashback table是只能处理DML操作过后的语句的恢复,如果在期间有DDL语句操作到这个表上,做flashback table时将报错ORA-01466: unable to read data - table definition has changed。在做flashback table时先要alter table t enable row movement

Ø flashback query(闪回查询)

闪回查询好像以前版本有过,在10g里。使用select * from t as of timestamp或者 select * from t as of scn .flash query也是利用unod表空间里的undo数据,所以和3一样,

原来对这几个flashbackfeature的理解是一致的,都是基于flashback log的,通过以上的描述可以看到,只有flashback database是基于flashback log的,所以只有在flashback on的时候才能使用,而其他几个分别和undo以及数据库字典dba_recyclebin/user_recyclebin,所以flashback不考虑flashback_on的状况。

可以通过SQL>select * from v$database;来查询flashback_no的值。

2、rollback---回滚:用回滚段作为恢复依据,执行DML以后,发出rollback命令撤销DML所作变化。oracle利用记录在数据快ITL槽里的undo地址找到对应undo块,取出数据完成对事物所作的变化回滚

3区别:回滚适用于DML,闪回操作一般对应于DDL

原创粉丝点击