Oracle闪回,查询过去的数据

时间:2012-11-30 08:47:40

标签: oracle plsql flashback

您知道对过去数据的查询究竟是如何运作的吗?

oracle的版本是10G

使用此查询,我可以恢复一些数据,但有时会查询

 select * 
  from table as of timestamp systimestamp - 1 

检索错误(太旧的快照)。 是否可以增加这项工作的时间并检索大约24小时的数据?谢谢!

2 个答案:

答案 0 :(得分:3)

错误的含义是回滚段失效,因为, 通常,查询花了太长时间。还有其他原因。就像回滚段大小一样。

表格中有多少行? - 你可以从中得到一个想法 选择num_rows  来自all_tables table_name ='MYTABLE_NAME_GOES_HERE';

如果有很多行,您可能需要查看添加某种索引以支持您的查询。因为全表扫描需要太长时间。如果没有,那么这是一个DBA问题。也许添加索引也是您商店中的DBA问题。

如果这几天前运行良好,并且最近开始发生,你可能只是通过了回滚的门槛。

答案 1 :(得分:3)

这里的关键问题是还原段的大小调整以及撤消保留和保证。

它的长短之处在于,您需要使用撤消表空间大小来保存可以在闪回的最大时间段内进行的所有更改,并且您希望将撤消保留参数设置为那个价值。如果对您的应用程序保留撤消权限至关重要,则在撤消表空间上设置撤消保证。

有用的文档:http://docs.oracle.com/cd/B12037_01/server.101/b10739/undo.htm#i1008577

请注意,对于批量数据,闪回的性能相当差,因为需要在表空间中找到所需的撤消块。 11g具有更好的高性能闪回选项。