Откат perl DBD :: ODBC неэффективен при включенном AutoCommit при - PullRequest
1 голос
/ 04 августа 2011

У меня сейчас блок, как показано ниже. Таким образом, мы отключаем автокоммит и делаем коммит / откат. Теперь на линии отката мы получаем сообщение о том, что «откат не эффективен при включенном AutoCommit». Как это могло произойти, так как AutoCommit действительно был отключен begin_work. Эта проблема не существовала в течение длительного времени, и она внезапно возникает.

При дальнейших исследованиях я обнаружил, что update_sql1 создал таблицу #temp, а update_sql2, update_sql3, update_sql4 запросили ту же самую таблицу #temp, и произошел сбой с ошибочным именем объекта '#temp'. Немедленно поток управления переходит к if ($ @), где $ dbh -> {AutoCommit} установлен в 1. Прежде всего, его действительно странно, почему update_sql2 и далее считают, не находят объект #temp, когда update_sql1 действительно был успешным.

Есть указатели?

====

$ 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 Ответ

1 голос
/ 04 августа 2011

При автоматической фиксации begin запускает транзакцию, которая автоматически фиксируется. Вы должны отключить AutoCommit, чтобы получить транзакцию.

...