昨天,听见一个网友说update一张表数据,没有加条件,表结构也改变并且已经提交,问如何闪回。我的回答的表结构改变之后就不能闪回。而有人对此存在疑问,在此做个测试。
1. 创建临时表,对表插入数据
---------------------------创建一张临时表 tmp_liuhc_1----------------------------------
SQL> CREATE TABLE TMP_LIUHC_1 (ID NUMBER,NAME VARCHAR2(10)) ;
Table created
---------------------------对 tmp_liuhc_1插入两条数据----------------------------------
SQL> INSERT INTO TMP_LIUHC_1 VALUES(1,'SDK');
1 row inserted
SQL> INSERT INTO TMP_LIUHC_1 VALUES (1,'SDK2');
1 row inserted
---------------------------查看当前时间---------------------------------------------------------
SQL> select to_char(sysdate,'YYYYMMDD HH24:MI:SS') "sysdate" from DUAL;
sysdate
-----------------
20111026 11:01:09
2. 一段时间之后,对表进行修改,并查看当前时间
SQL> DELETE FROM TMP_LIUHC_1 WHERE NAME='SDK';
1 row deleted
SQL> UPDATE TMP_LIUHC_1 SET NAME='SDK3' WHERE NAME='SDK2';
1 row updated
SQL> ALTER TABLE TMP_LIUHC_1 RENAME COLUMN NAME TO MY_NAME;
Table altered
SQL> select to_char(sysdate,'YYYYMMDD HH24:MI:SS') "sysdate" from DUAL;
sysdate
-----------------
20111026 11:07:42
3. 此时,对表tmp_lhc_1进行闪回查询时就会报错。
SQL> SELECT * FROM TMP_LIUHC_1 AS OF TIMESTAMP TO_TIMESTAMP('2011-10-26 11:01:09','YYYY-MM-DD HH24:MI:SS') ;
SELECT * FROM TMP_LIUHC_1 AS OF TIMESTAMP TO_TIMESTAMP('2011-10-26 11:01:09','YYYY-MM-DD HH24:MI:SS')
ORA-01466: 无法读取数据 - 表定义已更改
提示表结构已经更改,无法读取数据。
结论:表结构改变之后的数据是无法被闪回的