복붙노트

[SQL] 연결이 닫힐 때 어떤 커밋되지 않은 트랜잭션이 어떻게됩니까?

SQL

연결이 닫힐 때 어떤 커밋되지 않은 트랜잭션이 어떻게됩니까?

그들은 즉시 다시 굴러 있습니까? 그들은 일정 기간 후 롤백 있습니까? 그들은 커밋되지 않은 상태로 남아 있습니까?

연결 풀링이 사용하고 연결이 간단하게 재설정하는 경우 동작은 동일합니까?

해결법

  1. ==============================

    1.연결 풀링을 적용하면서 오픈 머물 수 있습니다. 예 : 클라이언트가 "중단"으로 보내기 때문에 명령 제한 시간은 잠금 및 TXN을 남길 수 있습니다.

    연결 풀링을 적용하면서 오픈 머물 수 있습니다. 예 : 클라이언트가 "중단"으로 보내기 때문에 명령 제한 시간은 잠금 및 TXN을 남길 수 있습니다.

    이 개 솔루션 :

    나는 항상 SET XACT_ABORT ON을 사용합니다.

    이 SQL 팀 블로그에서 :

    MSDN에서, 섹션 "트랜잭션 지원"(내 굵은)

  2. ==============================

    2.커밋 변경 연결 밖에서 보이지 그래서 롤백시는 무관하다. 그래서 그래, 트랜잭션은 결국 롤백됩니다.

    커밋 변경 연결 밖에서 보이지 그래서 롤백시는 무관하다. 그래서 그래, 트랜잭션은 결국 롤백됩니다.

  3. ==============================

    3.세션이 닫힐 때 서버는 immedeatly 어떤 미트되지 않은 트랜잭션을 롤백합니다. 도핑 풀은 풀에 거래를 반환하기 전에 미트되지 않은 트랜잭션을 취소에 대한 책임을지고있는 것입니다. 보류중인 거래와의 연결을 처분 할 경우 롤백됩니다.

    세션이 닫힐 때 서버는 immedeatly 어떤 미트되지 않은 트랜잭션을 롤백합니다. 도핑 풀은 풀에 거래를 반환하기 전에 미트되지 않은 트랜잭션을 취소에 대한 책임을지고있는 것입니다. 보류중인 거래와의 연결을 처분 할 경우 롤백됩니다.

    거래는 ADO의 API (SqlConnection.BeginTransaction)를 사용하여 클라이언트에 의해 또는이 TRANSACTION 문을 BEGIN 실행하여 시작할 수 있습니다. 클라이언트와 서버 사이의 TDS 프로토콜은 트랜잭션이 ADO 그들이 T-SQL 코드에서 시작되는 경우에도 연결이 트랜잭션을 보류중인 것을 알 수 있도록 다음과 같이 최선을 다하고 / 시작되었을 때 클라이언트를 알리는 특별 토큰을 가지고있다.

  4. from https://stackoverflow.com/questions/1539564/what-happens-to-an-uncommitted-transaction-when-the-connection-is-closed by cc-by-sa and MIT license