假设Oracle实例具有灾难之后被回收。不要序列得到恢复到初始状态,或在上次保存的状态,或者缓存值保留吗?

非常感谢你。 : - )

有帮助吗?

解决方案

在sequnce值被存储在所述SYSTEM.SEQ $(我认为)表,以及一个高速缓存保持在下一值的存储器被使用,与高速缓冲存储器的依赖于该序列中的CACHE值的大小

当高速缓存排出的SEQ $表更新为一个新的值(以非一致的方式 - 即,没有用户会话的transacton控制施加)和下一个说100倍的值(如果CACHE = 100)是从存储器中读取。

让我们假设你正在使用与20缓存大小次序当您选择的顺序一定值时,说1400年,在SEQ $表更新为即使你回滚您的交易1420的值在SEQ $仍然有值,直到已被用于在未来20个序列值,此时如果你已经那么就使用值1423和发生实例崩溃,则当系统重新启动下一个值序列$得到更新至1440从sequnce读取将是1440。

所以,是该序列的完整性将被保留和号码不会被“补发”。请注意,这同样适用于正常关机 - 当你重新启动,你会在上面的例子中得到的1440新值。序列不保证是在实践中无间隙这个原因(也因为使用一个值,然后回退不还原该值到高速缓存)。

其他提示

这并不是说我有任何这方面的经验,但我很假设恢复到一致的系统改变号状态也将序列返回到上次保存的状态。还有什么是在恢复方面相当无用的。

至于缓存值,那些是(可)丢失即使当例如以有序的方式(*)关闭起伏:实例在内存中缓存(SGA)的数的序列值的,而不是每次都将数据库。未使用的值序列,该实例已保留可以“消失”,让你与序列中的间隙。

(*)8i的文档中提到,这可以用并行实例(RAC),在这种情况下,序列可能甚至不严格升序(但仍然是唯一的)发生,10G文档说,它发生在一个实例故障的情况下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top