数据库装的是11GR2。运行闪回版本查询select billno, versions_XID from billcelldtl12 versions between scn minvalue and maxvalue  order by versions_xid; 报ORA-08186  
  同样的语句在测试库就不会有问题。求解

解决方案 »

  1.   

    -- 打开相应表的行迁移允许应该就可以了:
    alter table billcelldtl12 enable row movement;
     
      

  2.   

    不行的。查询flashback_transaction_query 里面的commit_timestamp里的时间  然后通过这个时间戳 用between timestamp就可以。为什么 ?我查询出里面的时间好像总是慢了一天 。是不是有些没有进入undo tablespace?
      

  3.   


    看错误提示:[oracle@localhost ~]$ oerr ora 08186
    08186, 00000, "invalid timestamp specified"
    // *Cause: as stated above
    // *Action: enter a valid timestamp
    scn和timestamp不是一一对应的。SMON_SCN_TIME是SCN和timestamp的映射表,也是flashback 时间的限制。例如,SCN:339988,339989分别匹配2009-05-30 13:52:00和2009-05-30 13:57:00,则当你通过as of timestamp查询2009-05-30 13:52:00或者2009:05-30 13:56:59这段时间点内的任何时间,oracle都会将其匹配为SCN:339988到undo表空间中查找,也就是说在这个时间内,不管你指定的时间点是什么,查询返回的都将是2009-05-30 13:52:00这个时刻对应的SCN的数据。
    16:31:22 hr@ORCL (^ω^) select scn,to_char(time_dp,'yyyy/mm/dd hh24:mi:ss') from sys.smon_scn_time;  
      
           SCN TO_CHAR(TIME_DP,'YYYY/MM/DDHH24:MI:SS'  
    ---------- --------------------------------------   
       3361371 2012/09/03 18:23:53  
       3361948 2012/09/03 18:33:52  
       3362176 2012/09/03 18:38:53  
       3362674 2012/09/03 18:48:52  
       3363615 2012/09/03 19:03:52  
       3363792 2012/09/03 19:08:53  
       3364474 2012/09/03 19:18:43  
       3364715 2012/09/03 19:23:47  
       3365034 2012/09/03 19:28:48  
       3365400 2012/09/03 19:38:45  
    把commit_timestamp用timestamp_to_scn转换为scn试试