2

您知道查询过去数据的具体工作原理吗?

oracle的版本是10G

通过这个查询,我可以恢复一些数据,但有时这个查询

 select * 
  from table as of timestamp systimestamp - 1 

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

4

2 回答 2

3

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

总而言之,您需要调整撤消表空间的大小以容纳在您想要闪回的最大期限内可以进行的所有更改,并且您希望将撤消保留参数设置为该值。如果保留撤消对您的应用程序非常重要,则在撤消表空间上设置撤消保证。

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

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

于 2012-11-30T17:17:15.997 回答
3

该错误的意思是回滚段变得无效,因为通常查询花费了太长时间。还有其他原因。就像回滚段大小一样。

表中有多少行?- 你可以从这个 select num_rows from all_tables where table_name='MYTABLE_NAME_GOES_HERE'中得到一个想法;

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

如果这在几天前运行良好,并且最近开始发生,那么您可能刚刚超过了回滚的阈值。

于 2012-11-30T15:09:29.563 回答