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