昨天,听见一个网友说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: 无法读取数据 - 表定义已更改
提示表结构已经更改,无法读取数据。
结论:表结构改变之后的数据是无法被闪回的
本文通过一个实际的SQL操作过程,展示了在修改表结构后尝试使用闪回查询会遇到的问题。首先创建并填充了一个临时表,接着进行了删除和更新操作,然后改变了表的列名。在尝试闪回至修改前的状态时,由于表结构的变化,导致闪回查询失败,从而证实了表结构改变后无法进行闪回的事实。
418

被折叠的 条评论
为什么被折叠?



