단일 트랜잭션에서 많은 데이터베이스 업데이트를 수행하는 흥미로운 상황을 다루고 있습니다. 어떠한 이유로 든 이러한 업데이트가 실패하면 트랜잭션은 롤백됩니다.IDbTransaction 롤백 시간 초과
IDbTransaction transaction
try {
transaction = connection.BeginTransaction();
// do lots of updates (where at least one fails)
transaction.Commit();
} catch {
transaction.Rollback(); // results in a timeout exception
} finally {
connection.Dispose();
}
위의 코드는 일반적으로 트랜잭션 내에서 데이터베이스 업데이트를 수행하기위한 표준 템플릿으로 간주됩니다.
내가 직면 한 문제는 transaction.Rollback()이 SQL Server에 발급되는 동안 클라이언트에서도 시간이 초과된다는 것입니다.
롤백 명령을 실행하기위한 시간 초과와 실행을 완료하는 해당 명령의 시간 초과를 구별 할 수 있습니까? 사전에
감사합니다, 벤
나는 transaction.Rollback() 메서드 호출의 문서화되지 않은 시간 제한 예외 (그리고 다른 사람을) 잡을 수 있지만, 정확히 어떻게 내가 롤백이 발생 여부 알 수 있어야합니다. 두 가지 시나리오에서 타임 아웃 예외가 발생할 것이라고 생각합니다. 롤백 명령이 SQL Server에 발급 될 수없는 경우 첫 번째이고 롤백 명령이 실행 된 경우 두 번째 SQL Server가 너무 오래 걸리는 경우 ... –
위 예제의 추가 구현을 보았습니다. 롤백 메서드 호출이므로 여기서 롤백 프로 시저 자체가 던진 예외를 catch합니다. 다시 이것은 롤백 할 수 없으면 SQL 예외 일 수 있습니다. 예외는 특정 트랜잭션 관련 오류에 대한 시간 초과 또는 잘못된 연산으로 간주합니다. –