1 oracle从9i开始,引入Flashback功能,Flashback能够恢复所有的数据库错误(除了文件损坏、介质错误等);
2 flashback支持的恢复级别
事务闪回、行级闪回、表级闪回、数据库级闪回
3 给bankuser用户授予flashback权限
sql>grant flashback any table to bankuser;
4 flashback_transaction_query视图介绍
START_TIMESTAMP 执行某条语句的时间
COMMIT_TIMESTAMP 提交某条语句的时间
LOGON_USER 登录数据库的用户
OPERATION 操作类型(增删改)
TABLE_NAME 操作的表名
TABLE_OWNER 表的拥有者
UNDO_SQL 恢复的sql语句
5 如何恢复刚才删除的一条sql语句
方法:
在flashback_transaction_query中查询出对应的undo_sql语句,执行即可。
6 如何恢复刚才删除100w条数据
①通过查看flashback_transaction_query试图,获取表更改之前的一个时间点;
②使用如下语句查询获取的时间点的数据是否正确
select * from emp as of timestamp to_timestamp('2013-06-28 21:10:00','yyyy-mm-dd hh24:mi:ss');
③如果数据正确,则使用如下语句将表中数据恢复到某一时间点时的数据
flashback table emp to timestamp to_timestamp('2013-06-28 21:10:00','yyyy-mm-dd hh24:mi:ss');
flashback 之前需要先使用如下语句
alter table emp enable row movement;
7 flashback 原理
flashback是以undo segment中的内容为基础的,因此受限于undo_retention参数。
还原表空间足够大的话,则可以恢复很长时间的数据,如果更改数据频繁,还原表空间中旧数据会按先进先出原则覆盖。
8 恢复删除的表
①首先查看删除的表是否可以恢复
select * from user_recyclebin;
如果删除的表可以查询到,则可以恢复
② 使用如下语句恢复
flashback table emp to before drop;