Oracle回退不小心drop掉得表

本文讲述了如何在Oracle中避免因误删表后的数据恢复方法,包括利用回收站、Flashback Table命令,以及处理不同情况下的数据找回策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在oracle中,如果不小心drop掉一张表,能不能恢复呢?

DROP TABLE FORM_DESIGNER_USER_NAME;

答案是不一定的(分情况-Oracle数据表对于被drop的表和索引,都会存放在回收站中。所以对于生产的数据库必须设置好回收站功能)在oracle中,当使用命令drop table tablename 命令时,其实不会真正的删除该表,而是把表放到了回收站中(回收站的概念类似windows中的回收站),所以我们可以通过flashback命令来恢复drop掉的表,如果关闭了回收站功能或者回收站被清空了就不好处理啦。

实验drop

我们先创建一张表

Create table testuser (
Id int,
Name varchar(20)
)

再插入几条数据

insert into testuser (id,name) values(1,'a');
insert into testuser (id,name) values(2,'b');
commit;

在这里插入图片描述

 drop table testuser ;

在这里插入图片描述
表已删除。

查询oracle回收站表

select * from recyclebin ORDER BY CREATETIME DESC ;

在这里插入图片描述
找到被删除的表名有操作时间。如果想查询这张表可以用recyclebin 表里面的OBJECT_NAME字段加双引号。
在这里插入图片描述

在这里插入图片描述

恢复

FLASHBACK TABLE "BIN$YAuvlQWzQA+YBLx0RbotCQ==$0" TO BEFORE DROP;

查询
在这里插入图片描述
如果drop表之后、有重新建了一张名称一样的表、需要先给新建的表重命名之后在进行恢复。

--修改目前已经重建的表名称
ALTER TABLE testuser RENAME TO testuser_BAK;

如果drop表之后、有重新建了一张名称一样的表结果不一样了、可以先查询出来删除的表把数据导出来在导入到目标表中。
在这里插入图片描述
实验delete
查询表中数据
在这里插入图片描述

#删除ID=1的数据
delete from testuser2  where id = '1';

在这里插入图片描述

注意如果删除数据后,对表做了ddl操作(更改列的长度等,但是根据测试,增加一列不会报错),然后想闪回,则报错,不能闪回。

首先获取删除数据的时间点、删除时间点字段是:FIRST_LOAD_TIME

select * from v$sql where sql_text like '%table_name%' ;

在这里插入图片描述
在这里插入图片描述

根据结果中的sql_text内容,找到delete执行语句对应的删除时间点,执行下面语句查询出删除的数据。

select * from table_name as of timestamp to_timestamp(‘删除时间点’,‘yyyy-mm-dd hh24:mi:ss’)
where (删除时的条件)

在这里插入图片描述

检查数据无误后,执行下面操作,将数据插回原表中。注意主键不重复

insert into table_name
select * from from table_name as of timestamp to_timestamp(‘删除时间点’,‘yyyy-mm-dd hh24:mi:ss’)
where (删除时的条件)

这里不小心执行了二次、导致插入了二条。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值