1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > oracle sequence nextval SOS!!! Sequence.nextval 的问题

oracle sequence nextval SOS!!! Sequence.nextval 的问题

时间:2022-08-03 20:59:19

相关推荐

oracle sequence nextval SOS!!! Sequence.nextval 的问题

本帖最后由 syeung_001 于 -7-18 14:42 编辑

环境:CentOS 5.8 + Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi物理内存:8G

SGA: MAX_SGA_SIZE=6G DB_CACHE_SIZE=4G shared_pool_size=900m large_pool_size=256m

一个实例下有三个用户(三个库,库结构:存储过程完全一样): ERP_A; ERP_B; ERP_C

写入数据的存储过程如下:

CREATE OR REPLACE PROCEDURE SP_INSERTCURRENCY

(CURR_CODE CHAR, CURR_NAME CHAR, EXCH_RATE NUMBER, TDATE DATE, CURRENCY_RKEY IN OUT NUMBER )

AS

BEGIN

INSERT INTO CURRENCY(RKEY,CURR_CODE, CURR_NAME, EXCH_RATE,TDATE)

VALUES (SEQ_CURRENCY.NEXTVAL,CURR_CODE, CURR_NAME, EXCH_RATE,TDATE);

SELECT SEQ_CURRENCY.CURRVAL INTO CURRENCY_RKEY FROM DUAL;

END;

/

Sequence SEQ_CURRENCY如下:

CREATE SEQUENCE SEQ_CURRENCYSTART WITH 201CACHE 20;

问题点:

数据库运行一段时间后(大概15天) 。外部程序调用存储过程: SP_INSERTCURRENCY,执行数据插入时.有时获取sequnce.nextval不准(本例的sequence是SEQ_CURRENCY.NEXTVA),在存储过程中获取的SEQ_CURRENCY.NEXTVAL = 18. (数据表=18的记录是存在的),实际上当前值如下:

Select SEQUENCE_NAME,LAST_NUMBER from user_sequences where SEQUENCE_NAME=’SEQ_CURRENCY’

SEQUENCE_NAME LAST_NUMBER

--------------------------------------------------

SEQ_CURRENCY 201

打开一个sql/plus窗口,获取sequence也是正确的:

SQL>select SEQ_CURRENCY.NEXTVAL from dual; (值为201,正确的)

再回外部程序调用存储过程 SP_INSERTCURRENCY,获取的值还是18。真是见鬼了.

注: 清洗共享池 Alter system flush shared_pool后。外部程序调用存储过程又能正常获取nextval值了。 但一段时间后又出错了(获取sequence.nextval值错误)。

将shared_pool_size由 900m修改为 512m。一段时间后同样问题还是出现。

系统有很多类似这样的sequence。都是外部程序调用,一段时间后就出现问题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。