oracle中drop表数据恢复

一 前提了解

最近了解到,drop table 表其实不是真实的将表删除,而是类似于window中将文件删除后,oracle将表修改了名字放置到垃圾回收站中,

首先,前提是数据库开启垃圾回收站功能,这个可以通过命令查询 ,如果没有开启收回站功能,删除则为实体删除

SHOW PARAMETER RECYCLEBIN;

在这里插入图片描述
或者是查询垃圾回收站的视图,看看表中是否有数据

select * from user_recyclebin;

在垃圾回收站开启的基础上,可以将drop掉的表的数据进行恢复;

二 drop原理

首先我们要知道这个drop 的功能原理

假设这个是表空间
假设这个是表空间
然后,里面的是表1,表2占用的空间,
在这里插入图片描述
接下来,drop掉表1后,表并不会立即从物理存储中删除。相反,它会被重命名并移动到数据库的回收站中,以便于将来可能的恢复。这个过程使得被删除的对象在逻辑上对用户不可见,但它们仍然占用物理磁盘空间。
在这里插入图片描述
这时,如果在有新的表3插入的话,表3的数据 将在新的表空间中继续使用,表1虽然被删除了,但是物理数据还在,
除非物理空间不够,才会开始占用已经drop掉的空间
在这里插入图片描述

回收站中的数据实际上仍然存储在数据库的数据文件中,但是这些对象的名称会被修改,前缀会加上BIN$,以标识这些对象现在属于回收站。

三 恢复数据

要查找回收站中的数据,可以查询特定的数据字典视图,例如USER_RECYCLEBIN或DBA_RECYCLEBIN。这些视图提供了关于回收站中对象的信息,包括它们的原始名称、在回收站中的新名称、类型等。

-- 查询回收站的命令
select * from user_recyclebin;

恢复数据命令

FLASHBACK TABLE "object_name_from_query" TO BEFORE DROP RENAME TO "new_table_name";

将"object_name_from_query"替换为查询结果中的OBJECT_NAME值,将"new_table_name"替换为你希望恢复的表的新名称(如果不想改变名称,也可以用原始名称)。注意new_table_name名称不要和现有库中的表名

示例:恢复被删除的 ORDER_TEST

-- 查询
SELECT * FROM USER_RECYCLEBIN WHERE ORIGINAL_NAME = 'ORDER_TEST';
--恢复
FLASHBACK TABLE "ORDER_TEST" TO BEFORE DROP RENAME TO "ORDER_TEST";

或者是

-- 查询
SELECT * FROM USER_RECYCLEBIN WHERE ORIGINAL_NAME = 'ORDER_TEST';
--恢复
FLASHBACK TABLE "BIN$EJ+G3kYBesngYwIAFKylJg==$0" TO BEFORE DROP RENAME TO "ORDER_TEST";

都可以恢复到数据到实际中,
在这里插入图片描述

四 清空回收站

  • 清空当前用户的回收站:
PURGE RECYCLEBIN;
  • 清空特定对象:
    例如,如果你想清空一个特定的表,可以使用:
PURGE TABLE "tableName";

其中"tableName"是回收站中对象的名称,注意使用回收站中的名称,而不是原始名称。BIN$

  • 清空数据库中所有用户的回收站(需要DBA权限):
PURGE DBA_RECYCLEBIN;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值