Mel*_*vin 8 database oracle oracle10g
我正在尝试在Oracle数据库中实现一个序列,以充当表的代理键创建者.出于性能原因,我希望缓存此序列.我已经读过使用缓存序列时存在潜在的缺陷,因为回滚和实例失败会导致错过值.
这让我思考.假设我创建了一个缓存大小为100的序列.然后我将50条记录插入到我的表中,序列值作为主要代理键.提交后,序列的当前值尚未写入磁盘.假设我此时有一个实例失败.当数据库恢复时,我理解当前序列值将重置为写入磁盘的最后一个值.
如果我要尝试在我的表中插入另外50条记录,我现在是否会破坏主键约束,因为序列已从磁盘重置为其最后一个状态,主键现在正在被重用?如果是这种情况,我该如何防止这种情况?
Pet*_*ang 15
不,情况并非如此.
您的序列将继续101
,之间的值,50
并且100
将丢失.
禁用序列缓存的唯一原因是尝试避免序列中的间隙,这与大多数主键无关.
使用缓存创建序列的缺点是,如果发生系统故障,所有未使用的缓存序列值将"丢失".这导致分配的序列值中的"间隙".当系统重新启动时,Oracle将从序列中停止的位置缓存新数字,忽略所谓的"丢失"序列值.
归档时间: |
|
查看次数: |
10074 次 |
最近记录: |