적용 대상
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express

증상

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

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.