加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长百科 > 正文

Oracle数据库读锁定

发布时间:2021-03-16 11:13:46 所属栏目:站长百科 来源:网络整理
导读:我有一个问题,我想解决.我需要临时锁定表上的读取. 这是场景. 我想读一张表来确定以基数开头的最大销售订单.然后我必须在小数点后添加数字.因此,如果我们有123.1和123.2的订单,我需要确定我需要创建的下一个是123.3.然后,我调用API来创建此订单号. 问题是两

我有一个问题,我想解决.我需要临时锁定表上的读取.

这是场景.

我想读一张表来确定以基数开头的最大销售订单.然后我必须在小数点后添加数字.因此,如果我们有123.1和123.2的订单,我需要确定我需要创建的下一个是123.3.然后,我调用API来创建此订单号.

问题是两个用户同时想要将新的销售订单添加到基本订单号.一个用户的逻辑确定数字是123.3并调用API以创建订单;一旦创建我提交记录.但是当API调用启动时,第二个用户的逻辑正在尝试确定下一个数字,并且根据时间,它还可以选择123.3作为下一个可用数字.

然后,一旦第二个用户的逻辑调用API,该数字就会重复并出错.

我希望第一个逻辑锁定表中的读取,同时确定订单号并创建它.然后我可以释放锁定,第二个用户可以继续.

我读过的所有内容似乎都说我无法阻止对表的读取.

解决方法

锁定读取不是答案 – 你不能直接锁定Oracle中的读取,而且它会过于笼罩.

您需要做的是序列化每个基本订单号的密钥生成过程.

最有效的方法是使用DBMS_Lock,并通过请求“ORDER123NEWKEY”(例如)的独占锁来启动新的密钥生成过程.插入新行并更改提交后,然后释放锁定.

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读