不小心删除表或数据后,如何利用Oracle的闪回进行恢复

本文介绍了Oracle闪回表、回收站功能及其在误删数据恢复中的应用,包括如何通过行移动、时间点恢复和利用回收站进行选择性恢复。详细步骤和注意事项涵盖从简单视图到复杂场景的解决方案。

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

闪回表以及闪回表中的数据

回收站功能

回收站这个特性主要的好处就是在误删除一个表时有一个恢复机制,不必通过数据库还原来实现。避免大量的人工误操作。以及数据库还原等复杂的操作。让数据库的管理、维护更加简单、方便。如果是SQL SERVER数据库,就必须还原整个数据库来找到被DROP掉的表。

TEST_USER表

表TEST_USER的数据.(当前北京时间 2021-07-21 12:58)

t1

场景1:不小心删除了重要数据,如何进行闪回。

delete from test_user where id in (1,4,5);
commit;

表TEST_USER的数据.(当前北京时间 2021-07-21 13:00)

2

将表闪回到北京时间 2021-07-21 12:58

1.启用对应表的行移动功能

使用表所在用户进行执行,否则在执行闪回时,会报错:ORA-08189: cannot flashback the table because row movement is not enabled

alter table TEST_USER enable row movement;
2.执行闪回到具体的时间
FLASHBACK TABLE TEST_USER TO TIMESTAMP TO_TIMESTAMP('2021-07-21 12:58:00', 'YYYY-MM-DD HH24:MI:SS');

注意,当不小心在简单视图上删除了数据,需要分析创建视图的sql,并且找到基表进行数据恢复。

3.查看闪回结果

闪回成功。

3

场景2:不小心删除了TEST_USER表

删除前的数据

4

1.删除表
drop table test_user;
2.恢复表

恢复最近一次删除的表,需要尽快恢复,

flashback table test_user to before drop;

备注: 如果恢复时,表名已经存在了,可以使用 flashback table test_user to before drop rename to test_user2 进行重新命名;

场景3:不小心删除了多次TEST_USER表后,该如何选择性的恢复。

当前表的数据(时间:2021-07-23 13:37)

5

删除test_user表(时间:2021-07-23 13:37)

drop table test_user;


又创建了表test_user,放入一些内容,再删除了该表test_user。(时间:2021-07-26 13:00)

6

drop table test_user;

查看回收站,如下所示,虽然ORIGINAL_NAME一致,但是RECYCLEBIN NAME则有所不同。RECYCLEBIN NAME的命名规则为BINGUIDGUIDGUIDVersion 其中GUID为GlobalUID,是一个全局唯一、24个字符长的标识对象,它是ORACLE内部使用的标识。 其中$version是ORACLE数据库分配的版本号。

7

指定RECYCLEBIN NAME进行恢复第一个表user_test(时间:2021-07-26 13:03)

flashback table "BIN$nNNucRqeQU+sjKjL7nIw6A==$0" to before drop;

恢复成功,查看当前表的内容(时间:2021-07-26 13:03)

8

清空回收站

1.如果希望完全删除该表,而不让该表放入回收站(在回收站中间将仍然占有空间),可以使用以下命令永久删除该表。当然这样操作后,也不能通过使用闪回特性闪回该表了。

DROP TABLE TABLE_NAME PURGE;

2.如果在删除名为 TEST 的特定表之后需要从回收站中清除它,可以执行如下sql,此命令将从回收站中删除表 TEST 及所有相关对象,如索引、约束等,从而节省了空间

PURGE TABLE TABLE_NAME;

或者

PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0";

3.在回收站删除索引

PURGE INDEX IN_TEST1_O1;

4.删除表空间下的所有对象

PURGE TABLESPACE xxxxx;

5.数据仓库类型的环境中,用户创建和删除许多临时表,为该表空间中特定用户清空回收站。

PURGE TABLESPACE USERS USER SCOTT;

6.清除当前数据库下回收站所有的内容(DBA权限)

PURGE DBA_RECYCLEBIN

Flashback Drop注意事项

  1. 只能用于非系统表空间和本地管理的表空间。系统表空间中,表对象删除后就真的从系统中删除了,而不是存放在回收站中。

  2. 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。

  3. 对象能否恢复成功,取决于对象空间是否被覆盖重用。

  4. 当删除表时,依赖于该表的物化视图也会同时删除,但是由于物化视图并不会放入recycle binzhong,因此当你执行flashback drop时,并不能恢复依赖其的物化视图。需要DBA手工重建。

  5. 对于回收站(Recycle Bin)中的对象,只支持查询。不支持任何其他DML、DDL等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值