转载请注明:来自http://blog.youkuaiyun.com/M_ChangGong/ 作者:张燕广
下面进行测试删除TEST的实验。
DROP TABLE TEST PURGE;
依次执行下面3组语句:
第1组:
CREATE TABLE TEST (ID NUMBER);
INSERT INTO TEST VALUES (1);
COMMIT;
DROP TABLE TEST;
第2组:
CREATE TABLE TEST (ID NUMBER);
INSERT INTO TEST VALUES (2);
COMMIT;
DROP TABLE TEST;
第3组:
CREATE TABLE TEST (ID NUMBER);
INSERT INTO TEST VALUES (3);
COMMIT;
DROP TABLE TEST;
查看当前模式中的所有表
SELECT * FROM TAB;
结果为:
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$nTqd5QZfTCKYuua0QlNzDw==$0 TABLE
BIN$xEXO3tErQSanuccwfq3OhQ==$0 TABLE
BIN$VMvc5HpzREKopxYRFTUuUA==$0 TABLE
下面利用闪回表进行恢复表TEST,执行如下语句:
Flashback table TEST TO BEFORE DROP;
对表TEST执行查询操作,字段ID的值应该是什么?
SELECT ID FROM TEST;
结果为:
SQL> SELECT ID FROM TEST;
ID
----------
3
如果想要恢复第1组合第2组中的TEST表应该怎么操作呢?
执行如下语句把表TEST彻底删除:
DROP TABLE TEST PURGE;
然后再次执行恢复表操作:
FLASHBACK TABLE TEST TO BEFORE DROP;
下面再次查询表TEST:
SELECT * FROM TEST;
结果为:
SQL> Select * from test;
ID
----------
2
可以得出结论,相同名称的表执行多次创建和删除操作后,利用闪回表进行恢复时总是恢复最近删除的那张表。
同理,利用上面的方法也可以恢复第1组的TEST表。
但是,这种方法最大的缺憾时等成功恢复第1组的TEST表后,第2组和第3组的TEST表全都彻底删除了。
在不删除当前TEST表的情况下,如果恢复第1组的TEST表?
可不可以将第1组的TEST表恢复后进行重命名?
试一下再说。
执行如下语句:
FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST1;
结果为:
SQL> FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST1;
闪回完成。
对TEST1执行查询操作:
SELECT * FROM TEST1;
结果为:
SQL> SELECT * FROM TEST1;
ID
----------
1
本文介绍了在Oracle数据库中如何使用闪回表功能来恢复被删除的表,并演示了通过不同命令恢复特定版本表的过程及注意事项。

被折叠的 条评论
为什么被折叠?



