【发布时间】:2021-06-27 04:21:38
【问题描述】:
如果我在 oracle 中查询由标识主键排序的一系列行,查询结果是否会包含稍后查询将返回缺失行的间隙?
根据Oracle 12c 12.1 Online Documentation→9 Data Concurrency and Consistency,“数据库使用称为SCN的内部排序机制来保证事务的顺序。随着 SELECT 语句进入执行阶段,数据库确定查询开始执行时记录的 SCN。在图 9-1 中,这个 SCN 是 10023。查询只看到与 SCN 10023 相关的已提交数据。 SCN 是否与 IDENTITY 列具有相同的顺序?如果不是,是否可以选择按SCN排序?
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 会帮忙吗?这听起来类似于可序列化隔离级别避免的“幻读”问题,只是我关心的是单个 select 语句中丢失的行,而不是 select 语句之间的丢失行。
我的用例是这样的:对于一个表的每次更改,触发器都会将事件插入到第二个 events 表中,该表有一个列 id NUMBER(30) GENERATED ON NULL AS IDENTITY 并且还有一个 PRIMARY KEY ("id") 约束。我的程序在最近读取的事件之后获取以下事件,如下所示:SELECT * FROM events ORDER BY id WHERE id > :lastId FETCH NEXT 10 ROWS ONLY。我想确保事件不会被意外跳过或重新排序。
【问题讨论】:
标签: oracle oracle12c isolation-level