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

首頁 > 數據庫 > Oracle > 正文

分享ORACLE SEQUENCE跳號總結

2020-07-26 14:04:11
字體:
來源:轉載
供稿:網友

在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>

并發訪問序列引起的跳號 

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

會話窗口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; 

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

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

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

如下實驗所示,當數據庫使用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跳號總結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文国产成人精品| 久久久精品视频在线观看| 日韩成人在线免费观看| 中文字幕日韩免费视频| 久久久噜噜噜久久中文字免| 91精品国产亚洲| 亚洲精品自拍第一页| 91亚洲一区精品| 精品国产福利视频| 88xx成人精品| 欧美精品性视频| 国产精品久久久久久久久久尿| 国产女人18毛片水18精品| 国产区精品在线观看| 国产成人aa精品一区在线播放| 日韩精品中文在线观看| 欧美另类69精品久久久久9999| 77777亚洲午夜久久多人| 精品国产一区二区在线| 91国内产香蕉| 色妞色视频一区二区三区四区| 日韩美女视频免费在线观看| 日本精品久久电影| 日韩精品免费在线观看| 8x拔播拔播x8国产精品| 成人黄色生活片| 欧美日韩国产一中文字不卡| 精品久久久久久久久久久久| xvideos亚洲人网站| 正在播放欧美一区| 欧美日韩久久久久| 国产97在线|日韩| 欧美成人免费播放| 亚洲第一区中文字幕| 亚洲自拍欧美另类| 国产日本欧美一区二区三区在线| 一区二区三区视频免费在线观看| 日韩欧美亚洲国产一区| 欧美日韩在线看| 久久精品色欧美aⅴ一区二区| 欧美疯狂性受xxxxx另类| 日韩专区在线播放| 国产一区二中文字幕在线看| 欧美视频中文在线看| 视频在线观看一区二区| 韩曰欧美视频免费观看| 亚洲国产天堂久久国产91| 国产视频精品一区二区三区| 日韩在线免费高清视频| 97国产真实伦对白精彩视频8| 亚洲天堂久久av| 亚洲欧美日韩直播| 国产精品久久久一区| 91高清免费在线观看| 亚洲精品乱码久久久久久金桔影视| 中文字幕在线成人| 成人欧美一区二区三区黑人| 久久99久国产精品黄毛片入口| 日本韩国在线不卡| 欧美激情在线观看视频| 日韩免费精品视频| 亚洲美女动态图120秒| 国产成人欧美在线观看| 欧美精品激情在线观看| 精品国产31久久久久久| 欧美俄罗斯性视频| 国内精品模特av私拍在线观看| 亚洲成人激情图| 亚洲国产成人在线视频| 日本中文字幕不卡免费| 亚洲国产中文字幕在线观看| 亚洲成人aaa| 国产日韩在线观看av| 96sao精品视频在线观看| 欧美激情在线一区| 最新69国产成人精品视频免费| 亚洲级视频在线观看免费1级| 亚洲欧美自拍一区| 欧美日韩在线看| 亚洲欧美日韩久久久久久| 欧美一区三区三区高中清蜜桃| 亚洲成成品网站| 欧美黑人一区二区三区| 色系列之999| 欧美精品少妇videofree| 国产精品中文久久久久久久| 国产精品www网站| 美女福利精品视频| 精品国产成人av| 欧美激情亚洲另类| 欧美日韩一区二区在线播放| 精品亚洲国产视频| 国产盗摄xxxx视频xxx69| 久久99国产综合精品女同| 亚洲片国产一区一级在线观看| 欧美在线视频一区| 精品久久久久久亚洲国产300| 亚洲第一精品夜夜躁人人爽| 狠狠色狠色综合曰曰| 亚洲国产精久久久久久久| 欧美性猛交xxxx黑人| 在线午夜精品自拍| 亚洲精品乱码久久久久久按摩观| 92裸体在线视频网站| 日韩精品999| 国产原创欧美精品| 亚洲高清久久久久久| 97色在线视频观看| 国产高清在线不卡| 欧美精品免费在线观看| 亚洲精品videossex少妇| 亚洲精品国产精品乱码不99按摩| 最新国产精品拍自在线播放| 国内精品视频久久| 岛国精品视频在线播放| 欧美一级成年大片在线观看| 色av吧综合网| 日本精品性网站在线观看| 97国产精品视频人人做人人爱| 亚洲视频在线免费观看| 国产精品丝袜白浆摸在线| 日韩精品高清在线| 亚洲一级一级97网| 亚洲男人天堂视频| 亚洲国产第一页| 国产精品99久久久久久久久| 欧美高清视频在线观看| 久久精品成人动漫| 久久久成人的性感天堂| 懂色av影视一区二区三区| 亚洲第一区中文99精品| 欧美刺激性大交免费视频| 2019av中文字幕| 一色桃子一区二区| 最新69国产成人精品视频免费| 亚洲成人国产精品| 欧美电影免费观看电视剧大全| 亚洲国产日韩欧美在线动漫| 亚洲色图偷窥自拍| 国产精品美女免费看| 欧美久久精品一级黑人c片| 欧美丰满片xxx777| 亚洲天堂av在线免费观看| 久久久久久久国产精品| 欧美国产精品va在线观看| 久久久久久久久久久免费| 在线观看国产精品淫| www国产91| 国产精品入口尤物| 亚洲精品美女在线观看| 69av在线视频| 欧美国产中文字幕| 欧美日韩美女视频| 亚洲精品国产精品国自产观看浪潮| 亚洲免费av电影| 国内精久久久久久久久久人| 91欧美视频网站| 日韩视频中文字幕| 日韩中文字幕在线精品| 性金发美女69hd大尺寸| 45www国产精品网站| 日韩大片在线观看视频| 91精品久久久久久| 91精品国产91久久久久久不卡|