flashback技术适用于:
事物闪回
行级闪回
表级闪回
数据库级闪回
事物:数据库进行的一个操作单元。
查看oracle数据库版本:v$version
linux下启动数据库步骤:
1)lsnrctl start
2)sqlplus "/as sysdba"
3)startup
SQL>select * from v$version;
查看用户是否拥有flashback权限:session_privs
SQL>conn wcwen/tiger
SQL>select * from session_privs where privilege like '%FLASHBACK%';
如果用户没有flashback权限,可以授予用户flashback权限。
SQL>conn "/as sysdba"
SQL>show user
SQL>grant flashback any table to wcwen;
恢复刚删除的一条数据:flashback_transaction_query --->视图
select t.start_timestamp,t.commit_timestamp,t.logon_user,t.operation,t.table_name,t.table_owner,t.undo_sql
from flashback_transaction_query t
where table_name='EMP';
其中undo_sql下的语句即使执行恢复的语句,只要执行该语句即可恢复刚才的操作。
注意:查询视图flashback_transcation_query其中indo_sql值为空原因及解决办法?
原因:oracle11g禁用了supplemental logging
解决方法:开启supplemental logging即可,方法如下
SQL>alter database add supplemental log data;
恢复刚删除的100万条记录:
不能一条一条的恢复了,工作量太大,太麻烦。我们试图恢复到删除表之前的时间点即可。
查询当前系统时间:
SQL>selelct sysdate from dual;
查询10分钟前的emp表数据:
SQL> select * from emp as of timestamp to_timestamp('2014-09-17 9:27:00','yyyy-mm-dd hh24:mi:ss');
更改emp表的行号,不执行此步将出现ora-01089错误:
SQL> alter table emp enable row movement;
flashback技术恢复数据到10分钟前:
flashback table emp to timestamp to_timestamp('2014-09-17 9:27:00','yyyy-mm-dd hh24:mi:ss');
flashbacke技术是以undo segment中的内容为基础,因此受限于undo segment的参数,要使用flashback技术,必须启用自动撤销管理表空间。
查看undo_retention参数:该参数用来指定undo记录保存的最长时间,以秒为单位,默认900秒。undo数据在不被覆盖的情况下会持续有效,所以,如果数据库操作频繁,需要加大undo_retention的值。
SQL>show parameter undo_retention
恢复刚刚删除的表:
语法:SQL>flashback table 要闪回的表名称 to before drop;
oracle数据库的回收站:(recyclebin 或user_recyclebin),回收站中存在的表才可以进行闪回技术的恢复,不存在的表不能用闪回技术恢复。
小应用:在windows系统中备份linux系统下的oracle11g数据库的数据.
创建7份.bat文件,用windows自带的任务计划进行自动执行操作即可。
恢复一周前的数据.
创建一个临时用户:create user test identified by test;
grant connect,serourse to rest;
imp test/test@orcl tables=('emp') file='*.dmp';
delete from wcwen.emp;
insert into wcwen.emp
select * from test.emp;