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中记录下来--------
为什么?

解决方案 »

  1.   

    1.13-DEC-10  19593809  13-DEC-10  NULL SYS BEGIN  NULL NULL NULL
    2.13-DEC-10  19593809  13-DEC-10  JOB$ SYS   AAAADtAABAAAAZ6AAE update "SYS"."JOB$" set "THIS_DATE" = NULL where...很多数据例如第一条 就很多值是NULL
    同一个用户SYS,有些NULL,有些数据就能被保存.项目是半路接手的...
      

  2.   

    我启动事务的时候我也可以什么都不做啊,这个时候也应该有记录。
    比如说我直接做了commit操作,所以他的表名,表拥有者和rowid都没空。有些数据没保存,你可以根据rowid去flashback_transction_query表里去查询下,应该都会有的
    不过撤销表空间的大小也是有限的,如果数据已经满了的话,他会覆盖掉时间存储在表空间里大于undo_retention的数据。可能这就是你丢失的数据了。
      

  3.   


    --如果你做的那些更新操作,如果没有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--记录条数已经改变
      

  4.   

    十分感谢。我们系统确实没有自动commit。只是简单查询删除修改。