影響flashback table的操作!

warehouse發表於2009-05-31
rt[@more@]

14:32:24 SQL> create table tt(id int) rowdependencies tablespace users;

表已建立。

14:32:57 SQL> insert into tt values(1);

已建立 1 行。

14:33:12 SQL> insert into tt values(2);

已建立 1 行。

14:33:14 SQL> insert into tt values(3);

已建立 1 行。

14:33:16 SQL> commit;

提交完成。

14:33:18 SQL> select id ,ora_rowscn from tt;

ID ORA_ROWSCN
---------- ----------
1 1739405
2 1739405
3 1739405

14:33:32 SQL> update tt set id=100;

已更新3行。
14:33:40 SQL> commit;

提交完成。

14:33:42 SQL> select id ,ora_rowscn from tt;

ID ORA_ROWSCN
---------- ----------
100 1739414
100 1739414
100 1739414

14:33:44 SQL> flashback table tt to scn 1739405;
flashback table tt to scn 1739405
*
第 1 行出現錯誤:
ORA-08189: 因為未啟用行移動功能, 不能閃回表


14:34:12 SQL> select id ,ora_rowscn,rowid from tt;

ID ORA_ROWSCN ROWID
---------- ---------- ------------------
100 1739414 AAACi2AAEAAAAAcAAA
100 1739414 AAACi2AAEAAAAAcAAB
100 1739414 AAACi2AAEAAAAAcAAC

14:34:24 SQL> select row_movement,table_name from user_tables;

ROW_MOVE TABLE_NAME
-------- ------------------------------
DISABLED TT

14:34:43 SQL> alter table tt enable row movement;

表已更改。

14:35:38 SQL> select row_movement,table_name from user_tables;

ROW_MOVE TABLE_NAME
-------- ------------------------------
ENABLED TT

14:35:41 SQL> flashback table tt to scn 1739405;

閃回完成。

14:35:46 SQL> select id ,ora_rowscn,rowid from tt;

ID ORA_ROWSCN ROWID
---------- ---------- ------------------
1 1739478 AAACi2AAEAAAAAcAAD
2 1739478 AAACi2AAEAAAAAcAAE
3 1739478 AAACi2AAEAAAAAcAAF

14:35:58 SQL> flashback table tt to scn 1739405;

閃回完成。

14:41:01 SQL> select id ,ora_rowscn,rowid from tt;

ID ORA_ROWSCN ROWID
---------- ---------- ------------------
1 1739596 AAACi2AAEAAAAAcAAA
2 1739596 AAACi2AAEAAAAAcAAB
3 1739596 AAACi2AAEAAAAAcAAC
--flashback table之後rowid發生了變化
14:41:02 SQL> alter table tt add name varchar2(10) default 'a';

表已更改。

14:41:29 SQL> desc tt
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------

ID NUMBER(38)
NAME VARCHAR2(10)

14:41:32 SQL> select * from tt;

ID NAME
---------- ----------
1 a
2 a
3 a
--給表增加欄位不影響flashback
14:41:35 SQL> flashback table tt to scn 1739405;

閃回完成。

14:41:46 SQL> select id ,ora_rowscn,rowid from tt;

ID ORA_ROWSCN ROWID
---------- ---------- ------------------
1 1739629 AAACi2AAEAAAAAcAAD
2 1739629 AAACi2AAEAAAAAcAAE
3 1739629 AAACi2AAEAAAAAcAAF

14:41:47 SQL> alter table tt drop column name;

表已更改。

14:42:13 SQL> select id ,ora_rowscn,rowid from tt;

ID ORA_ROWSCN ROWID
---------- ---------- ------------------
1 1739629 AAACi2AAEAAAAAcAAD
2 1739629 AAACi2AAEAAAAAcAAE
3 1739629 AAACi2AAEAAAAAcAAF

14:42:16 SQL> flashback table tt to scn 1739405;
flashback table tt to scn 1739405
*
第 1 行出現錯誤:
ORA-01466: 無法讀取資料 - 表定義已更改
--增加columns不影響flashback,再次drop column之後影響flashback
14:42:18 SQL> desc tt
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------

ID NUMBER(38)
14:48:20 SQL> desc tt
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------

ID NUMBER

14:50:36 SQL> select * from tt;

ID
----------
1
2
3
14:50:55 SQL> alter table tt add name varchar2(10) default 'a';

表已更改。

14:51:06 SQL> select *from tt;

ID NAME
---------- ----------
1 a
2 a
3 a

14:51:09 SQL> select id,name ora_rowscn from tt;

ID ORA_ROWSCN
---------- ----------
1 a
2 a
3 a

14:51:17 SQL> select id,name ,ora_rowscn from tt;

ID NAME ORA_ROWSCN
---------- ---------- ----------
1 a 1739837
2 a 1739837
3 a 1739837
14:51:56 SQL> insert into tt values(4,'b');

已建立 1 行。

14:52:01 SQL> commit;

提交完成。

14:52:02 SQL> select id,name ,ora_rowscn from tt;

ID NAME ORA_ROWSCN
---------- ---------- ----------
4 b 1739915
1 a 1739837
2 a 1739837
3 a 1739837

14:52:04 SQL> flashback table tt to scn 1739837;

閃回完成。

14:52:26 SQL> select id,name ,ora_rowscn from tt;

ID NAME ORA_ROWSCN
---------- ---------- ----------
1 a 1739936
2 a 1739936
3 a 1739936

14:52:29 SQL> insert into tt values(4,'b');

已建立 1 行。

14:52:37 SQL> commit;

提交完成。

14:52:38 SQL> select id,name ,ora_rowscn from tt;

ID NAME ORA_ROWSCN
---------- ---------- ----------
1 a 1739936
2 a 1739936
3 a 1739936
4 b 1739941

14:52:40 SQL> alter table tt modify name varchar2(20);

表已更改。

14:52:55 SQL> select id,name ,ora_rowscn from tt;

ID NAME ORA_ROWSCN
---------- -------------------- ----------
1 a 1739936
2 a 1739936
3 a 1739936
4 b 1739941

14:53:00 SQL> flashback table tt to scn 1739837;
flashback table tt to scn 1739837
*
第 1 行出現錯誤:
ORA-01466: 無法讀取資料 - 表定義已更改


14:53:10 SQL>
--修改column寬度影響flashback table操作

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1022631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章