Spa*_*ags 2 sql caching auto-increment oracle-apex
我在APEX中创建了一个表,其中PK由SQL序列递增:
CREATE SEQUENCE seq_increment
MINVALUE 1
START WITH 880
INCREMENT BY 1
CACHE 10
Run Code Online (Sandbox Code Playgroud)
这似乎完美无缺.问题在于,有时候,通常当我早上上班并运行进入新行的过程时,它会跳过一堆数字.我只关心,因为这些数字被用作我公司的文件ID,当这个工具上线时,丢失/跳过数字块是不可接受的.
它确实似乎跳到下一个'10'数字.即昨天我的最后一次测试分配了883,今天早上它将890指定为下一个数字.查看我创建序列的代码,我注意到我已将其设置为缓存10个值,以便更快地处理.是否有可能这个缓存被转储过夜并且它正在拉890,因为它在缓存中有880-889而且它已被转储?
还有其他潜在的原因和解决方案吗?
序列不会也不会产生无间隙值.所以你希望偶尔会跳过这些数字.当你使用序列时,这是完全正常的.
正如您所推测的那样,最有可能的情况是,当未使用APEX应用程序时,序列缓存会在一夜之间从共享池中老化.您可以通过声明序列NOCACHE来减少间隙的频率,但这会降低性能并且不会消除间隙,这会使它们不那么频繁.
Oracle序列永远不会保证是连续的.如果您需要一组绝对连续的值,则需要实现自定义解决方案.
赔率CACHE 10就是这种情况下你输了数字的原因.缓存值是存储在内存中以供将来使用的序列值的数量.重新启动将清除缓存并导致检索10个新值.类似地,如果序列的使用时间不够长,则可以从共享池中刷新当前值集,还可以检索一组新值.
在您的实例中显然不是这种情况,但由于回滚,序列号也可能丢失.涉及一个或多个序列的回滚事务丢弃序列值.
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |