概述
闪回表是一种能够恢复表或设置表到过去某个特定的时间点而又不需要进行不完全恢复的闪回技术。
使用闪回表时,所有的相关对象都能得到恢复。
Oracle11g flashback table 特性:
1、在线操作;
2、恢复到指定时间点或SCN的任何数据;
3、自动恢复相关属性、如索引、触发器等;
4、满足分布式的一致性;
5、满足数据一致性,所有相关对象将自动一致;
6、闪回表技术是基于回滚数据(undodata)来实现的,因此,要想闪回表到过去的某个时间上,必须确保与回滚表空间有关的参数设置合理。
闪回表语法:
FLASHBACK TABLE [SCHEMA.] TO {BEFORE DROP [RENAME TO TABLE] | [SCN | TIMESTAMP] expr [RNABLE |DISABLE] TRIGGERS}
实例:
SQL>delete from test where id=7766;SQL>commit;进行恢复SQL>alter table test enable row movement;SQL>flashback table test to timestamp to_timestamp('2019-03-1015:33:30','yyyyy-mm-dd hh24:mi:ss')
局限性:
FLASHBACK TABLE 命令作为单独一个事务执行,获取DML锁,统计信息不会闪回;当前索引及依赖对象被维护; 闪回表有如下特性:
1) 不能对系统表做闪回操作;
2) 在执行DDL操作后不能做闪回操作;
3) 闪回操作命令写入alert日志文件;
4) 闪回操作会产生undo 和redo数据;
注意 SYS 用户不支持闪回,Flashback Table 也是使用 UNDO tablespace 的内容来实现对数据的回退。
注意:如果想要对表进行 flashback,必须允许表的 row movement.
Alter table table _name row movement;
要 查 看 某 表 是 否 启 用 row movement , 可 以 到 user _tables 中 查 询 ( 或all_tables,dba_tables),
例如:
SQL> select row _movement from user_tables where table_name='EMP';
要启用或禁止某表 row movement,可以通过下列语句:
--启用
SQL> ALTER TABLE emp ENABLE ROW MOVEMENT;
![b14e4aa38b2c2ad11cd8a67addc3be21.png](https://i-blog.csdnimg.cn/blog_migrate/3240b62ef5189b07810cffed92e75f42.jpeg)
--禁止
SQL> ALTER TABLE table _name DISABLE ROW MOVEMENT;
![c1d71850a5e5e167328778820f5ab8c8.png](https://i-blog.csdnimg.cn/blog_migrate/153639fefbdc34109560c1e847cc9cad.jpeg)
实例:
1、基础环境准备
SQL> create table C (id number(2));SQL> insert into C values(1);SQL> insert into C values(2);SQL> commit;SQL> select * from c;SQL> alter session set nls _date_format="yyyy-mm-dd hh24:mi:ss";SQL> select sysdate from dual;SQL> select current _scn from v$database;
![01566bde1e5bbe207bdecf68cc151198.png](https://i-blog.csdnimg.cn/blog_migrate/ffee7290b54517b71199354d58b4af7c.jpeg)
2、删除数据
SQL> delete from C;SQL> commit;SQL> alter table c enable row movement;
![1e2075dc920a088cae360c3d106392ae.png](https://i-blog.csdnimg.cn/blog_migrate/b32a13fd32a65f4476369be6eef41c40.jpeg)
3、恢复数据
SQL> flashback table c to scn 55714263;SQL> select * from C;
![509d0bbc75b9aed03cca5143085f056d.png](https://i-blog.csdnimg.cn/blog_migrate/be279bbe10d432a9753f91b50529b920.jpeg)
总结
Flashback table 命令支持同时操作多个表,表名中间以逗号分隔即可,如果你执行一条flashback table 命令时同时指定了多个表,要记住单个 flashback table 是在同一个事务中,因此这些表的恢复操作要么都成功,要么都失败。
后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!!
![7cf2da66a12ff6262f1d2ad5cdc2ec67.gif](https://i-blog.csdnimg.cn/blog_migrate/604503b6f348f9c18b4462148afe9542.gif)