首页 > 应用开发 > IT综合 > 影响flashback table的操作!
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博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1022631/ ,如需转载,请注明出处,否则将追究法律责任。