【发布时间】: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