校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 分享ORACLE SEQUENCE跳號總結

分享ORACLE SEQUENCE跳號總結

熱門標簽:區域地圖標注怎么設置 百度地圖標注飯店位置怎么 南通電銷外呼系統哪家強 外呼系統好點子 電話機器人那種好 上海網絡外呼系統 百度地圖標注注解 理財產品電銷機器人 地圖標注的坐標點

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

并發訪問序列引起的跳號 

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

會話窗口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
----------
 17004
SQL> alter sequence test.my_sequence cache 40;
Sequence altered.
SQL> select test.my_sequence.nextval from dual;
 NEXTVAL
----------
 17005
SQL> alter system flush share_pool;
alter system flush share_pool
*
ERROR at line 1:
ORA-02000: missing SHARED_POOL/BUFFER_CACHE/GLOBAL CONTEXT keyword
SQL> 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
----------
 17045
SQL> select object_id from dba_objects where object_name=upper('my_sequence');
 OBJECT_ID
----------
 97760
SQL> select increment$, minvalue, maxvalue,highwater, cache
 2 from seq$ where obj#=97760;
INCREMENT$ MINVALUE MAXVALUE HIGHWATER CACHE
---------- ---------- ---------- ---------- ----------
  1  1 99999 17085  40
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup;
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 1620115456 bytes
Fixed Size   2213816 bytes
Variable Size  1258293320 bytes
Database Buffers  352321536 bytes
Redo Buffers  7286784 bytes
Database 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 session
SQL> select test.my_sequence.nextval from dual;
 NEXTVAL
----------
 17085
SQL> 

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

SQL> select test.my_sequence.nextval from dual;
 NEXTVAL
----------
 17085
SQL> 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> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 1620115456 bytes
Fixed Size   2213816 bytes
Variable Size  1258293320 bytes
Database Buffers  352321536 bytes
Redo Buffers  7286784 bytes
Database 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 session
SQL> select test.my_sequence.nextval from dual;
 NEXTVAL
----------
 17086
SQL> 

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#=:1
END OF STMT
PARSE #25:c=0,e=21,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,plh=1935744642,tim=1504236336294194
BINDS #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=97760
EXEC #9:c=999,e=709,p=0,cr=1,cu=2,mis=0,r=1,dep=1,og=4,plh=1935744642,tim=1504236336297033
CLOSE #9:c=0,e=2,dep=1,type=3,tim=1504236336297058
mealink上提到了使用dbms_shared_pool.keep將對象在鎖定在shared pool 中,永遠不釋放。這樣可以防止FLUSH SHARED POOL導致序列跳號,但是這個無法避免數據庫異常關閉或CRASH引起的跳號
SQL> select test.my_sequence.currval from dual;
 CURRVAL
----------
 17086
SQL> 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
----------
 17086
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 1620115456 bytes
Fixed Size   2213816 bytes
Variable Size  1258293320 bytes
Database Buffers  352321536 bytes
Redo Buffers  7286784 bytes
Database mounted.
Database opened.
SQL> select test.my_sequence.nextval from dual;
 NEXTVAL
----------
 17126

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

總結

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

您可能感興趣的文章:
  • 詳解ORACLE SEQUENCE用法
  • Oracle中使用觸發器(trigger)和序列(sequence)模擬實現自增列實例
  • sqlserver實現oracle的sequence方法
  • Oracle創建自增字段--ORACLE SEQUENCE的簡單使用介紹
  • oracle sequence語句重置方介紹
  • Hibernate Oracle sequence的使用技巧
  • 通過實例了解Oracle序列Sequence使用方法

標簽:自貢 遼源 紹興 寧波 昭通 百色 中衛 海東

巨人網絡通訊聲明:本文標題《分享ORACLE SEQUENCE跳號總結》,本文關鍵詞  分享,ORACLE,SEQUENCE,跳號,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《分享ORACLE SEQUENCE跳號總結》相關的同類信息!
  • 本頁收集關于分享ORACLE SEQUENCE跳號總結的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产91高潮流白浆在线麻豆| 91亚洲精品一区二区乱码| 亚洲午夜精品久久久久久久久| 一区二区三区不卡视频在线观看| 亚洲最新视频在线观看| 毛片一区二区三区| 成人性生交大片免费看在线播放| 91小视频在线| 日韩一区二区免费电影| 国产精品九色蝌蚪自拍| 午夜免费久久看| 狠狠色丁香九九婷婷综合五月| www.99精品| 日韩精品中午字幕| 亚洲欧美日韩国产综合| 蜜臀91精品一区二区三区| 91蜜桃视频在线| 久久综合久久鬼色| 日日夜夜免费精品| 91美女福利视频| 国产午夜精品久久久久久久| 无吗不卡中文字幕| 日本道在线观看一区二区| 久久久不卡影院| 免费看日韩精品| 在线观看国产91| 专区另类欧美日韩| a级高清视频欧美日韩| 久久综合精品国产一区二区三区| 国产精品第五页| 成人激情视频网站| 日本一区二区三区久久久久久久久不| 蜜臂av日日欢夜夜爽一区| 欧美日韩国产另类不卡| 国产欧美精品一区二区色综合 | 国产一区二区精品久久99| 欧美午夜电影一区| 一区二区三区在线视频观看58| 成人美女视频在线观看18| 久久综合五月天婷婷伊人| 麻豆精品视频在线| 日韩三级伦理片妻子的秘密按摩| 亚洲成人激情社区| 欧美偷拍一区二区| 亚洲五码中文字幕| 欧美精品少妇一区二区三区| 亚洲国产精品久久人人爱| 欧美在线一区二区三区| 亚洲自拍偷拍综合| 欧美三级日韩在线| 污片在线观看一区二区| 日本韩国欧美国产| 一区二区三区欧美亚洲| 欧美日韩精品欧美日韩精品一 | 欧美性高清videossexo| 亚洲一二三区不卡| 日本精品一区二区三区四区的功能| 亚洲欧美自拍偷拍| 欧美最新大片在线看| 午夜久久久久久久久久一区二区| 69成人精品免费视频| 另类人妖一区二区av| 久久久久久亚洲综合| 成人精品国产一区二区4080| 亚洲日本一区二区三区| 欧美视频中文字幕| 蜜桃视频第一区免费观看| 欧美videos中文字幕| 国产精品77777| 中文字幕日本不卡| 欧美日韩精品福利| 国产主播一区二区三区| 成人免费视频在线观看| 欧美亚洲一区三区| 国产在线一区二区| 亚洲欧洲精品天堂一级 | 午夜日韩在线电影| 欧美一区二区精品| 成人av网址在线| 亚洲狠狠爱一区二区三区| 精品电影一区二区三区 | 一本色道综合亚洲| 强制捆绑调教一区二区| 久久综合视频网| 91久久久免费一区二区| 久久精品国产网站| 亚洲欧洲精品天堂一级| 欧美一区二区成人| 成人在线一区二区三区| 日韩精品成人一区二区三区| 欧美激情综合网| 欧美日韩精品欧美日韩精品一 | 怡红院av一区二区三区| 日韩欧美一级片| av日韩在线网站| 国内精品伊人久久久久av影院 | 欧美最新大片在线看| 国产精品主播直播| 亚洲国产婷婷综合在线精品| 久久久久久一级片| 91精品国产一区二区三区香蕉| 成人av动漫网站| 久久精品国产99久久6| 亚洲精品成人a在线观看| 久久久久国产精品麻豆| 欧美精品欧美精品系列| 一本大道久久a久久综合婷婷| 久久国产福利国产秒拍| 亚洲国产精品影院| 亚洲欧洲www| 国产精品久久久久久久蜜臀| 精品国免费一区二区三区| 在线一区二区三区四区五区| 国产91精品久久久久久久网曝门 | 久久精品男人天堂av| 91精品国产综合久久香蕉的特点| 色噜噜久久综合| 成人国产亚洲欧美成人综合网| 久久精品国产一区二区三| 日韩综合小视频| 丝袜国产日韩另类美女| 亚洲一区二区三区四区在线免费观看 | 午夜视频在线观看一区二区| 中文字幕一区日韩精品欧美| 精品国产91乱码一区二区三区 | 国产不卡视频在线观看| 精品亚洲国产成人av制服丝袜| 午夜成人免费电影| 天天色图综合网| 亚洲国产精品久久久久秋霞影院| 中文字幕色av一区二区三区| 亚洲欧洲精品一区二区三区 | 亚洲精品va在线观看| |精品福利一区二区三区| 成人欧美一区二区三区黑人麻豆 | 亚洲成人免费视频| 一区二区三区免费| 亚洲综合在线五月| 亚洲国产va精品久久久不卡综合 | 午夜a成v人精品| 日本成人中文字幕在线视频| 三级欧美韩日大片在线看| 天天综合色天天综合| 久久综合综合久久综合| 激情综合色综合久久| 韩国av一区二区三区四区| 国产不卡视频在线观看| 成人av在线播放网址| 在线视频亚洲一区| 精品视频一区二区不卡| 欧美一级夜夜爽| 国产欧美一区二区三区在线看蜜臀| 欧美国产激情一区二区三区蜜月| 国产精品久久综合| 怡红院av一区二区三区| 美女在线视频一区| 成人va在线观看| 欧美性大战久久久| 精品欧美一区二区在线观看| 久久久久成人黄色影片| 亚洲三级在线免费观看| 亚洲第一激情av| 久久99蜜桃精品| 91美女在线看| 欧美一二三区精品| 中日韩av电影| 午夜欧美大尺度福利影院在线看| 精品一区二区三区免费视频| 国产成人8x视频一区二区| 欧美日韩亚洲丝袜制服| 日韩三级视频在线看| 国产精品久久久久三级| 五月激情综合色| 国产成人免费视频网站高清观看视频| 不卡的av电影| 欧美一卡在线观看| 亚洲视频一区在线| 九一九一国产精品| 91极品美女在线| 26uuu精品一区二区三区四区在线| 国产精品天美传媒| 七七婷婷婷婷精品国产| 国产高清不卡二三区| 欧美日韩夫妻久久| 中日韩免费视频中文字幕| 日韩激情一二三区| 91丨九色丨黑人外教| 精品国产凹凸成av人网站| 亚洲国产欧美日韩另类综合 | 在线亚洲人成电影网站色www| 欧美一区二区三区小说| 亚洲欧美另类小说| 精品在线免费观看| 欧美日韩专区在线| 中文字幕在线不卡国产视频| 国产伦精品一区二区三区免费| 欧美三级乱人伦电影| 亚洲日本护士毛茸茸| 成人动漫精品一区二区| 国产女主播视频一区二区|