成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

oracle自增序列跳號(hào),sequence跳號(hào)問題及解決辦法

IT那活兒 / 2751人閱讀
oracle自增序列跳號(hào),sequence跳號(hào)問題及解決辦法


01

問題及現(xiàn)象描述

由于數(shù)據(jù)庫重啟、刷新、奔潰等原因,導(dǎo)致sequence緩存數(shù)據(jù)丟失,查詢時(shí)出現(xiàn)跳號(hào)現(xiàn)象,即從下一個(gè)號(hào)開始。
我們一起來看一個(gè)樣例:
--創(chuàng)建序列
CREATE SEQUENCE MYTEST.S_TEST

START

WITH 1

INCREMENT

BY 1

NOMINVALUE

MAXVALUE

10000

NOCYCLE

CACHE 20

NOORDER

SQL> select S_TEST.nextval from dual;

NEXTVAL

----------

1

SQL> select S_TEST.nextval from dual;

NEXTVAL

----------

2

SQL> select S_TEST.nextval from dual;

NEXTVAL

----------

3
刷新共享池,刷新共享池會(huì)使所有的沒有使用DBMS_SHARED_POOL.KEEP固定的對(duì)象全部被清除,所以共享池剛剛刷新的時(shí)候,SQL和PL/SQL的執(zhí)行效率會(huì)略微下降
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
系統(tǒng)已更改。
--由于cache的20個(gè)序列號(hào)已經(jīng)從共享池中被清除,下次再取序列的nextval值取的是21。
SQL> select S_TEST.nextval from dual;
NEXTVAL
----------
21
關(guān)于序列設(shè)置cache之后跳號(hào)問題的原因:cache會(huì)把sequence緩存在lb cache中,在lb cache中對(duì)對(duì)象的age out是基于lru算法的,如果cache 20,會(huì)把這個(gè)序列每次取的時(shí)候取出來20個(gè),然后再在lb cache中一個(gè)一個(gè)用,但是如果在用完這20個(gè)之前,這個(gè)序列被aged out了,那么沒用的那些數(shù)就丟掉了,而下次再去從dd取出sequence的時(shí)候就會(huì)去取上次那20個(gè)+1的號(hào)為開始,再來20個(gè)。這就是產(chǎn)生斷號(hào)的原因。


02

如何解決

為了避免上述情況,ORACLE給我們提供了把SEQUENCE KEEP到SHARED POOL(dbms_shared_pool包)中的方法,這樣就保證了SEQUENCE的CACHE不會(huì)被交換出去,從而避免了這種情況的發(fā)生。
如果將對(duì)象固定在內(nèi)存中,那么在下一次關(guān)閉數(shù)據(jù)庫之前,這個(gè)對(duì)象就不會(huì)失效或者被清空。還需要考慮的是,Metalink的注意事項(xiàng)61760.1:DBMS_SHARED_POOL將被創(chuàng)建為用戶SYS。其他用戶不擁有這個(gè)包。需要訪問這個(gè)包的任何用戶都必須由SYS授予執(zhí)行權(quán)限。如果在SYS模式中創(chuàng)建這個(gè)包并在不同的模式中運(yùn)行示例代碼,則首先必須給用戶賦予DBMS_SHARED_POOL上的EXECUTE權(quán)限。
默認(rèn)情況下dbms_shared_pool包是不在系統(tǒng)中的,需要運(yùn)行$ORACLE_HOME/rdbms/admin/dbmspool.sql進(jìn)行創(chuàng)建。
SQL> desc dbms_shared_pool;
ERROR:
ORA-04043: 對(duì)象 dbms_shared_pool 不存在
--創(chuàng)建
SQL> @E:oracleRDBMSADMINdbmspool.sql
程序包已創(chuàng)建。
授權(quán)成功。
視圖已創(chuàng)建。
程序包體已創(chuàng)建。
--查看包對(duì)象
SQL> desc dbms_shared_pool;
--授權(quán)
SQL> grant execute on dbms_shared_pool to MYtest;
授權(quán)成功。
SQL> create synonym MYtest.dbms_shared_pool for dbms_shared_pool;
同義詞已創(chuàng)建。
procedure keep參數(shù)的解釋:
exec dbms_shared_pool.keep
keep共有兩個(gè)參數(shù),flag代表前一個(gè)參數(shù)的類型,
如果不輸入,則默認(rèn)為package/procedure/function中的一個(gè);
procedure keep(name varchar2, flag char DEFAULT P)
name
-- The name of the object to keep. There are two
kinds of objects:
-- PL/SQL objects, triggers, sequences, types and
Java objects,
-- which are specified by name, and
-- SQL cursor objects which are specified by a two-part number
-- (indicating a location in the shared pool). For
example:
-- dbms_shared_pool.keep(scott.hispackage)
-- will keep package HISPACKAGE, owned by SCOTT. The
names for
-- PL/SQL objects follows SQL rules for naming objects (i.e.,
-- delimited identifiers, multi-byte names, etc. are allowed).
-- A cursor can be keeped by
-- dbms_shared_pool.keep(0034CDFF, 20348871, C)
-- The complete hexadecimal address must be in the first 8
characters.
-- The value for this identifier is the concatenation of the
-- address and hash_value columns from the v$sqlarea
view. This
-- is displayed by the sizes call above.
-- Currently TABLE and VIEW objects may not be keeped.
flag
-- This is an optional parameter. If the parameter
is not specified,
-- the package assumes that the first parameter is the name of a
-- package/procedure/function and will resolve the
name. Otherwise,
-- the parameter is a character string indicating what kind of
object
-- to keep the name identifies. The string is case
insensitive.
-- The possible values and the kinds of objects they indicate are
-- given in the following table:
-- Value Kind of Object to keep
-- ----- ----------------------
-- P package/procedure/function
-- Q sequence
-- R trigger
-- T type
-- JS java source
-- JC java class
-- JR java resource
-- JD java shared data
-- C cursor


安裝成功后,執(zhí)行exec dbms_shared_pool.keep(數(shù)據(jù)庫用戶名.sequence名稱, Q);執(zhí)行成功即可;

若安裝不成功,試試看執(zhí)行$ORACLE_HOME/rdbms/admin/utlrp.sql;
--測(cè)試結(jié)果
S_TEST和S_TEST2序列都是設(shè)置cache20,將s_test序列keep到shared pool中。
SQL> select S_TEST.nextval from dual;
NEXTVAL
----------
24
SQL> select S_TEST.nextval from dual;
NEXTVAL
----------
25
SQL> select S_TEST2.nextval from dual;
NEXTVAL
----------
1
SQL> exec dbms_shared_pool.keep(s_test,q);
PL/SQL 過程已成功完成。
SQL> select S_TEST2.nextval from dual;
NEXTVAL
----------
21
SQL> select S_TEST.nextval from dual;
NEXTVAL
----------
26
-- dbms_shared_pool.unkeep的作用是取消已經(jīng)keep在shared pool中的對(duì)象
SQL> exec
dbms_shared_pool.unkeep(s_test,q);
PL/SQL 過程已成功完成。
SQL> select S_TEST.nextval from dual;
NEXTVAL
----------
27
SQL> alter system flush shared_pool;
系統(tǒng)已更改。
SQL> select S_TEST.nextval from dual;
NEXTVAL
----------
41



本 文 原 創(chuàng) 來 源:IT那活兒微信公眾號(hào)(上海新炬王翦團(tuán)隊(duì))


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129714.html

相關(guān)文章

  • 基于 oracle 的 flask 項(xiàng)目(一)——配置項(xiàng)目

    摘要:一般印象,項(xiàng)目適合做一些短小精悍的項(xiàng)目,特別是與等數(shù)據(jù)庫結(jié)合很是般配。生成報(bào)表,不同的查詢結(jié)果生成不同的報(bào)表。配置從下載客戶端,然后解壓后放入自己指定的目錄。指定數(shù)據(jù)庫連接池的超時(shí)時(shí)間。 一般印象,flask 項(xiàng)目適合做一些短小精悍的項(xiàng)目,特別是與 sqlite、mysql 等數(shù)據(jù)庫結(jié)合很是般配。但是在一些大公司,特別是一些金融行業(yè)等國(guó)企公司,還是以 oracle 居多,那么,這個(gè)小辣...

    xialong 評(píng)論0 收藏0
  • 使用SpringBoot-JPA進(jìn)行自定義的保存批量保存

    摘要:既然行不通,或許可以考慮使用注解來自定義一個(gè)實(shí)現(xiàn)。仍舊提供給了使用者原始的使用方式利用來構(gòu)造并執(zhí)行。就像一樣,使用者也可以自定義來執(zhí)行,試試看,同樣沒有問題,再多的數(shù)據(jù)也可以被保存到數(shù)據(jù)庫中批量保存的效果達(dá)到了。 更多精彩博文,歡迎訪問我的個(gè)人博客 說明 SpringBoot版本:2.1.4.RELEASE java版本:1.8 文中所說JPA皆指spring-boot-starte...

    boredream 評(píng)論0 收藏0
  • 關(guān)于生成訂單號(hào)規(guī)則的一些思考

    摘要:關(guān)于我為什么寫這篇文章是因?yàn)榻裉煸谧鲇唵文K的時(shí)候看到之前的上描述的年月日用戶位企業(yè)位四位自增長(zhǎng)數(shù)。背景對(duì)于其定訂單的生成。個(gè)人的看法是主要是唯一,其他關(guān)于業(yè)務(wù)方面的不是太太重要。自增實(shí)現(xiàn)了用于將的值遞增,并返回結(jié)果。 關(guān)于我為什么寫這篇文章是因?yàn)榻裉煸谧鲇唵文K的時(shí)候,看到之前的PRD上描述的年月日+用戶id2位+企業(yè)id位+四位自增長(zhǎng)數(shù)。然后竟被我反駁的突然改成了精確時(shí)間+4位自增...

    omgdog 評(píng)論0 收藏0
  • 探討分布式ID生成系統(tǒng)

    摘要:結(jié)合對(duì)做如下調(diào)整的毫秒時(shí)間戳的數(shù)據(jù)邏輯分區(qū)以及的自增序列。為了解決這個(gè)問題,便引入了邏輯分區(qū)。參考文章批量插入返回自增的問題美團(tuán)點(diǎn)評(píng)分布式生成系統(tǒng) 這里的博客版本都不會(huì)被更新維護(hù)。查看最新的版本請(qǐng)移步:http://neojos.com 全稱Universally Unique Identifier,UUID占128bit,也就是16個(gè)英文字符的長(zhǎng)度(16byte),需要強(qiáng)調(diào)的是,它...

    junbaor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<