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

本帖最后由 syeung_001 于 2013-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_CURRENCY  START WITH 201  CACHE 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。都是外部程序调用,一段时间后就出现问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值