当前位置: 首页 > 知识库问答 >
问题:

甲骨文序列事务性

邴景山
2023-03-14

我需要一个特定的业务场景来设置一个实体(不是PK)上的字段,一个序列中的数字(序列必须是最小值和最大值之间的数字)

我这样定义序列:

CREATE SEQUENCE MySequence
  MINVALUE 65536 
  MAXVALUE 4294967296 
  START WITH 65536
  INCREMENT BY 1
  CYCLE
  NOCACHE
  ORDER;

在Java代码中,我从序列中检索数字,如下所示:

select mySequence.nextval from dual

我的问题是:

如果我在一个事务中调用这个“从双中选择mySequence.nextval”,同时在另一个事务中调用相同的方法(并行请求),那么确定序列返回的值是不同的吗?

不可能从第一个事务中读取未提交的值吗?

因为假设我没有使用sequence和一个普通的表,在这个表中我会增加自己的序列,那么如果事务性是默认的“READ COMMITTED ”,那么事务2将能够读取相同的值。

共有3个答案

薛枫
2023-03-14

< code>sequence.nextval不会为并发请求返回相同的值(循环之前)。也许你应该检查以下网址:

http://docs.oracle.com/cd/B19306_01/server.102/b14220/schema.htm#sthref883

燕照
2023-03-14

Oracle保证序列号将不同。即使您的事务被回滚,序列也会被“使用”,不会重新发布到另一个查询。

编辑:在Cris的评论中陈述了关于“无差距”的要求后添加额外信息

如果您的要求是一个没有间隙的数字序列,那么oracle序列可能不是一个合适的解决方案,因为当事务回滚时,或者当数据库重新启动或任何其他数量的场景时,会有间隙。

序列主要是作为一种高性能的唯一编号(如主键)生成工具,不考虑间隙和事务上下文约束。

如果您的设计/业务/审计要求需要考虑每个数字,那么您将需要设计一个在事务上下文中使用预定数字的解决方案。这可能很棘手,并且在多线程环境中容易出现性能/锁定问题。最好尝试重新定义您的要求,以便差距无关紧要。

吉嘉珍
2023-03-14

答案是否定的。

Oracle保证按顺序生成的数字是不同的。即使发出并行请求,RAC环境或回滚和提交也是混合的。

序列与事务无关。

请参阅此处的文档:

使用CREATE SEQUENCE语句创建一个序列,该序列是一个数据库对象,多个用户可以从中生成唯一的整数。您可以使用序列来自动生成主键值。

生成序列号时,序列会递增,与事务提交或回滚无关。如果两个用户同时递增相同的序列,那么每个用户获得的序列号可能会有间隙,因为序列号是由另一个用户生成的。一个用户永远无法获得另一个用户生成的序列号。一个用户生成序列值后,该用户可以继续访问该值,而不管该序列是否由另一个用户递增。

序列号是独立于表生成的,因此同一序列可以用于一个或多个表。可能会跳过单个序列号,因为它们是在最终回滚的事务中生成和使用的。此外,单个用户可能没有意识到其他用户正在从同一序列绘制。

 类似资料:
  • Support for the Oracle database. The following table summarizes current support levels for database release versions. 支持的Oracle版本 The following dialect/DBAPI options are available. Please refer to ind

  • 我刚接触oracle forms,遇到了一个问题。我在表单中有两个具有相同字段的多个记录块。 我查询一个块的数据,它被填充。 哪里有一种方法可以将所有行从填充的块复制到“复制”块?

  • 问题内容: 在OracleDoc中没有表达式背后的例子,所以我尝试使用Java语法,这应该在查询后得到任何数字 但是什么也没显示! 问题答案: 出于争论的考虑,REGEXP_SUBSTR也可以工作:

  • 问题内容: 我有一个表(日期,有效负载),其中包含约10年的数据,我想基于14天(2周)和90天(12周)的间隔计算移动平均值(MA),以显示有效负载的趋势 我已经写了这个查询,但是它得到了错误的值 实际上我知道是什么,但我不了解Oracle的工作原理! 我可以在Excel中进行计算,但是我需要在数据库级别执行此操作,能否请您告诉我如何执行此操作? 问题答案: 我不明白使用的目的是什么?根据文档,

  • 问题内容: 我有一个名为的约束。我如何找到该约束是什么?有没有办法查询所有约束? 问题答案: 像所有数据字典视图一样,如果您只想检查当前架构,则为USER_CONSTRAINTS视图,对于管理用户则为DBA_CONSTRAINTS视图。 约束名称的构造指示系统生成的约束名称。例如,如果我们在表声明中指定NOT NULL。或者实际上是主键或唯一键。例如: 检查,主要。 通常,给关系约束一个明确的名称

  • Android studio曾经抱怨使用OpenJDK,并推荐Oracle JDK。然而,在最新的Android Studio中,这个提示消失了(可能是由于两家公司之间的法律纠纷)。 我今天安装了甲骨文1.8.0.92 JDK和Android Studio 2.1.1似乎运行速度更快,明显更快。 你知道Android studio在Java 1.8和OpenJDK与Oracle JDK方面的现状吗