2011-08-04 11 views
1

현재 아래와 같은 블록이 있습니다. 그래서 우리는 자동 커밋을 해제하고 커밋/롤백을 수행합니다. 이제 롤백 라인에서 우리는 "AutoCommit으로 비효율적 인 롤백이 활성화되었습니다"라는 오류가 발생합니다. AutoCommit이 실제로 begin_work에 의해 비활성화 되었기 때문에 어떻게 될 수 있습니까? 이 문제는 오랫동안 존재하지 않았고 갑자기 발생했습니다.perl DBD :: ODBC 롤백은 AutoCommit이 활성화 된 경우 효과가 없음

더 자세히 살펴보면 update_sql1이 #temp 테이블을 만들고 update_sql2, update_sql3, update_sql4가 동일한 #temp 테이블을 쿼리하고 잘못된 개체 이름 '#temp'오류로 실패하는 것으로 나타났습니다. 즉, $ dbh -> {AutoCommit}이 1로 설정된 if ($ @) 로의 흐름을 제어합니다. 우선 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 ([email protected]) { 
$logger->info("inside catch"); 
$logger->info("autocommit is $dbh->{AutoCommit}"); 
$dbh->rollback; 

} 

=== 여기

begin가 자동으로 최선을 다하고 있습니다 트랜잭션을 시작, 전체 오류 메시지가 자동 커밋에서

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

답변

1

입니다. 거래를하려면 AutoCommit을 꺼야합니다.

+0

begin_work를 호출 한 후 tran을 시작합니다. AutoCommit을 false로 설정합니다. –

관련 문제