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

主頁 > 知識庫 > 分享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精品国产入口| 色婷婷一区二区三区四区| 国产成人一区在线| 韩日欧美一区二区三区| 日本免费新一区视频| 午夜久久久久久| 亚洲专区一二三| 亚洲人成在线观看一区二区| 国产精品无码永久免费888| 精品国产伦一区二区三区免费| 91精品国产91久久久久久一区二区| 一本大道久久a久久综合| 成人avav影音| 日本精品视频一区二区三区| 色悠悠久久综合| 在线观看日韩国产| 欧美日韩国产成人在线91| 9191成人精品久久| 精品成人一区二区三区四区| www国产精品av| 欧美国产成人在线| 一区在线播放视频| 午夜精品免费在线观看| 日韩高清国产一区在线| 美国毛片一区二区三区| 成人性生交大片免费看在线播放| 国产成人免费视频精品含羞草妖精| 成人视屏免费看| 在线观看一区二区视频| 91麻豆精品91久久久久同性| 精品国产91久久久久久久妲己| 欧美国产激情一区二区三区蜜月| 综合久久久久综合| 亚洲电影一区二区三区| 久久精品国产网站| 成人国产亚洲欧美成人综合网 | 91啪亚洲精品| 在线观看视频一区| 久久久精品一品道一区| 亚洲另类一区二区| 精品一区二区成人精品| 日本韩国视频一区二区| 日韩精品一区二区在线| 中文字幕亚洲精品在线观看 | 亚洲欧美日韩国产手机在线 | 玉米视频成人免费看| 日韩在线a电影| 成人永久免费视频| 欧美精品乱码久久久久久按摩| 久久久久久一二三区| 亚洲另类一区二区| **性色生活片久久毛片| 午夜精彩视频在线观看不卡| 国产999精品久久久久久| 制服.丝袜.亚洲.中文.综合| 国产精品网站在线播放| 国内精品写真在线观看| 91国产精品成人| 国产欧美日韩亚州综合| 日本 国产 欧美色综合| 在线视频一区二区三区| 国产日韩欧美综合在线| 日本亚洲一区二区| 欧美亚一区二区| 国产精品久久久久久久久快鸭| 蜜乳av一区二区| 欧美日韩一区二区欧美激情 | 亚欧色一区w666天堂| 粉嫩av一区二区三区粉嫩| 精品免费日韩av| 视频一区二区中文字幕| 欧洲av一区二区嗯嗯嗯啊| 国产精品美女久久久久aⅴ| 国产自产视频一区二区三区| 日韩一区二区视频在线观看| 一区二区三区高清| 色屁屁一区二区| 国产精品三级av| 成人网在线免费视频| 国产日产欧美精品一区二区三区| 久久99国产精品麻豆| 日韩精品一区二区三区在线| 日韩综合在线视频| 91精品国产综合久久香蕉的特点 | 美女在线视频一区| 欧美午夜片在线看| 亚洲午夜久久久久久久久电影院| 成人免费视频一区| 中文字幕va一区二区三区| 国产精品一区久久久久| 久久亚洲二区三区| 国产精品亚洲第一区在线暖暖韩国| 日韩午夜激情视频| 国产在线精品免费av| 精品久久久久久久久久久久久久久 | 欧美日韩精品高清| 亚洲成av人片www| 午夜天堂影视香蕉久久| 3atv在线一区二区三区| 日本在线不卡一区| 精品国产一区二区三区四区四| 美女国产一区二区三区| 2023国产一二三区日本精品2022| 精品中文字幕一区二区| 视频一区二区三区中文字幕| 欧美一区三区二区| 国产中文字幕一区| 国产精品久久久久久妇女6080 | 91精品国产福利| 国产综合成人久久大片91| 中文字幕不卡的av| 欧美色成人综合| 精品一区二区在线视频| 中国色在线观看另类| 欧美日韩亚洲丝袜制服| 久久99九九99精品| 亚洲日穴在线视频| 欧美图区在线视频| 欧美精品在线视频| 精彩视频一区二区| 国产精品福利影院| 欧美三级日本三级少妇99| 久久se这里有精品| 最新日韩av在线| 日韩色在线观看| 91免费版在线看| 日本美女一区二区| 亚洲视频免费在线观看| 欧美剧情片在线观看| 成人国产精品免费观看动漫| 亚洲一级在线观看| 久久先锋影音av| 欧美视频日韩视频| 成人久久久精品乱码一区二区三区| 婷婷夜色潮精品综合在线| 久久久99免费| 这里只有精品99re| av在线不卡观看免费观看| 理论片日本一区| 亚洲精品国产高清久久伦理二区| 久久无码av三级| 欧美三级韩国三级日本一级| 丁香激情综合国产| 玖玖九九国产精品| 亚洲一区影音先锋| 一区二区三区资源| 欧美电视剧在线观看完整版| 欧美在线制服丝袜| 成人激情动漫在线观看| 九九九久久久精品| 三级不卡在线观看| 一区二区三区 在线观看视频| 国产亚洲综合在线| 337p粉嫩大胆噜噜噜噜噜91av| 欧美日韩中文字幕一区二区| 日本精品免费观看高清观看| 成人精品视频一区| 国产精品99久久久久久久女警 | av在线播放一区二区三区| 国产一区二区三区四区在线观看| 日本中文字幕一区二区有限公司| 亚洲免费观看高清完整版在线观看熊| 国产亚洲一区字幕| 久久夜色精品国产欧美乱极品| 精品理论电影在线观看| 欧美一区二区三区视频免费播放| 欧美老肥妇做.爰bbww视频| 在线观看国产91| 欧美日韩精品专区| 91国产福利在线| 欧美男人的天堂一二区| 欧美体内she精视频| 在线免费观看不卡av| 91成人在线免费观看| 精品视频色一区| 制服丝袜亚洲播放| 精品少妇一区二区三区免费观看| 精品三级在线看| 日本一区二区高清| 国产精品不卡在线观看| 亚洲免费三区一区二区| 亚洲成人免费看| 日韩影院在线观看| 精品一区二区三区在线播放| 国内精品免费**视频| 国产乱人伦偷精品视频不卡| 成人在线综合网站| 91福利在线免费观看| 欧美视频一区在线观看| 制服丝袜av成人在线看| 久久久久九九视频| 亚洲免费av网站| 免费高清在线视频一区·| 国产乱子轮精品视频| 91丝袜呻吟高潮美腿白嫩在线观看|