我们先创建一张表
Create table test (
Id int,
Name varchar(20)
)
再插入几条数据
insert into test(id,name) values(1,'a');
insert into test(id,name) values(2,'b');
commit;
好了,为了更好观察,我们先执行下面的命令清空一下回收站
Purge recyclebin;
SQL> select original_name,dropscn from recyclebin;
未选定行
好了,回收站已经清空了
下面再把上面创建的test表drop掉,再看下回收站
SQL> drop table test;
表已删除。
SQL> select original_name,dropscn from recyclebin;
ORIGINAL_NAME DROPSCN
-------------------------------- ----------
TEST 1742491
SQL> select * from test;
select * from test
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL>
这时候从回收站中查到了被drop表的,而且使用select语句也找不到表了,好了,下面我们再使用flashback恢复一下
SQL> flashback table test to before drop;
闪回完成。
SQL> select * from test;
ID NAME
---------- --------------------
1 a
2 b
恢复以后,表结构和数据都被找了回来
那么好,下面我们再出个考题,这是OCP考试里的题,在上面的实验基本上再执行下面的操作,想想会发生什么事呢?
drop table test; --drop表test表
以相同的名字再次创建test表,但字段不同
Create table test (
a int,
b varchar(20),
c varchar(30)
)
drop table test --然后再次drop掉test表
再执行flashback恢复
flashback table test to before drop;
这时候大家想想会恢复哪个表呢?是第一次创建的?还是第二次创建的?好了做实验,让实事来说话
SQL> drop table test;
表已删除。
SQL> create table test(
2 a int,
3 b varchar(20),
4 c varchar(30)
5 );
表已创建。
SQL> drop table test;
表已删除。
SQL> select original_name,dropscn from recyclebin;
ORIGINAL_NAME DROPSCN
-------------------------------- ----------
TEST 1743515
TEST 1743435
SQL> flashback table test to before drop;
闪回完成。
SQL> select * from test;
未选定行
SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
A NUMBER(38)
B VARCHAR2(20)
C VARCHAR2(30)
通过以上实验,我们可以看到,虽然名字相同,但flashback恢复的只是最后一次创建的表
请注意上面的查询回收站的语句,从回收站中,可以看到,共有两个test表,但dropscn不一样,使用flashback命令只恢复dropscn大的哪个表,以前的都是垃圾了
关于flashback命令还有一个需要注意的,如果在drop表时,加上了purge选项,则无法恢复,看下面实验
SQL> drop table test purge;
表已删除。
SQL> select original_name,dropscn from recyclebin;
ORIGINAL_NAME DROPSCN
-------------------------------- ----------
TEST 1743435
SQL> flashback table test to before drop;
闪回完成。
SQL> select * from test;
ID NAME
---------- --------------------
1 a
2 b
drop时使用了purge选项,所以该drop没有放入回收站,那为什么执行flashback table时又恢复成功了呢?
能过上面的实验可以看到,恢复的是我们第一次创建的test表,而第二次创建的test表就无法恢复了
相关推荐
–恢复 FLASHBACK TABLE 表名 TO BEFORE DROP; 此举 可以恢复表结构,同时 数据也恢复了 必须9i或10g以上版本支持,flashback无法恢复全文索引 您可能感兴趣的文章:Oracle数据块损坏之10231内部事件不完全恢复...
Flashback Query本身不会恢复任何操作或修改,也不能告诉你做过什么操作或修改,实际上Flashback Query特性实际应用时,是基于标准SELECT的扩展,借助该特性能够让用户查询到指定时间点的表中的记录,相当于拥有了...
FLASHBACK TABLE CF_IMPORT_RULE TO BEFORE DROP; FLASHBACK COMPLETE 您可能感兴趣的文章:Oracle误删除表数据后的数据恢复详解Oracle7.X 回滚表空间数据文件误删除处理方法Oracle7.X 回滚表空间数据文件误删除...
全面总结和解释了oracle flashback技术的使用,优势以及限制
Oracle Flashback在医院数据恢复中的应用.pdf
必须设定undo保留时间足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; seconds值是undo数据保持的秒数。 Flashback view是由undo retention interval来限制的。
BLOG_Oracle 回收站及flashback drop_LHR.pdfBLOG_Oracle 回收站及flashback drop_LHR.pdf
如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善。Oracle 9i中提供了一项新的...flashback table tablename to timest
## oracle恢复误删除的表数据 ...flashback table 表名 to timestamp to_timestamp('2020-04-27 17:25:00','yyyy-mm-dd hh24:mi:ss') ``` 关闭行移动功能 ```java alter table 表名 disable row movement
oracle 10g flashback(数据恢复)/oracle 10g flashback(数据恢复)/oracle 10g flashback(数据恢复)/oracle 10g flashback(数据恢复)
mysqlbinlog的flashback
oracle 表恢复 闪回 flashback
利用oracle10g的新特性flashback闪回功能快速恢复oracle中被删除的表
PRM可以在无备份的情况下恢复被truncated/drop掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。 PRM是图形化增强版的Oracle DUL工具,同时具备很多Oracle DUL不具备的特性 情况 当某...
Oracle 10g High Availability-Flashback技術介紹
自己练习的时候记录的操作,关于flashback archive log 的练习,希望有用!
Dataguard故障切换(Switchover和Failover)及利用Flashback进行恢复
ORACLE flashback database测试,主要进行ORACLE flashbackup 闪回整个数据库的实现。
Oracle中FlashBack技术的应用 1: 闪回数据库; 2: 闪回drop掉的表; 3: 闪回对表数据的修改; 4: 闪回版本查询
这个是描述如何实现恢复数据库的文档,值得我们去看一下