0

根据客户的要求,我被要求将 Web 应用程序设置为未提交读隔离级别(这可能是个坏主意……)。

在测试隔离是否到位时,我在未提交的情况下插入了一行(DBVisualiser:@set autocommit off + 停止与数据库的 VPN 连接),然后我开始针对未提交的插入测试我的应用程序。

select * from MYTABLE WHERE MY ID = "NON_COMMIT_INSERT_ID" WITH UR工作正常。现在我想“删除”这一行,但我没有找到任何办法......

更新:一段时间后(大约 30 分钟),该行确实消失了。我想在自动发出回滚之前会有某种超时。有没有办法在这种情况发生之前删除未提交的行?

4

2 回答 2

0

我认为使用普通的 SQL 语句这是不可能的——删除行的唯一方法是回滚插入它的事务(或等待 tx 提交,然后删除)。由于您已在网络级别与数据库断开连接,因此您谈论的 30 分钟可能是在操作系统级别强制执行的 TCP 超时。TCP 连接终止后,DB2 自动回滚客户端的事务。

我仍然认为您可以通过管理强制应用程序与数据库断开连接(使用 FORCE APPLICATION 和从 LIST APPLICATIONS 获得的句柄),这应该回滚事务,请参阅http://publib.boulder.ibm.com/infocenter/db2luw/v8/index。 jsp?topic=/com.ibm.db2.udb.doc/core/r0001951.htm以获取有关这些命令的详细信息。

于 2012-09-14T15:05:05.367 回答
0

从数据库中读取未提交的行是一回事。有时这样做有充分的理由(缺少读锁),

在没有提交或回滚的情况下将插入、更新或删除的行留在数据库中是另一回事。你不应该这样做。数据库更改后提交或回滚。

于 2012-09-14T15:11:55.223 回答