更正昨天发的内容

昨天发的文章,其实是不适用于大多数情况的,在这里特别更正一下。

我们昨天说了,如果UNDO的空间足够大,undo_retention的时间足够长,看起来没必要开归档模式呀,其实这个说法在我发完之后我就想到了一种情况,使得这个说法是不成立的。

我们来做一个实验,还是昨天那些例子,只不过稍微变动一下。

我们执行下面的这些语句:

sql> update testlijian set name ='lijian6' where name = 'lijian4';
1 row updated

sql> commit;
Commit complete

sql> 
sql> select versions_xid,name
  2  from testlijian
  3  versions between scn minvalue and maxvalue;
VERSIONS_XID     NAME
---------------- --------------------------------------------------
0700100003730000 lijian6
                 lijian4
                 wangsiqi
                 helloworld

sql> 
sql> select operation,undo_sql
  2  from flashback_transaction_query
  3  where xid = hextoraw('0700100003730000');
OPERATION                        UNDO_sql
-------------------------------- --------------------------------------------------------------------------------
UPDATE                           update "JLLT_DM"."TESTLIJIAN" set "NAME" = 'lijian4' where ROWID = 'AAAW08AAFAAK
BEGIN                            

sql> alter table testlijian enable row movement;
Table altered

sql> select * from testlijian;
NAME
--------------------------------------------------
lijian4
wangsiqi
helloworld

一个步骤没有贴出来,那就是在我update完事之后,我又insert进去一条lijian6进去。
之后我们再用flashback闪回到update操作之前,结果可以看到,lijian6消失了,lijian5变成了lijian4。

这样我们可以完善一下我们的说法:这种操作只适用于数据量更新不频繁的表,如果有一些表数据是实时插入的,那么这种操作就做不得,因为一闪回,数据还是会丢失的。

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...