可预防的异象包括:

  • 脏读(Dirty Read)

一个事务读到其他事务尚未提交的数据。

  • 幻象读(Phantom Read)

只读请求返回一组满足搜索条件的行,再次执行发现另一个提交的事务已经插入满足条件的行。

基于上述三种异象定义的四种隔离级别如下:

  • 读未提交(Read Uncommitted)
  • 读已提交(Read Committed)
  • 可重复读(Repeatable Read)
  • 可串行化(Serializable)

语法

设置隔离级别有两种方式,分别为事务级别及 session 级别。

  • Session level:ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;

注意事项

  • 不能在事务执行过程中设置隔离级别,否则会报错。

ERROR:ORA-01453: SET TRANSACTION must be first statement of transaction

  • 在开启可串行化隔离级别时需要确保全局时钟服务(Global Timestamp Service)是打开的。
  • Session 需要维护 session 级别的事务隔离级别,在开启事务时获取 session 级别的事务隔离级别,该隔离级别可以被事务级别的隔离级别覆盖。
  • 内部事务

由于当前有一些内部表尚未拆分到普通租户下,OCP 有可能存在跨租户的事务。在可串行化隔离级别下不允许执行跨租户的事务。