说明:目前了解到oracle的flashback包含flashback database、flashback tablespace、flashback table,当然也还可以闪回其他对象,只是目前没有用到
1.闪回表flashback table
作用:恢复表数据
※:flashback table是基于回收站recyclebin的,如果情况了回收站(PURGE RECYCLEBIN或PURGE TABLE xxx),便无法恢复,恢复的前提是回收站仍然存在该表
使用语句:
FLASHBACK TABLE xxxx TO BEFORE DROP;
#闪回表
select * from xxxx as of TIMESTAMP
TO_TIMESTAMP('xxxx-xx-dd xx:xx:xx', 'YYYY-MM-DD HH:MI:SS')
#闪回查询
复制
2.闪回表空间flashback tablespace
作用:恢复表空间,也影响是否闪回数据库失败
※:ORACLE新建表空间时默认开启闪回表空间,它的开启与否会影响flashback log是否会记录此tablespace的变更历史,而拥有从历史上某段时间到当前时间的连续flashback log 和redo log是flashback database的前提。
如果需要打开或关闭,需要在mount状态下执行
alter tablespace xxx flashback on;
#或者
alter tablespace xxx flashback off;
复制
3.闪回数据库flashback database
作用:能够恢复整个数据库(flashback log和redo log不全会有风险)
※:并不能闪回到任意时间点,可以恢复的区间是:数据库有完整flashback log(即所有的tablespace都有flashback log)的最早时间到当前时间,这个时间flashback log 和redo log的不能出现中断。
※:一旦执行了一次flashback database后,必须使用resetlogs来open 数据库,此时flashback log和redo log发生中断,此前的日志会全部作废,对介质恢复也有影响。
select flashback_on from v$database
oracle默认是不开启的。如果需要打开或关闭,
需要在mount状态下使用下面的命令:
alter database flashback on;
#或者
alter database flashback off;
复制
flashback database之所以能恢复是通过flashback log和redo log来实现,所以要求redo log 必须是archive mode。当在非archive mode下,打开flashback database时,会报出错误:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
#无法创建用来flashback database 的flashback log。
ORA-38707: Media recovery is not enabled.
#介质恢复功能关闭,而介质恢复用的就是redo log,
其想表达的是redo log没有打开。
复制
查看redo log的归档模式,执行:archive log list(mount或open状态);
修改redo log的归档模式,在mount状态下,执行:
alter database archivelog; #开启
alter database noarchivelog; #关闭
闪回数据库:
flashback database to scn xxx;
#或者
flashback database to timestamp xxx;
复制