最近读了eygle的新作,实践了一下闪回:
os:windows xp
db:oracle 9.2.0.1
关于闪回功能的测试,如果是正常存在的一个表,删除部分数据,可以保证数据的闪回。
C:Documents and Settingszero>sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 10 11:28:10 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> conn test/1
已连接。
SQL> select count(1) from test;
COUNT(1)
----------
9
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
10-12月-07 11.29.05.765000 上午 +08:00
SQL> delete from test where rownum <3;
已删除2行。
SQL> commit;
提交完成。
SQL> select count(1) from test;
COUNT(1)
----------
7
SQL> col scn for 999999999999;
SQL> select dbms_flashback.get_system_change_number scn from dual;
SCN
-------------
1352535
SQL> select count(1) from test as of scn 1352530;
COUNT(1)
----------
7
SQL> select count(1) from test as of scn 1352520;
COUNT(1)
----------
9
SQL> create table test_rec as select *from test as of scn 1352520;
表已创建。
SQL> select count(1) from test_rec;
COUNT(1)
----------
9
SQL> delete from test;
已删除7行。
SQL> commit;
提交完成。
SQL> insert into test select *from test_rec;
已创建9行。
SQL> commit;
提交完成。
SQL>
如果是之前进行drop过表,就无法恢复:
SQL> create table zero as select *from test;
create table zero as select *from test
*
ERROR 位于第 1 行:
ORA-00955: 名称已由现有对象使用
SQL> drop table zero;
表已丢弃。
SQL> create table zero as select *from test;
表已创建。
SQL> insert into zero select *from test;
已创建9行。
SQL> commit;
提交完成。
SQL> select count(1)from zero;
COUNT(1)
----------
18
SQL> delete from zero where rownum <8;
已删除7行。
SQL> commit;
提交完成。
SQL> select count(1) from zero;
COUNT(1)
----------
11
SQL> col scn for 999999999999;
SQL> select dbms_flashback.get_system_change_number scn from dual;
SCN
-------------
1352901
SQL> select count(1) from zero as of scn 1352850;
select count(1) from zero as of scn 1352850
*
ERROR 位于第 1 行:
ORA-01466: 无法读数据 - 表定义已更改
SQL>
如果修改一下表结构呢?
SQL> alter table TEST rename column COL to COL1;
表已更改。
SQL> alter table TEST add col2 number;
表已更改。
SQL> update test set col2 = col1;
已更新9行。
SQL> commit;
提交完成。
SQL> select dbms_flashback.get_system_change_number scn from dual;
SCN
-------------
1352972
SQL> select * from test as of scn 1352965;
select * from test as of scn 1352965
*
ERROR 位于第 1 行:
ORA-01466: 无法读数据 - 表定义已更改
SQL>
改了表结构也无法恢复被删除的数据。
9i的闪回功能还是少一些。有机会再实践一下10g的闪回。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/79499/viewspace-440/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/79499/viewspace-440/