当前位置:   article > 正文

oracle中drop表数据恢复_oracle drop表数据恢复

oracle drop表数据恢复

一 前提了解

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

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

SHOW PARAMETER RECYCLEBIN;
  • 1

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

select * from user_recyclebin;
  • 1

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

二 drop原理

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

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

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

三 恢复数据

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

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

恢复数据命令

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

将"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";
  • 1
  • 2
  • 3
  • 4

或者是

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

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

四 清空回收站

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

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

  • 清空数据库中所有用户的回收站(需要DBA权限):
PURGE DBA_RECYCLEBIN;
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/738226
推荐阅读
相关标签
  

闽ICP备14008679号