ITPub博客

Oracle 9i闪回测试。

原创 Linux操作系统 作者:foxmile 时间:2007-12-12 12:10:23 0 删除 编辑

最近读了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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    107
  • 访问量
    196455