oracle本机安装,序列自增,自增序列跳号问题

 安装的是Oracle10

1:打开database文件夹,找到setup.exe,点击属性,兼容性

 2:以管理员身份运行这个exe,进行服务端安装,输入完后点击下一步

3:(安装时会做一些检查)点下一步 ,然后安装

 4:如果跳出需要安装功能,安装就行了

 安装结束退出

 5:打开客户端去连接,打开PLSQL用管理员身份运行

 

选一下,连接进去 






创建一个自增id序列 

# 创建一张表

# 创建一个自增序列
create sequence USERS_SEQ      -- 名称
minvalue 1 
maxvalue 999999999999999999999999999      -- 最大值  
start with 2           -- 从21开始  
increment by 1     -- 每次递增1  
cache 20; 

# 创建一个触发器
create or replace trigger users_tr   --名称
before insert on users               -- users 表明
for each row 
begin
select USERS_SEQ.nextval into :new.id from dual;     --USERS_SEQ自增序列名称 id 自增的列名
end users_tr;


# 执行添加
insert into users values(null,'李四','12323213',1.1,'上海',null)

# 这里时间类型用的  date
# 添加时间类型 to_date('2021-10-26 16:47:21', 'yyyy-MM-dd HH24:mi:ss')
insert into users values(null,'李四','12323213',1.1,'上海',to_date('2021-10-26 16:47:21', 'yyyy-MM-dd HH24:mi:ss'))

# sysdate 获取当前时间
insert into users values(null,'李四','12323213',1.1,'上海',sysdate)

自增使用时可能会跳号

原因:cache会把sequence缓存在lb cache中,在lb cache中对对象的age out是基于lru算法的,如果cache 20,会把这个序列每次取的时候取出来20个,然后再在lb cache中一个一个用,但是如果在用完这20个之前,这个序列被aged out了,那么没用的那些数就丢掉了,而下次再去从dd取出sequence的时候就会去取上次那20个+1的号为开始,再来20个。这就是产生断号的原因。

解决:ORACLE给我们提供了把SEQUENCE KEEP到SHARED POOL((dbms_shared_pool包))中的方法,这样就保证了SEQUENCE的CACHE不会被交换出去,从而避免了这种情况的发生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值