数据库 – Oracle序列缓存

前端之家收集整理的这篇文章主要介绍了数据库 – Oracle序列缓存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在Oracle数据库中实现一个序列,以充当表的代理键创建者.出于性能原因,我希望缓存此序列.我已经读过使用缓存序列时存在潜在的缺陷,因为回滚和实例失败会导致错过值.

这让我思考.假设我创建了一个缓存大小为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.

原文链接:https://www.f2er.com/mssql/80159.html

猜你在找的MsSQL相关文章