不小心删除表或数据后,如何利用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 技巧 ~

相关文章
|
2月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
3月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
2月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
2月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的闪回版本查询
本文介绍了Oracle数据库的闪回版本查询(Flashback Version Query)功能,通过示例详细讲解了其使用方法。闪回版本查询可获取指定时间区间内行的不同版本,利用`versions between`子句实现。文中包含视频讲解,并通过创建测试表、插入数据及执行查询等步骤,演示如何获取历史版本信息和伪列详情,帮助用户深入了解该功能的实际应用。
69 13
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据归档
本文介绍了Oracle闪回数据归档(Flashback Data Archive)的功能与实现方法。闪回数据归档可将表中的历史数据进行归档,支持全面的历史数据查询,引入了“Oracle Total Recall”概念。文中通过具体实战步骤演示了如何创建和启用闪回数据归档:包括创建表空间、数据归档,设置默认归档,授予用户权限,开启表的归档功能,并展示了误操作后如何通过归档恢复数据。最后通过执行计划验证了数据来源于归档。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回事务查询
Oracle数据库的闪回事务查询(Flashback Transaction Query)是闪回版本查询的扩充,可用于审计或撤销已提交的事务。通过`flashback_transaction_query`视图,可生成还原特定事务的SQL语句。本文介绍了其基本概念,并通过实战演示如何使用该功能:从授权、开启UNDO数据增强,到创建测试表和事务,最后利用闪回查询撤销已提交的事务,验证数据恢复效果。附带视频讲解,帮助深入理解。
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的闪回删除
本文介绍了Oracle数据库的闪回删除(Flashback Drop)功能,该功能可从回收站恢复已删除的对象至删除前状态。文章详细讲解了回收站的工作原理及操作步骤,包括检查回收站功能是否开启、删除表、查看回收站内容以及使用闪回删除恢复数据等实战操作。通过具体示例,演示了如何恢复被删除的员工表及其数据,并处理同名表冲突问题。文末还附有视频讲解,帮助读者更直观地理解操作流程。
|
2月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
2月前
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常

推荐镜像

更多