oracle--闪回摘要
1.数据闪回查询
select * from jw_jh_zxjhkcb as of timestamp to_timestamp('2018-06-01 08:45:00','yyyy-mm-dd hh24:mi:ss')
2 闪回已经删除的数据
alter table jw_cj_bkcxmdb_0228 enable row movement
flashback table jw_cj_bkcxmdb_0228 to timestamp to_timestamp('2018-06-07 13:30:00','yyyy-mm-dd hh24:mi:ss')
3 闪回drop的表
flashback table jw_cj_bkcxmdb_0228 to before drop
SQL> flashback table emp to before
如果要还原的表名在当前系统中已经被占用,也可以在闪回删除的时候对表重命名
SQL> flashback table emp to before drop rename to emp_new
闪回数据归档(Flashback Data Archive )
功能描述:闪回数据归档可使表具有回退到过去任何时间点的能力,前面提到的闪回查询,闪回表都会受限于撤销数据是否失效,如果撤销数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间是否有足够可用空间,而闪回数据归档,则没有这些限制。
创建闪回归档
1.创建一个用户闪回数据归档的表空间,当然,也可以使用已经存在的表空间。
SQL> create tablespace test_tb datafile 'test.dbf' size 20m;
2.创建一个保留时间为2年的闪回归档
SQL> create flashback archive test_fa tablespace test_tb retention 2 year;
为scott用户下的emp表启用闪回归档
1.赋予用户归档的权限
SQL> grant flashback archive on test_fa to scott;
2.连接用户
SQL> conn scott/tiger;
3.为emp表启用闪回归档
SQL> alter table emp flashback archive test_fa;
至此,emp表就拥有了可以查询或回退到过去2年任意时间点的能力!
闪回数据库(Flashback Database)
功能描述:闪回数据库可将整个数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是整个数据库的时空穿梭。当然,闪回点之后的所有工作就丢失了,其实就相当于数据库的不完整恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,当然相比于传统备份恢复机制,恢复过程会快很多。
工作原理:闪回数据库不使用撤销数据,使用另外一种机制来保留回退所需要的恢复数据,当启用闪回数据库,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,则是一个 提取闪回日志-->将块映像复制回数据文件 的过程。
配置闪回数据库(闪回数据库要求数据库为归档模式)
1.指定闪回恢复区,也就是存放闪回日志的位置,但闪回恢复区不仅仅是为了存放闪回日志,Oracle的很多备份恢复技术都用到这个区域,比如控制文件的自动备份等都会存放到此区域。
SQL> alter system set db_recovery_file_dest ='/flash_recovery_area';
2.指定恢复区大小
SQL> alter system set db_recovery_file_dest_size=4G;
3.指定闪回日志保留时间为2小时,即通过闪回操作,可以将数据库回退到前两小时内的任意时间点
SQL> alter system set db_flashback_retention_target=120;
4.有序关闭数据库--mount模式下启用闪回数据库--打开数据库
SQL> shutdown immediate;
SQL> startup mount; SQL> alter database flashback on; SQL> alter database open;
至此,闪回数据库配置完成!
使用闪回数据库功能
SQL> shutdown immediate; SQL> startup mount; SQL> flashback database to timestamp sysdate-60/1440; SQL> alter database open resetlogs;