暂无图片
暂无图片
13
暂无图片
暂无图片
暂无图片

OceanBase事务隔离-Oracle模式

OceanBase 2022-10-05
880

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 级别的事务隔离级别,该隔离级别可以被事务级别的隔离级别覆盖。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论