select * from BBRUN."t_user" where BBRUN."t_user"."mobile" ='1888888888';
update BBRUN."t_user" set BBRUN."t_user"."is_realname" = '0' where BBRUN."t_user"."mobile" = '1888888888';
delete from BBRUN."t_user" where BBRUN."t_user"."mobile" = '1888888888';
写在前面
在操作数据库语句的时候有可能失误,比如在修改数据库数据数据,本来是想通过电话号码字段取修改性别,可能一个不小小心弄反了,结果把电话字段更新成了,要想办法把数据找回来。还好是测试环境,要是生产环境你就等着枪毙吧。
数据恢复前
- 开启表行迁移功能
alter table BBRUN."t_user" enable row movement;
注意:alter table XXX enable row movement 语句会造成引用表XXX的对象(如存储过程、包、视图等)变为无效,执行完成后,需要重新对引用该表的对应进行重新编译;另外,shrink操作也必须开启行迁移功能。
- 查看操作时间点
select t.first_load_time,t.* from v$sqlarea t where rownum<10 order by t.first_load_time desc ;
- 查看更新前时间点的数据情况
select * from BBRUN."t_user" as of timestamp to_timestamp('2017-09-06 15:00:00','yyyy-mm-dd hh24:mi:ss');
- 创建临时表暂存更新前时间点的数据
create table BBRUN."t_user_temp" as select * from BBRUN."t_user" as of timestamp to_timestamp('2017-09-06 15:00:00','yyyy-mm-dd hh24:mi:ss');
- 查看更新前数据情况是否准确
select * from BBRUN."t_user_temp";
恢复更新数据处理方式一:采用更新方式恢复表更新操作前数据
merge into BBRUN."t_user"
using BBRUN."t_user_temp"
on ( BBRUN."t_user"."t_user_id" = BBRUN."t_user_temp"."t_user_id" )
when matched then
update set BBRUN."t_user"."mobile" = BBRUN."t_user_temp"."mobile";
--查看数据恢复情况
select * from t_test01;
恢复更新数据处理方式二:删除原表,重命名方式恢复表更新操作前数据
drop table BBRUN."t_user" ;
rename BBRUN."t_user_temp" to BBRUN."t_user";
--查看数据恢复情况
select * from BBRUN."t_user";
网友评论