Oracle 10g有flashback_transaction_query这个功能特性,可以使用flashback恢复/回滚之前的操作.可是今天select * from flashback_transaction_query得到103600条记录,有很多是xid=0A34535000/null/null/...的空纪录看了一下表,select distinct table_name from flashback_transaction_query得到106个表名,其中有些是$xx的.--------这个数据库中有400多个表,所有表的操作记录还被log到日志中. 可是有些操作删除更新,没有在flashback_transaction_query中记录下来--------
为什么?
为什么?
2.13-DEC-10 19593809 13-DEC-10 JOB$ SYS AAAADtAABAAAAZ6AAE update "SYS"."JOB$" set "THIS_DATE" = NULL where...很多数据例如第一条 就很多值是NULL
同一个用户SYS,有些NULL,有些数据就能被保存.项目是半路接手的...
比如说我直接做了commit操作,所以他的表名,表拥有者和rowid都没空。有些数据没保存,你可以根据rowid去flashback_transction_query表里去查询下,应该都会有的
不过撤销表空间的大小也是有限的,如果数据已经满了的话,他会覆盖掉时间存储在表空间里大于undo_retention的数据。可能这就是你丢失的数据了。
--如果你做的那些更新操作,如果没有commit的话,flashback_transction_query中是不会记录的,只有你commit后才会插入到里面
--下面是测试过程
--------------------------------------------
select count(1) from flashback_transaction_query where logon_user='TEST'
---------------
count(1)
--------
118--然后我做两次更新操作
update yyq3 set sid = 1;
update yyq3 set sid = 1;--没有commit,这个时候,我再次查询flashback_transaction_query
select count(1) from flashback_transaction_query where logon_user='CASKOKYOTEST'
------------
count(1)
-------
118--仍然是118条记录
---我commit一下
commit--然后再次查询flashback_transction_query
select count(1) from flashback_transaction_query where logon_user='CASKOKYOTEST'
--------------------------------
count(1)
-----
121--记录条数已经改变