ANSI Serializable、ANSI Repeatable Read 和 GBase 8s Repeatable Read 隔离

如果需要 ANSI Serializable 或 ANSI Repeatable Read,则提供单个称为 GBase 8s Repeatable Read 的隔离级别。这在逻辑上等同于 ANSI Serializable。由于 ANSI Serializable 比 ANSI Repeatable Read 更有约束性,因此,当需要 ANSI Repeatable Read 时,可使用 GBase 8s Repeatable Read(虽然 GBase 8s Repeatable Read 在此上下文中比所需的具有更强的约束性)。

Repeatable Read 隔离级别要求数据库服务器在程序检测和访存的每行上都放置锁。对于普通游标放置共享的,对于更新游标放置可提升的。在检测每一行时单独地放置锁。直到该游标关闭或事务结束,才释放它们。

Repeatable Read 允许使用滚动游标的程序多次读取选择了的行,并确保在读取之间不修改或删除它们。(SQL 编程 描述滚动游标。)没有更低的隔离级别保证行依然存在且在第二次读取它们时保持不变。

Repeatable Read 隔离放置最多的锁且保持它们的时间最长。因此,它是降低并发最多的级别。如果您的程序使用此隔离的级别,则请仔细考虑它放置多少锁,保持它们多长时间,以及对其他程序可产生哪些影响。

除了对并发的影响,大量的锁还可是个问题。数据库服务器在锁定表中,按每一程序记录锁的数目。如果超出锁的最大数目,则锁表填满,且数据库服务器不可放置锁。返回一错误代码。管理 GBase 8s 数据库服务器系统的人员可检测该锁定表,并当过度使用它时通知您。

在缺省情况下,在符合 ANSI 的数据库中,将隔离界别设置为 Serializable。需要 Serializable 隔离级别来确保根据 SQL 的 ANSI 标准执行操作。