【问题标题】:perl DBD::ODBC rollback ineffective with AutoCommit enabled atperl DBD::ODBC 回滚在启用 AutoCommit 时无效
【发布时间】:2011-08-04 08:03:21
【问题描述】:

我目前有一个像下面这样的块。因此,我们将自动提交设置为关闭并执行提交/回滚。现在在回滚行,我们收到一条失败消息,提示“在启用 AutoCommit 时回滚无效”。既然 AutoCommit 确实被 begin_work 禁用了,这怎么可能发生。这个问题很久没有出现了,突然出现了。

在进一步调查中,我发现 update_sql1 创建了一个 #temp 表,而 update_sql2,update_sql3,update_sql4 查询同一个 #temp 表,并且因无效对象名称“#temp”错误而失败。立即控制流到 if($@) ,其中 $dbh->{AutoCommit} 设置为 1。首先,当 update_sql1 确实成功时,为什么 update_sql2 及以后的计数找不到对象 #temp 真的很奇怪。

任何指针?

====

$dbh->db_Main()->begin_work;

eval {

 $dbh->do($update_sql1);
 $dbh->do($update_sql2);
 $dbh->do($update_sql3);
 $dbh->do($update_sql4);
 $dbh->commit;
 1;
}

if ($@) {
 $logger->info("inside catch");
 $logger->info("autocommit is $dbh->{AutoCommit}");
 $dbh->rollback;

}

===

这是完整的错误信息

Issuing rollback() due to DESTROY without explicit disconnect() of DBD::ODBC::db handle ..
rollback ineffective with AutoCommit enabled ...

【问题讨论】:

    标签: database perl sql-server-2008 transactions


    【解决方案1】:

    在自动提交下,begin 启动一个事务,该事务被自动提交。您必须关闭 AutoCommit 才能获得交易。

    【讨论】:

    • 我在调用 begin_work 后开始 tran。这会将 AutoCommit 设置为 false
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    相关资源
    最近更新 更多