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

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

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

回收站功能

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

TEST_USER表

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

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

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

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

将表闪回到北京时间 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.查看闪回结果

闪回成功。

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

删除前的数据

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)

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

drop table test_user;

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

drop table test_user;

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

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

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

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

清空回收站

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等操作。

关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~

相关文章
|
11天前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
3月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
68 0
|
3月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
11天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
50 0
|
3月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
45 0
|
3月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
46 0
|
3月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。