Oracle 9i閃回測試。

foxmile發表於2007-12-12

最近讀了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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章