基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
Oracle 模式的事务隔离级别
更新时间:2023-07-28 10:45:58
Oracle 模式支持的隔离级别
OceanBase 数据库在 Oracle 模式下,支持以下隔离级别:
读已提交(Read Committed):一个事务执行的查询,只能看到这次查询开始之前提交的数据。读已提交无法防止不可重复读和幻读两种异常现象。如果冲突的事务比较少,简单高效的读已提交隔离级别,对应用来说是足够的。
可重复读(Repeatable Read):事务内不同时间读到的同一批数据是一致的。无法防止幻读这种异常现象。
可串行化(Serializable):一个事务的查询,只能看到事务开始之前提交的数据。这是最严格的隔离级别,可以防止脏读、不可重复读和幻读三种异常现象,事务看起来就像是串行执行的。
OceanBase 数据库默认的隔离级别为读已提交(Read Committed)。
隔离级别设置方法
设置隔离级别有两种方式,分别为事务级别及 session 级别。
Transaction level
obclient> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;事务级别的隔离级别设置后,不会改变配置,仅表示设置了下个事务的隔离级别并开启了事务。
Session level
obclient> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
使用限制
不能在事务执行过程中设置隔离级别,否则会报如下错误:
ERROR:ORA-01453: SET TRANSACTION must be first statement of transaction在开启可串行化隔离级别时需要确保全局时钟服务(Global Timestamp Service)是打开的。
Session 需要维护 session 级别的事务隔离级别,在开启事务时获取 session 级别的事务隔离级别,该隔离级别可以被事务级别的隔离级别覆盖。