perl DBD :: ODBC回滚在启用AutoCommit时无效

时间:2011-08-04 08:03:22

标签: database perl sql-server-2008 transactions

我目前有一个像下面这样的块。因此,我们将autocommit设置为off并执行提交/回滚。现在在回滚线上,我们发现一个失败的说法是“在启用AutoCommit时回滚无效”。怎么会发生这种情况,因为auto_mit确实禁用了AutoCommit。这个问题很长一段时间没有出现,而且突然发生了。

在进一步调查时,我发现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 ...

1 个答案:

答案 0 :(得分:1)

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