您的位置:首页 > 数据库 > Oracle

【转自Oracle ACS--惜总】正常关闭数据库sequence cache不为0 sequence不跳跃

2015-04-20 16:22 232 查看
原文网址: http://www.xifenfei.com/5831.html



发表于 2015
年 04 月 05 日 由 惜分飞

联系:手机(13429648788) QQ(107644445)

链接:http://www.xifenfei.com/5831.html

标题:正常关闭数据库sequence
cache不为0 sequence不跳跃

作者:惜分飞©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]

在Oracle中sequence使用很频繁,而大部分使用都配合了cache一起使用,那在sequence+cache一起使用的过程中,如果数据库正常关闭sequence.nextval如果变化,如果数据库异常关闭sequence.nextval又如何变化?这里通过试验进行了证明,结论为:在有cache的sequence中,正常关闭数据库sequence不会出现跳跃,异常关闭数据库很可能导致sequence出现跳跃

创建sequence测试


这里创建了一个名为SEQ_XIFENFEI的sequence,并且nextval已经查询到3,而且cache值设置为100,object_id为87549.

正常关闭数据库测试sequence.nextval变化

正常关闭数据库启动后,sequence.nextval依然在上次基础之上增加,并为出现跳跃现象.

异常关闭数据库测试sequence.nextval变化

异常关闭数据库启动后,sequence.nextvla发生跳跃从本该5直接跳跃到了104.

跟踪数据库正常关闭过程

再次证明了正常关闭数据库后,sequence.nextval未发生跳跃.

分析trace文件

这里我们找出来了为什么数据库正常关闭sequence.nextval在有cache的情况下,未发生跳跃:因为在数据库正常关闭的情况下,会触发一个update seq$的操作,把当前的sequence.nextval的值更新到seq$.highwater中,从而使得sequence在有cache的情况下,数据库正常关闭未出现nextval跳跃(currval也同样不跳跃);而在数据库异常关闭之时,数据库不能及时将sequence.nextval更新到eq$.highwater从而引起sequence
cache中的值丢失,从而可能出现了sequence使用cache导致跳跃的情况


关于另外一篇关于sequence cache减小update seq$频率的测试,请见:关于oracle
sequence一些小测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: