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

OceanBase事务管理-Oracle事务控制

OceanBase 2022-09-29
769

开启事务

开启方式

OceanBase 数据库在 Oracle 模式下开启事务共有以下两种方式:

  • 自动开启

    在无事务开启的 Session 端执行 DML 语句(除了 SELECT)、DCL 语句或 DDL 语句时,会默认开启一个事务。

  • 手动开启

    除了兼容 Oracle 数据库的使用方式外,OceanBase 数据库还支持手动开启事务,语法如下:

    START TRANSACTION 
      [READ ONLY | READ WRITE];
    BEGIN [WORK] ; 
    

执行效果

事务开启后,系统会根据用户指定或默认设置对事务信息进行初始化:

  1. 设置用户信息。

  2. 设置隔离级别。

    默认事务的隔离级别为 READ COMMITTED,您可以通过 SET TRANSACTION 等语句指定隔离级别。

  3. 为 SERIALIZABLE 级别的事务设置事务级快照版本。

提交事务

提交当前事务的语法如下:

obclient> COMMIT [WORK];

输入 COMMIT 语句后即进入事务提交流程,提交事务修改并结束事务。 在 OceanBase 数据库中,典型情况下提交事务需要执行"两阶段提交",两阶段提交详细说明请参见 二阶段提交

回滚事务

回滚当前事务的语法如下:

ROLLBACK [WORK];

输入 ROLLBACK 语句后进入事务回滚流程,清除事务修改并结束事务。

具体流程如下:

  1. 各参与者清除 MemTable 上自己的修改并释放行锁,清理参与者上下文。

  2. 参与者清除成功后返回消息给调度者,调度者收集到所有参与者清理成功的消息后,清理调度者上下文。

只读事务

只读不开事务

为了针对只读语句进行优化,在 Session 无事务开启的情况下,执行 SELECT 语句即可进入只读不开事务路径。只读不开事务跳过事务上下文等流程,只读取所需的必要信息,将数据返回用户。

只读不开事务的快照时间获取方式由当前 Session 的隔离级别决定。

只读不开事务的示例如下:

SELECT * FROM t1;//只读不开事务
SELECT * FROM t2;//只读不开事务
INSERT INTO t1 VALUES(1);//开启事务

只读事务

输入如下语句,可开启只读事务。

obclient> START TRANSACTION READ ONLY;

只读事务不能存在对数据的修改,也因此相对读写事务可进行优化,只读事务不创建事务上下文,故在回滚时也无需执行任何清理操作。

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

评论