首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >灾难恢复后,Oracle序列会发生什么情况?

灾难恢复后,Oracle序列会发生什么情况?
EN

Stack Overflow用户
提问于 2008-12-17 07:47:27
回答 2查看 1.9K关注 0票数 4

假设一个Oracle实例需要在灾难后恢复。是将序列重置为初始状态,还是最后保存的状态,还是保留缓存值?

非常感谢。:-)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-12-17 13:38:33

序列值存储在SYSTEM.SEQ$ (我认为)表中,并在内存中维护要使用的下一个值的缓存,缓存的大小取决于序列的缓存值。

当缓存耗尽时,SEQ$表被更新为一个新值(以不一致的方式--即。而不应用用户会话的transacton控件),并且从存储器中读取接下来的100个值(如果为CACHE=100)。

假设您正在使用一个缓存大小为20的序列,当您从该序列中选择一个特定值时,例如1400,SEQ$表会更新为值1420。即使您回滚事务,SEQ$仍然具有该值,直到使用了接下来的20个序列值,此时SEQ$被更新为1440。如果您刚刚使用了值1423,并且发生了实例崩溃,那么当系统重新启动时,从序列中读取的下一个值将是1440。

因此,是的,序列的完整性将被保留,数字将不会被“重新发布”。请注意,这同样适用于正常关机--当您重新启动时,您将在上面的示例中获得新值1440。因此,在实践中不能保证序列是无间隙的(还因为使用一个值,然后回滚不会将该值恢复到缓存中)。

票数 7
EN

Stack Overflow用户

发布于 2008-12-17 08:40:22

并不是说我对此有任何经验,但我非常假设恢复到一致的系统更改编号状态也会使序列返回到上次保存的状态。任何其他的东西在恢复方面都是相当无用的。

至于缓存值,即使实例按顺序关闭(*),这些值也会丢失(*):实例在内存(SGA)中缓存大量序列值,而不是每次都去数据库。实例保留的未使用的序列值可能会“消失”,从而在序列中留下空白。

(*) 8i文档提到这可能发生在并行实例(RAC)中,在这种情况下,序列可能甚至不是严格的升序(但仍然是唯一的),10g文档说它发生在实例失败的情况下。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/373914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档