加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_商丘站长网 (https://www.0370zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2022-11-29 12:42:06 所属栏目:MySql教程 来源:
导读:  闪回表以及闪回表中的数据 回收站功能

  回收站这个特性主要的好处就是在误删除一个表时有一个恢复机制如何删除数据,不必通过数据库还原来实现。避免大量的人工误操作。以及数据库还原等复杂的操作。让数
  闪回表以及闪回表中的数据 回收站功能
 
  回收站这个特性主要的好处就是在误删除一个表时有一个恢复机制如何删除数据,不必通过数据库还原来实现。避免大量的人工误操作。以及数据库还原等复杂的操作。让数据库的管理、维护更加简单、方便。如果是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注意事项
 
  只能用于非系统表空间和本地管理的表空间。系统表空间中,表对象删除后就真的从系统中删除了,而不是存放在回收站中。
 
  对象的参考约束不会被恢复,指向该对象的外键约束需要重建。
 
  对象能否恢复成功,取决于对象空间是否被覆盖重用。
 
  当删除表时,依赖于该表的物化视图也会同时删除,但是由于物化视图并不会放入recycle binzhong,因此当你执行flashback drop时,并不能恢复依赖其的物化视图。需要DBA手工重建。
 
  对于回收站(Recycle Bin)中的对象,只支持查询。不支持任何其他DML、DDL等操作。
 

(编辑:开发网_商丘站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!