在开发中不可避免的就是与数据库打交道,总会在某些不经意的时候误删数据,这时候我们便需要想办法修复删除的数据。主要介绍两种方法,一种是使用FlashBack闪回数据,另一种是根据时间戳查出来数据后,自行选择要插入的数据。
建议:使用时间戳查询,不要直接将表回退到某个时间点。回退到某个时间点,如果有其他关联表的话可能会影响数据的业务完整性。
u 使用FlashBack恢复数据
如果要在某个表上使用 FlashBack Table 特征,则要求必须具有以下条件:
用户必须具有 FlashBack ANY TABLE 系统权限或 FlashBack 对象权限
用户必须在表上具有SELECT、INSERT、DELETE 和 ALTER 权限
必须合理设置初始化参数undo_retention, 以确保 UNDO 信息保留足够时间
必须激活行移动特征:ALTER TABLE EMP ENABLE ROW MOVEMENT
模拟操作步骤:
1. 查询当前数据
SELECT * from LAS_CONTRACT_INFO WHERE id <100988

2. 模拟误删数据
DELETE FROM LAS_CONTRACT_INFO WHERE id <100988

3. 恢复数据
ALTER TABLE LAS_CONTRACT_INFO ENABLE row movement ;flashback table LAS_CONTRACT_INFO to timestamp to_timestamp('2021-05-18 14:20:00','yyyy-mm-dd hh24:mi:ss');
u 使用时间戳手动恢复数据
使用时间戳查询到某个节点前的数据
select * from LAS_CONTRACT_INFO as of timestamp to_Date('2021-05-18 14:30:00','yyyy-mm-dd hh24:mi:ss') WHERE id <100988

查询到时间点未进行修改的数据后,可以根据实际情况进行还原。
参考链接:
https://blog.csdn.net/yiwuya/article/details/3910989
https://blog.csdn.net/life_dba/article/details/8976410
http://blog.itpub.net/23500123/viewspace-1115909/




