隔离级别的影响

您不可在没有日志记录的数据库中设置事务隔离级别。在这样的数据库中发生的每次检索都作为 Dirty Read。

从 BYTE 或 TEXT 列检索的数据可有所不同,这依赖于事务隔离级别。在 Dirty Read 或 Committed Read 隔离级别之下,进程可读取或被删除的(如果该删除尚未提交的话)或在正被删除的进程之中的 BYTE 或 TEXT 列。在这些隔离级别之下,在某些情况下,被删除的数据是可读的。要获取更过关于这些情况的信息,请参阅 GBase 8s 管理员指南

当您使用 DB-Access 时,由于您使用更高的隔离级别,所以锁冲突发生得更频繁。例如,如果您使用 Cursor Stability,则与您使用 Committed Read 相比,会发生更多的锁冲突。

GBase 8s ESQL/C 事务中使用滚动游标,或通过将级别设置为 Repeatable Read,或通过在事务期间锁定整个表,您可在您的临时表与数据库表之间强制一致性。

如果您在事务中使用滚动游标 WITH HOLD,则您不可在您的临时表与数据库表之间强制一致性。当事务完成时,释放表级锁或通过 Repeatable Read 设置的锁,但处于保持状态的滚动游标在事务结束之外仍保持打开。事务一结束,您就可修改释放了的行,但在临时表中的被检索的数据可能与实际数据不一致。
Attention: 请不要在事务内使用无日志记录的表。如果您需要在事务内使用无日志记录的表,则或者将隔离级别设置为 Repeatable Read,或者以 Exclusive 模式锁定该表来防止并发问题。