gpt4 book ai didi

php - 防止并行查找 oracle 序列

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:47 25 4
gpt4 key购买 nike

我有一些代码可以从 Oracle DB 中按顺序选择下一个 #:

SELECT JOB_SEQ.NEXTVAL FROM DUAL;

问题是这会生成 ORA-00900 (这没有帮助,因为真正的问题是由于并行性,而不是无效的 SQL 语句)。当两个并行运行的脚本(通过 fork 方法)在完全相同的时刻尝试运行此查询时,就会出现此错误。

确保选择不会同时发生的最简单方法是什么?我

我正在使用的堆栈是 PHP/Linux。我已经阅读过有关消息传递队列的内容,并且希望尽可能避免该路线。如果像 Unix 套接字这样的东西可以工作(即不需要部署额外的软件),那么我更喜欢这种方式。

最佳答案

因此,问题在于 fork 的本质以及 Oracle session 的工作方式。

如果您 fork 一个进程,则必须确保子进程中的数据库 session 不同。

当您尝试从同一 Oracle session 中选择一个序列时,OCI 或数据库本身不知道如何处理此问题。

但是,如果 session 不同,则没有问题。如果您在 PHP 中使用 oci8 扩展,则只需发出 oci_close() 和 oci_connect() 即可完成此操作。

编辑:归功于 Justin Cave (上面评论)用于解释选择序列适用于不同的 session 。

关于php - 防止并行查找 oracle 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com