SQL Server 대 한 JDBC 드라이버를 사용 하 여 SQL Server 연결할 때 분리 된 XA 트랜잭션

증상

XA 트랜잭션, Microsoft SQL Server JDBC 드라이버 및 Microsoft SQL Server 백 엔드 데이터베이스를 사용 하면 있습니다 수 있는 분리 된 SQL Server 보류 중인 트랜잭션을 트랜잭션 관리자는 충돌 또는 연결 문제가 발생 하는 경우.

또한, 다음과 같은 일반적인 문제 중 하나가 발생할 수 있습니다.

  • 보류 중인 트랜잭션은 SQL Server 인스턴스에 대해 오랜 시간 동안. 데이터베이스에는 null 이나 -2 의 세션 ID 있을 수 있습니다.

  • -2 의 세션 id가 있는 트랜잭션을 하 여 오랜 시간 동안 트랜잭션은 차단 이렇게 하면 잠금 제한 또는 고정 하는 스레드.

원인

트랜잭션 관리자와 SQL Server 간의 연결이 끊어지면는 준비 되지 않은 트랜잭션에 대 한 SQL Server JDBC 드라이버 정리 이러한 트랜잭션이 리소스를 사용 하 여 다른 트랜잭션을 차단 계속 되 고 있습니다. SQL Server 대 한 JDBC 드라이버에서 XA 구현으로 인해 SQL Server 트랜잭션 관리자의 비정상적인 연결 끊기 감지할 수 없습니다. 따라서 SQL Server 대 한 이러한 트랜잭션을 유지 시스템에 XA 트랜잭션 제한 시간을 초과 하거나 데이터베이스를 다시 시작할 때까지. 시간 제한이 무한대를 사용 하 여 SQL Server 인스턴스에 대해 이며 데이터베이스에서 구성할 수 없습니다.

해결 방법

이 문제를 해결 하려면 다음 방법 중 하나를 사용 합니다.

  • 모든 Java 가상 머신 (JVM) 충돌이 발생 하면 네트워크 연결 문제에 대해 이러한 고아 트랜잭션 발생 시키는 또는 데이터베이스 서버를 다시 시작 합니다.

  • 데이터베이스에서 해당 리소스를 정리할 수 개별적으로 분리 된 거래를 중지 합니다. 트랜잭션이 분리 되 확인 된 의심 아닌지 선택 되어 있는지 확인 합니다 (준비) 트랜잭션 또는 현재 완료 됩니다. 모든 트랜잭션은 복구 주기 및 JVM 관련된 된 다시 시작을 통해 지속 되는 분리 됩니다.

  • XA 트랜잭션에 대 한 시간 제한 값이 초과 되는 즉시 중지 하도록 긴 트랜잭션을 보다 긴 시간 제한 값을 설정 합니다. 이렇게 하려면 XAResource.setTransactionTimeout() 메서드를 호출 합니다.

  • 많은 다른 공급 업체 트랜잭션 관리자 XAResource 개체 호출 코드에 의해 직접 액세스 되지 않으면 하 고 트랜잭션 관리자는 트랜잭션 시간 제한 값을 설정 하지 않습니다. 이 경우 트랜잭션 제한 시간을 새 기본값으로 설정 하려면 외부 응용 프로그램을 사용할 수 있습니다. 이 새로운 기본 트랜잭션 제한 시간을 지정 하지 않은 모든 트랜잭션에 의해 사용 됩니다.

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

번역 품질에 얼마나 만족하시나요?

사용 경험에 어떠한 영향을 주었나요?

추가 피드백이 있으신가요? (선택 사항)

소중한 의견에 감사드립니다.

×