Oracle skip locked的应用

前端之家收集整理的这篇文章主要介绍了Oracle skip locked的应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

开发提了一个需求,就是取合同编码,原先是通过webserver去取,但有时候有性能问题,导致批量处理合同的时候有性能问题。现在要改造成先批量取一批合同编码放在本地。现在遇到的问题是怎么在并发情况下保证取的是不同的合同编码。数据库的skip locked可以解决

1.通过webservice取1000个编号写到本地表中,表中应该有个标志表示是否使用。

2.当程序获取表示未使用的合同编号,select * from t where statut='未使用',假设能取到500条记录,那我循环去取编码select * from t where 编码='001' for update skip locked,如果有记录就说明是可以用的,如果没有记录,说明合同编码被其他人取了,再次循环。如果循环了所有的数据都没有取到,那就去用webservice去取。

3.写一个定时任务,1个小时执行一次,如果编码表里面少于1000个可用的编码,则调用webservice去取。

下面是skip locked的实验:

drop table t;

create table t(a number);
insert into t values(1);
insert into t values(2);
insert into t values(3);
insert into t values(4);
insert into t values(5);
commit;

session1:
sql> select * from t where A in(1,2) for update skip locked;
A
----------
1
2

session2: sql> select * from t where A in(1,2) for update skip locked; 未选定行 sql> select * from t for update skip locked; A ---------- 3 4 5
原文链接:https://www.f2er.com/oracle/207974.html

猜你在找的Oracle相关文章