开博了。其实之前有的,只是不在pub上,最近实在忍受不了msn共享空间了。

Oracle 9i闪回测试。

上一篇 / 下一篇  2007-12-12 12:10:23 / 个人分类:读书笔记

最近读了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的闪回。



TAG:

蚊子窝 引用 删除 foxmile   /   2008-01-17 13:14:32
原帖由qdzhaojianmin于2008-01-05 10:50:23发表
我看你也是在猜测应该恢复到scn数,如何才能准确的知道应该恢复到那个scn?

对于这块其实我没弄明白。所以很郁闷的说
引用 删除 qdzhaojianmin   /   2008-01-05 10:50:23
我看你也是在猜测应该恢复到scn数,如何才能准确的知道应该恢复到那个scn?
刘亚的空间 引用 删除 liuya1985liuya   /   2007-12-13 10:07:41
踩........
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-12  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 5452
  • 日志数: 147
  • 图片数: 1
  • 建立时间: 2007-12-10
  • 更新时间: 2008-09-12

RSS订阅

Open Toolbar