【问题标题】:Oracle flashbacks, query for past dataOracle 闪回,查询过去的数据
【发布时间】:2012-11-30 08:47:39
【问题描述】:

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

oracle版本为10G

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

 select * 
  from table as of timestamp systimestamp - 1 

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

【问题讨论】:

  • Oracle 10G,感谢您的评论:) 我也在问题中编辑

标签: oracle plsql flashback


【解决方案1】:

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

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

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

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

【讨论】:

  • 在此类闪回查询的上下文中,该错误表明在所需的闪回时间戳时未保留撤消,而不是查询本身花费了太长时间。请注意,闪回查询并不是高性能。索引不太可能像往常一样有用,因为它们还需要从撤消中重建。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2023-03-28
    • 1970-01-01
    • 2011-11-13
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多