当前位置:  开发笔记 > 编程语言 > 正文

灾难恢复后Oracle序列会发生什么?

如何解决《灾难恢复后Oracle序列会发生什么?》经验,为你挑选了1个好方法。

假设在灾难发生后必须恢复Oracle实例.序列是重置为初始状态还是上次保存的状态,还是保留了缓存的值?

非常感谢你.:-)



1> David Aldrid..:

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

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

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

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

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有