事务的整个生命周期通常包括开启事务、执行查询和 DML 语句,结束事务等过程。其中,开启事务可以通过 BEGIN、START TRANSACTION 等语句显式开启,也可以通过 DML 语句隐式开启。结束事务通常有两种方式,通过 COMMIT 语句提交事务或者通过 ROLLBACK 语句回滚事务。此外,在一个活跃事务中执行 DDL 语句也会导致隐式地提交事务。
在事务内部可以创建 Savepoint,它标记了事务内部的一个点,您可以在事务后续的执行过程中通过 ROLLBACK TO SAVEPOINT 语句回滚到该点。更多 Savepoint 相关信息请参见 Savepoint。
事务大小
OceanBase 数据库 V2.x 版本上单个事务大小有限制,通常是 100M。事务的大小与两个配置项有关,分别是租户级配置项 _tenant_max_trx_size 和集群级配置项 _max_trx_size,_tenant_max_trx_size 优先生效。
OceanBase 数据库 V3.x 及后续版本因支持了大事务,不再受此限制。
语句超时与事务超时
系统变量 ob_query_timeout 控制着语句执行时间的上限,语句执行时间超过此值会给应用返回语句超时的错误,错误码为 -6212,并回滚语句,通常该值默认为 10s。
系统变量 ob_trx_timeout 控制着事务超时时间,事务执行时间超过此值会给应用返回事务超时的错误,错误码为 -6210,此时需要应用发起 ROLLBACK 语句回滚该事务。
系统变量 ob_trx_idle_timeout 表示 Session上一个事务处于的 IDLE 状态的最长时间,即长时间没有 DML 语句或结束该事务,则超过该时间值后,事务会自动回滚,再执行 DML 语句会给应用返回错误码 -6224,应用需要发起 ROLLBACK 语句清理 Session 状态。
事务查询
虚拟表 __all_virtual_trans_stat 可用于查询系统中当前所有的活跃事务。有关活跃事务的详细信息请参见 活跃事务。




