【问题标题】:How to obtain current isolation level on DB2?如何获取 DB2 上的当前隔离级别?
【发布时间】:2011-06-24 05:40:36
【问题描述】:

我正在尝试了解事务在 DB 中的工作方式,为此我编写了以下测试 SQL:

SAVEPOINT STOP_HERE ON ROLLBACK RETAIN CURSORS;

INSERT INTO TESTSCHEMA."test" (ID, NAME) VALUES (89898, 'SDFASDFASD');

ROLLBACK TO SAVEPOINT STOP_HERE;

SELECT * FROM TESTSCHEMA."test";

执行此代码后,将一行添加到表中。但是如果我在开头添加以下行:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

所有工作都如我所料,即事务正确回滚并且数据库中没有新条目,但如果我再次运行此代码,Data Studio 会在第一行显示错误:

[SQL0428] SQL statement can not be launched.

所以我的问题是: 有没有办法获得当前的隔离级别,为什么我不能设置隔离级别超过 1 次?

非常感谢所有答案和链接。

附言。我正在使用 DB2/iSeries V5R4。

PPS。对不起我的英语不好

【问题讨论】:

  • 您是否在每个 set 语句之后执行 SQL COMMIT?
  • 不,只是我在问题正文中发布的 SQL
  • 对于您的驱动程序,请尝试getDefaultTransactionIsolation()

标签: transactions db2 ibm-midrange isolation-level


【解决方案1】:

您可能可以从特殊寄存器current isolation 获取当前隔离级别。您收到 SQL0428 是因为您在设置隔离级别之前没有 COMMIT 或 ROLLBACK,并且该会话中仍有事务在处理中。

【讨论】:

猜你喜欢
  • 2021-12-04
  • 2011-03-26
  • 2018-10-20
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
相关资源
最近更新 更多