亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

分享ORACLE SEQUENCE跳號總結

2024-08-29 14:00:30
字體:
來源:轉載
供稿:網友

在ORACLE數據庫中,序列(SEQUENCE)是使用非常頻繁的一個數據庫對象,但是有時候會遇到序列(SEQUECNE)跳號(skip sequence numbers)的情形,那么在哪些情形下會遇到跳號呢? 

事務回滾引起的跳號 

不管序列有沒有CACHE、事務回滾這種情況下,都會引起序列的跳號。如下實驗所示: 

SQL> create sequence my_sequence 2 start with 1 3 increment by 1 4 maxvalue 99999 5 nocache;Sequence created.SQL> create table test(id number(10), name varchar2(32));Table created.SQL> insert into test 2 select my_sequence.nextval , 'kerry' from dual;1 row created.SQL> SQL> rollback;Rollback complete.SQL> select my_sequence.nextval from dual; NEXTVAL----------  3SQL>

oracle,sequence,跳號

并發訪問序列引起的跳號 

并發訪問序列引起的跳號,其實不算真正的跳號,而只是邏輯跳號,只是序列值被其它并發會話使用了。我們來構造一起并發訪問序列引起的跳號,我們開啟兩個會話窗口,循環獲取序列的值,模擬并發出現的場景。 

會話窗口A: 

exec dbms_lock.sleep(2); --延遲2秒執行,根據你實驗情況調整/begin for i in 1 .. 2000 loop dbms_output.put_line(my_sequence.nextval); end loop;end;/

會話窗口B: 

spool test.txt;begin waitfor delay '00:00:10'; for i in 1 .. 2000 loop dbms_output.put_line(my_sequence.nextval); end loop;end;/spool off; 

 如下所示,我構造的實驗當中,你會看到序列的跳號情況。

oracle,sequence,跳號

FLUSH SHARED_POOL會導致CACHE的序列跳號 

實驗測試如下所示(序列的CACHE值必須大于0),當然正常情況下,很難遇到這種情況。 

SQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17004SQL> alter sequence test.my_sequence cache 40;Sequence altered.SQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17005SQL> alter system flush share_pool;alter system flush share_pool*ERROR at line 1:ORA-02000: missing SHARED_POOL/BUFFER_CACHE/GLOBAL CONTEXT keywordSQL> alter system flush shared_pool;System altered.SQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17045

oracle,sequence,跳號

數據庫實例異常關閉導致跳號

如下實驗所示,當數據庫使用shutdown abort命令關閉后,重新啟動實例,序列緩存在shared pool里面沒有用過的值都沒有了。一下子從17045跳到17085 

SQL> select test.my_sequence.currval from dual; CURRVAL---------- 17045SQL> select object_id from dba_objects where object_name=upper('my_sequence'); OBJECT_ID---------- 97760SQL> select increment$, minvalue, maxvalue,highwater, cache 2 from seq$ where obj#=97760;INCREMENT$ MINVALUE MAXVALUE HIGHWATER CACHE---------- ---------- ---------- ---------- ----------  1  1 99999 17085  40SQL> shutdown abort;ORACLE instance shut down.SQL> startup;ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instanceORACLE instance started.Total System Global Area 1620115456 bytesFixed Size   2213816 bytesVariable Size  1258293320 bytesDatabase Buffers  352321536 bytesRedo Buffers  7286784 bytesDatabase mounted.Database opened.SQL> select test.my_sequence.currval from dual;select test.my_sequence.currval from dual  *ERROR at line 1:ORA-08002: sequence MY_SEQUENCE.CURRVAL is not yet defined in this sessionSQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17085SQL> 

另外,我們也來看看正常關閉數據庫的情況下,序列會不會出現跳號,我們采用10046跟蹤事件,看看正常數據庫關閉情況下,會對序列做一些啥操作 

SQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17085SQL> alter session set events '10046 trace name context forever, level 4';Session altered.SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startupORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instanceORACLE instance started.Total System Global Area 1620115456 bytesFixed Size   2213816 bytesVariable Size  1258293320 bytesDatabase Buffers  352321536 bytesRedo Buffers  7286784 bytesDatabase mounted.Database opened.SQL> select test.my_sequence.currval from dual;select test.my_sequence.currval from dual  *ERROR at line 1:ORA-08002: sequence MY_SEQUENCE.CURRVAL is not yet defined in this sessionSQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17086SQL> 

Trace文件中有更新seq$數據字典表,如果你看過我這篇文章ORACLE中seq$表更新頻繁的分析,基本上就知道其實seq$中維護的是序列的一些信息。通過跟蹤文件,我們知道在數據庫正常關閉的情況下,會觸發一個update seq$的操作,把當前的sequence.nextval的值更新到seq$.highwater中,從而使得sequence在有cache的情況下,數據庫正常關閉未出現nextval跳躍(currval也同樣不跳躍);而在數據庫異常關閉之時,數據庫不能及時將sequence.nextval更新到eq$.highwater從而引起sequence cache中的值丟失,從而可能出現了sequence使用cache導致跳躍的情況 

=====================PARSING IN CURSOR #25 len=129 dep=1 uid=0 oct=6 lid=0 tim=1504236336294194 hv=2635489469 ad='bf780410' sqlid='4m7m0t6fjcs5x'update seq$ set increment$=:2,minvalue=:3,maxvalue=:4,cycle#=:5,order$=:6,cache=:7,highwater=:8,audit$=:9,flags=:10 where obj#=:1END OF STMTPARSE #25:c=0,e=21,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,plh=1935744642,tim=1504236336294194BINDS #25: Bind#0 oacdty=02 mxl=22(02) mxlc=00 mal=00 scl=00 pre=00 oacflg=18 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=bf45ca48 bln=24 avl=02 flg=09 value=1 Bind#1 oacdty=02 mxl=22(02) mxlc=00 mal=00 scl=00 pre=00 oacflg=18 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=bf45ca5a bln=24 avl=02 flg=09:/17086                      Bind#3 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=2b7d80f57350 bln=24 avl=01 flg=05 value=0 Bind#4 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=2b7d80f57320 bln=24 avl=01 flg=05 value=0 Bind#5 oacdty=02 mxl=22(02) mxlc=00 mal=00 scl=00 pre=00 oacflg=18 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=bf47b85e bln=24 avl=02 flg=09 value=40 Bind#6 oacdty=02 mxl=22(04) mxlc=00 mal=00 scl=00 pre=00 oacflg=18 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=bf47b870 bln=24 avl=04 flg=09 value=17086 Bind#7 oacdty=01 mxl=32(32) mxlc=00 mal=00 scl=00 pre=00 oacflg=18 fl2=0001 frm=01 csi=873 siz=32 off=0 kxsbbbfp=bf47b882 bln=32 avl=32 flg=09 value="--------------------------------" Bind#8 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=2b7d80f572f0 bln=24 avl=02 flg=05 value=8 Bind#9 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0 kxsbbbfp=2b7d80f57380 bln=22 avl=04 flg=05 value=97760EXEC #9:c=999,e=709,p=0,cr=1,cu=2,mis=0,r=1,dep=1,og=4,plh=1935744642,tim=1504236336297033CLOSE #9:c=0,e=2,dep=1,type=3,tim=1504236336297058mealink上提到了使用dbms_shared_pool.keep將對象在鎖定在shared pool 中,永遠不釋放。這樣可以防止FLUSH SHARED POOL導致序列跳號,但是這個無法避免數據庫異常關閉或CRASH引起的跳號SQL> select test.my_sequence.currval from dual; CURRVAL---------- 17086SQL> exec dbms_shared_pool.keep('test.my_sequence','q');PL/SQL procedure successfully completed.SQL> alter system flush shared_pool;System altered.SQL> select test.my_sequence.currval from dual; CURRVAL---------- 17086SQL> shutdown abortORACLE instance shut down.SQL> startupORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instanceORACLE instance started.Total System Global Area 1620115456 bytesFixed Size   2213816 bytesVariable Size  1258293320 bytesDatabase Buffers  352321536 bytesRedo Buffers  7286784 bytesDatabase mounted.Database opened.SQL> select test.my_sequence.nextval from dual; NEXTVAL---------- 17126

oracle,sequence,跳號

其實如果業務允許,單號出現跳號也無所謂的情形最好,如果碰到業務要求絕對不能出現單號出現跳號的情況,那么就不能使用序列號了,就必須使用其它替代方案,此處不做展開說明!

總結

以上所述是小編給大家介紹的分享ORACLE SEQUENCE跳號總結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女www午夜| 亚洲直播在线一区| 国产精品亚洲自拍| 久久亚洲精品中文字幕冲田杏梨| 欧美精品免费在线观看| 97热在线精品视频在线观看| 国产精品福利网| 亚洲欧美中文另类| 欧美性猛交丰臀xxxxx网站| 欧洲美女免费图片一区| 亚洲免费视频在线观看| 久久久999精品免费| 国产拍精品一二三| 国产成人午夜视频网址| 欧美色另类天堂2015| 永久555www成人免费| 97久久伊人激情网| 亚洲香蕉伊综合在人在线视看| 午夜精品久久久久久久久久久久久| 亚洲第一精品夜夜躁人人爽| 中文字幕日韩欧美精品在线观看| 欧美大成色www永久网站婷| 亚洲精品理论电影| 国产精品永久在线| 精品国产老师黑色丝袜高跟鞋| 欧美在线一级视频| 国产日韩在线视频| 成人免费淫片视频软件| 国产成人jvid在线播放| 欧美主播福利视频| 国产一区二区免费| 国产精品扒开腿做爽爽爽男男| 精品久久久在线观看| 欧美视频免费在线观看| 精品偷拍各种wc美女嘘嘘| 亚洲免费影视第一页| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲女在线观看| 日韩欧美国产中文字幕| 91日本在线视频| 亚洲аv电影天堂网| 成人免费视频97| 色综合导航网站| 日韩经典一区二区三区| 欧美黑人狂野猛交老妇| 精品久久久久久国产| 国产精品日本精品| 日韩在线免费av| 国产一区二中文字幕在线看| 亚洲变态欧美另类捆绑| 第一福利永久视频精品| 最新国产成人av网站网址麻豆| 久久99精品久久久久久琪琪| 成人久久18免费网站图片| 亚洲国产精品大全| 国产网站欧美日韩免费精品在线观看| 成人写真福利网| 国产精品吊钟奶在线| 狠狠综合久久av一区二区小说| 欧美精品手机在线| 国产精品久久久久久一区二区| 亚洲人成电影在线| 日韩中文字幕精品| 日本高清+成人网在线观看| 久久精品成人一区二区三区| 亚洲一区二区三区在线免费观看| 国产精品精品视频一区二区三区| 97在线精品国自产拍中文| 久久男人资源视频| 神马久久久久久| 97视频免费在线看| 亚洲性av网站| 欧美插天视频在线播放| 亚洲精品一区在线观看香蕉| 亚洲欧美在线免费| 全色精品综合影院| 欧美福利视频网站| 亚洲电影免费观看高清完整版在线观看| 在线观看国产成人av片| 国产精品自产拍在线观看中文| 亚洲视频999| 亚洲第一免费网站| 亚洲国产精品久久久久秋霞蜜臀| 麻豆国产精品va在线观看不卡| 日韩av在线不卡| 深夜福利91大全| 欧美日韩在线一区| 欧美日韩亚洲精品一区二区三区| 亚洲欧洲国产一区| 欧美成人免费全部| 国产成人精品a视频一区www| 久久精品福利视频| 国产精品高清在线观看| 夜夜躁日日躁狠狠久久88av| 国产成人在线一区| 久久精品国产一区二区电影| 精品久久久久久久久久久久久久| 色综合天天狠天天透天天伊人| 国产一区二区丝袜高跟鞋图片| 亚洲日本成人女熟在线观看| 久久国产精品久久精品| 久久久在线免费观看| 国产精品久久久久久久久借妻| 成人有码视频在线播放| 日韩av电影在线网| 久久精品国产69国产精品亚洲| 成人欧美一区二区三区在线湿哒哒| 福利精品视频在线| 亚洲激情视频网| 日韩欧美成人网| 97香蕉久久超级碰碰高清版| 日本高清久久天堂| 久热精品视频在线免费观看| 国产精品久久久久久久久久久不卡| 欧美日韩午夜剧场| 91av在线精品| 国产精品扒开腿做爽爽爽的视频| 激情成人中文字幕| 亚洲第一网中文字幕| 美女av一区二区三区| 成人福利视频在线观看| 中文字幕久久久av一区| 国内久久久精品| www.欧美精品一二三区| 欧美激情网站在线观看| 日韩欧美精品网址| www日韩欧美| 国产精品偷伦免费视频观看的| 91网站免费观看| 亚洲丝袜在线视频| 国产精品久久久久久久电影| 欧美午夜片欧美片在线观看| 国产一区二区丝袜| 日韩高清人体午夜| 2019中文字幕在线| 欧美成人四级hd版| 久久精品99无色码中文字幕| 国产精品老女人视频| 亚洲性av网站| 亚洲精品国产欧美| 久久久久久久一| 97视频在线观看亚洲| 久久久国产在线视频| 久久这里有精品| 亚洲精品99久久久久中文字幕| 欧美另类交人妖| 欧美日韩免费网站| 97在线视频国产| 欧美激情视频免费观看| 欧美激情2020午夜免费观看| 中文国产成人精品久久一| 亚洲剧情一区二区| 欧美国产视频一区二区| 在线播放国产精品| 久久久精品美女| 欧美午夜丰满在线18影院| 日本人成精品视频在线| 久久在线精品视频| 亚洲视频一区二区| 岛国av一区二区在线在线观看| 亚洲天堂精品在线| 日韩国产高清视频在线| 日韩成人小视频| 亚洲精品乱码久久久久久按摩观|