【问题标题】:Delete an uncommitted inserted row in DB2 (V8.2.7 - Fix 14)删除 DB2 中未提交的插入行 (V8.2.7 - Fix 14)
【发布时间】:2012-09-14 09:10:55
【问题描述】:

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

在测试隔离是否到位时,我插入了一行但没有提交 (DBVisualiser : @set autocommit off + stop VPN connection to the database) 然后我开始测试我的应用程序以实现未提交的插入.

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

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

【问题讨论】:

    标签: db2 read-uncommitted


    【解决方案1】:

    我认为使用普通的 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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 2021-10-28
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多