加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – Oracle序列缓存

发布时间:2020-12-31 08:28:39 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试在Oracle数据库中实现一个序列,以充当表的代理键创建者.出于性能原因,我希望缓存此序列.我已经读过使用缓存序列时存在潜在的缺陷,因为回滚和实例失败会导致错过值. 这让我思考.假设我创建了一个缓存大小为100的序列.然后我将50条记录插入到我的

我正在尝试在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.

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读