falshback支持的恢复级别包括
1.事务闪回:对表进行了insert update delete操作,已经commit了,发现弄错了,需要恢复到某个commit操作之前的数据,则需要撤销刚才的某个操作
2.行级闪回:对表进行insert ,update,delete操作,需要恢复到某个时间点
3.表级闪回:错误的drop table操作,需要表和表中的数据
4.数据库的闪回:错误的对整个数据库导入很多表数据,需要将整个数据库恢复到过去的时间点。
一:
授予用户闪回权限,一般用sys用户操作
show user
grant flashback any table to bankuser;
select * from session_privs where privilege like 'FLASHBACK%';
二:
恢复刚才删除的一条数据,模拟过程
delete from emp where ename='FORD'; 删除一条数据
select * fron emp where ename=''FORD;
select t.start_timestamp, 执行语句的时间
t.commit_timestamp,提交语句的时间
t.logon_user,操作的用户
t.operation,操作类型
t.table_name,操作的表名
t.table_owner,表的拥有者
t.undo_sql 恢复的sql语句
from flashback_transaction_query t
where table_name='emp';
根据查询出来的语句执行并提交,恢复之前的数据
三:
恢复刚更新的数百万条数据,模拟过程
update emp set job='ANALYStT';执行后提交
select * from emp;所有数据都更改了(这里只有14条,在实际中存在几百万条,不能一条一条恢复)
根据时间点恢复,比如大概在10分钟前的操作
select sysdate from dual;查看当前的时间
使用bankuser用户登录确认10分钟前的数据是否是想要恢复的数据
select * from emp as of timestamp to_timestamp('2011-4-3 10:00:00','yyyy-mm-dd hh34:mi:ss');
开始恢复
alter table emp enable row movment;
falshback table emp to timestamp
to_timestamp('2011-4-3 10:00:00','yyyy-mm-dd hh24:mi:ss');
执行后查看数据是否恢复
注:oracle数据库可以恢复到什么时候的数据?
flashback技术是以undo segment中的内容为基础的,受限于undo_retention参数
show parameter undo_retention 为15分钟
如果undo表空间足够大,可以恢复很长的时间的数据,并非15分钟,保证其有足够的存储空间
四. 恢复删除的表 模拟过程
drop table emp; 用户具有flashback权限
flashback table emp to before drop
五.如何知道那些删除的表可以恢复
登录bankuser
create table test(a int);
drop table test;
select * from user_recyclebin order by droptime desc;查看数据库回收站可以恢复的表
select * from recyclebin order by droptime desc;