select * from O_MCHT_KEY_API_BAK as of timestamp to_timestamp('2020-03-13 11:00:57', 'yyyy-mm-dd hh24:mi:ss');
我们可以看到使用flashback query指定时间点为2020-03-13 11:00:57,可以查询到当时的数据是什么样,这个时候我们就可以把这两条数据重新复制出来插到表里,这样就完成了数据恢复。
注意: flashback query有时效性,太久之前的数据会被清除。
如果我们drop了表,该如何恢复呢?
这里我们先把表drop掉,使用查询可以看到,表已经不存在
2、我们可以应用Flashback table恢复被drop操作的表
这时我们使用flashback query是无法查询到表的原来数据,此时可以使用flashback table。
flashback table O_MCHT_KEY_API_BAK to before drop;
再执行查询之后我们可以看到数据已经恢复成功。
当然flashback tabloe也可以用在对已经delete了的数据进行恢复。
此时我们先删除一行数据,然后执行
flashback table O_MCHT_KEY_API_BAK to timestamp to_timestamp('2020-03-13 11:00:57', 'yyyy-mm-dd hh24:mi:ss');
可以看到,此时恢复报错,提示[72000][8189] ORA-08189: 因为未启用行移动功能, 不能闪回表
这里只需要给对应的表开启行移动功能即可。
//开启表行移动功能
alter table T_TERM_MCHT_INFO enable row movement;
再次执行
flashback table O_MCHT_KEY_API_BAK to timestamp to_timestamp('2020-03-13 11:00:57', 'yyyy-mm-dd hh24:mi:ss');
可以看到被删除的一条记录已经恢复成功了。
3、我们可以应用Flashback table恢复被drop操作的表(数据被delete了,且!!新增字段表结构被改变!!!)
delete完数据之后,我们加了一列,此时再执行flashback quert 以及flashback table
这里执行flashback query与falshback table 均可以恢复,但是新加的列被使用null填充。
次执
4、当表里的数据被delete了,且!!删除字段- - - -表结构被改变!!!
为了模拟这种情况,首先我们将这个表还原成原始状态并插入两条记录。
过5分钟,我们删除表中一列,然后再按flashback query或者flashback table的方式恢复。执行完系统报错:[72000][1466] ORA-01466: 无法读取数据 - 表定义已更改
因为系统闪回的数据已经跟当前状态的表不一致了。
此时如果要恢复之前的数据只能使用rename的方式,即将以前的数据按以前的表结构,恢复到另一张新表中,具体操作如下:
--将O_MCHT_KEY_API_BAK闪回并将数据转存到另一张表:O_MCHT_KEY_API_BAK_1
flashback table O_MCHT_KEY_API_BAK to before drop rename to O_MCHT_KEY_API_BAK_1;
我们可以看到原始的数据已经被回复到我们rename之后的一张新表中。
5、当表里的数据被truncate了,只能通过flashback database来恢复
如果表被truncate了,那么flashback query、flashback table都没用了
直接通过flashback database来恢复
要使用flashback database 首先得确保FLASHBACK 是打开的,也就是下面你的语句 要返回YES
、
在FLASHBACK是打开的前提下,此时使用以下命令就能重新恢复。如果flashback没有打开,且你已经truncate table,那么恭喜你,找DBA吧,这是你跟他增进感情的绝佳机会!
flashback database to timestamp to_timestamp('2020-03-13 14:31:26', 'yyyy-mm-dd hh24:mi:ss');
作者:盐城吊霸天