这让我思考.假设我创建了一个缓存大小为100的序列.然后我将50条记录插入到我的表中,序列值作为主要代理键.提交后,序列的当前值尚未写入磁盘.假设此时我有一个实例失败.当数据库恢复时,我理解当前序列值将被重置为写入磁盘的最后一个值.
如果我要尝试在我的表中插入另外50条记录,我现在是否会破坏主键约束,因为序列已从磁盘重置为其最后一个状态,主键现在正在被重用?如果是这种情况,我该如何防止这种情况?
解决方法
您的序列将在101处继续,将丢失50到100之间的值.
禁用序列缓存的唯一原因是尝试避免序列中的间隙,这与大多数主键无关.
您可能对this article感兴趣,其中说明了这一点
The downside of creating a sequence with a cache is that if a system failure occurs,all cached sequence values that have not be used,will be “lost”. This results in a “gap” in the assigned sequence values. When the system comes back up,Oracle will cache new numbers from where it left off in the sequence,ignoring the so called “lost” sequence values.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。