oracle - 灾难恢复后 Oracle 序列会发生什么变化?

标签 oracle sequence fallback

假设必须在灾难后恢复 Oracle 实例。序列是否重置为初始状态,或上次保存的状态,或者是否保留缓存值?

非常感谢。 :-)

最佳答案

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

当缓存耗尽时,SEQ$ 表被更新为一个新值(以不一致的方式——即没有应用用户 session 的事务控制),然后从内存中读取接下来的 100 个值(如果 CACHE=100) .

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

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

关于oracle - 灾难恢复后 Oracle 序列会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373914/

相关文章:

java - 如何在java中使用递归反转数字序列

html - CSS 背景图像回退

html - Chrome 更喜欢 jpg 而不是 Webp

sql - 甲骨文11g : XQuery results concatenated in a single SQLXML type

python - 无法访问biopython成对对齐中的各个对齐字符串

距离内的 Oracle 空间搜索

jquery - 使用 :eq 将类添加到所有元素

fallback - 选择 APNG 后备框架

oracle - Docker - 运行 Oracle DB 镜像并执行 init 脚本

c - 无法使用 Oracle 12C 在 Redhat Linux 中重新编译遗留 Pro*C 软件