一不小心将数据库数据修改了,而且回滚无效,于是去尝试各种方法恢复数据,最后实测这个方法可以实现
恢复数据库被修改数据的流程及代码,这里被修改的表是AUTH_USER,实际应用填写对应表名。
恢复方法学习自博客:
- -- 通过时间恢复删除且已提交的数据
-
- -- 1)查询当前系统时间
-
- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
-
- -- 2)查询删除数据的时间点之前的数据
- select * from AUTH_USER as of timestamp to_timestamp('2023-09-06 14:51:37','yyyy-mm-dd hh24:mi:ss');
- --(如果不是,则继续缩小范围)
-
- -- 3)恢复删除且已提交的数据
-
- --开启行移动功能(解决执行以下语句报错问题)
-
- alter table AUTH_USER enable row movement;
-
- --恢复某个时间点的数据
-
- flashback table AUTH_USER to timestamp to_timestamp('2023-09-06 14:51:37','yyyy-mm-dd hh24:mi:ss');
-
- --关闭行移动功能
-
- alter table AUTH_USER disable row movement;
后续蒋老师补充了一些内容:
通过时间进行恢复固然可以将数据恢复到指定时间点,但是操作期间产生的数据和被修改的数据无法体现,正确的做法是将当前数据拷贝一份另存新表,再进行数据恢复,将恢复后的数据和拷贝数据进行对比合并(前提是恢复时间足够短或者数据不常发生变动)。