前言:数据恢复的关键 定删除时间点:首先,需要知道是什么时间进行的删除操作。
如果不能确定具体时间点,可以选择尽量准确的删除数据前的时间。
oracle数据库如果使用drop指令误删除了数据应该如何恢复呢?
- 如果没有进行其他操作,可以直接用语句进行还原操作
flashback table xuegao to before drop --sql中的xuegao替换成你删除的表名即可
- 如果你进行了新建了同名表,需要通过下列语句进行还原,首先我们需要明确一个大概的删除时间
--这里的xuegao 替换为你drop的表名 根据droptime的时间来确定是哪条数据是你删除的
SELECT OBJECT_NAME,ORIGINAL_NAME, DROPTIME ,TS_NAME ,TYPE FROM USER_RECYCLEBIN WHERE ORIGINAL_NAME='xuegao'
--将第一条的object_name 替换 "BIN$J3jM1eVqSergYwEAAH+mQg==$0" 然后 xuegao_new 可以自行修改为你新建的表的表名 注:这里是双引号不是单引号
FLASHBACK TABLE "BIN$J3jM1eVqSergYwEAAH+mQg==$0" TO BEFORE DROP RENAME TO "xuegao_new";
--这样你就可以查询到恢复的数据了 自行进行迁移到原表了
SELECT * FROM xuegao_new
如果误更改了数据需要还原,我们又应该如何操作呢?
--首先使用命令 来启用行移动 (这里的xuegao还是表名)
alter table xuegao enable row movement
--这里的时间是你误修改前数据的时间即可、限定条件可以根据自己需求进行添加
select * from xuegao as of timestamp to_timestamp('2024-01-01 12:46:40','yyyy-MM-dd hh24:mi:ss')
--如果上面sql查询的数据没问题 即可进行恢复 注:这里是对整表的进行恢复如果是部分字段建议用上面sql进行update
flashback table xuegao to timestamp to_timestamp('2024-01-01 12:46:40,'yyyy-MM-dd hh24:mi:ss')
如果只想单独恢复某条删除或者更改的数据 应该怎么操作?
--查询历史数据记录 条件自行添加
SELECT * FROM 表名 AS OF TIMESTAMP TO_TIMESTAMP('删除时间点', 'YYYY-MM-DD HH24:MI:SS');
--将查询结果手动插入回原表中。使用以下SQL语句,注意主键冲突
INSERT INTO 表名 (SELECT * FROM 表名 AS OF TIMESTAMP TO_TIMESTAMP('删除时间点', 'YYYY-MM-DD HH24:MI:SS'));