시간 제한은 다중 서브넷 환경에서 Always On 수신기에 연결할 때 발생합니다.

이 문서는 다중 서브넷 환경에서 SQL Server Always On 가용성 그룹 수신기에 연결할 때 발생하는 문제를 resolve 데 도움이 됩니다.

원래 제품 버전: SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012 Express, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise Core
원래 KB 번호: 2792139

증상

Microsoft SQL Server 2012에서 Always On 가용성 그룹에 대한 가용성 그룹 수신기를 구성한 후에는 수신기를 ping하거나 애플리케이션에서 연결할 수 없습니다.

예를 들어 를 사용하여 SQLCMDSQL Server 수신기에 연결하려고 하면 연결 시간이 초과됩니다. 또한 다음과 유사한 오류 메시지가 표시됩니다.

Sqlcmd: 오류: Microsoft SQL Native Client: 로그인 시간 제한이 만료되었습니다.

참고

이러한 증상은 일반적으로 간헐적이거나 가용성 그룹 리소스의 장애 조치와 관련이 있습니다.

다음 스크린샷은 의 가용성을 위해 수신기를 ping하려고 할 때 발생하는 일의 aglisten예를 보여 줍니다. 스크린샷은 다중 서브넷 장애 조치(failover) 매개 변수 -M를 포함할 때 명령을 사용하여 SQLCMD SQL Server 대한 성공적인 연결을 보여줍니다.

aglisten의 가용성을 위해 수신기를 ping할 때 명령 프롬프트 창의 스크린샷.

참고

스크린샷에 SQLCMD 표시된 것처럼 명령을 매개 변수와 -M 함께 사용하여 수신기에 연결할 수 있습니다.

원인

이 문제는 애플리케이션이 새 MultiSubnetFailover 매개 변수를 지원하지 않는 레거시 데이터 공급자를 사용하거나 이 매개 변수를 사용하도록 구성되지 않았기 때문에 발생합니다.

이 매개 변수는 .NET Framework 4 이상 버전의 .NET Framework 포함된 최신 버전의 SQLClient 드라이버에서 지원되며 .NET Framework 3.5로 다시 이식됩니다.

참고

명령은 PING 새 매개 변수를 지원하지 않는 간단한 연결 테스트 도구입니다.

해결 방법

사례에 해당하는 다음 해결 방법 중 하나를 사용할 수 있습니다.

  • 데이터 공급자가 매개 변수를 지원할 MultiSubNetFailover 때 이 상황을 resolve 연결 문자열 매개 변수를 추가하고 MultiSubNetFailovertrue로 설정합니다.

  • 레거시 클라이언트에서 속성을 사용할 MultiSubnetFailover 수 없는 경우 이 상황을 resolve 수신기 값을 RegisterAllProvidersIP0으로 변경할 수 있습니다. 이렇게 하려면 Windows PowerShell 명령줄 인터페이스에서 다음 명령을 실행합니다.

    Import-Module FailoverClusters
    Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
    

    스크린샷은 Windows PowerShell 명령 예제의 출력을 보여줍니다.

참고

값을 0으로 설정한 RegisterAllProvidersIP 후 현재 온라인 IP 주소는 DNS 서버에서 등록 취소되어야 하며 장애 조치(failover)가 발생할 때 오프라인 IP 주소를 DNS 서버에 등록해야 합니다. 이로 인해 다음 장애 조치(failover)에 대한 연결 지연이 발생할 수 있습니다.

추가 정보

둘 이상의 서브넷에 정의된 수신기에 연결하려고 하면 클라이언트 드라이버가 수신기의 오프라인 IP 주소 중 하나를 사용하여 연결하려고 하면 작업이 실패할 수 있습니다.

수신기를 만들 때 가용성 그룹 복제본(replica) 호스트되는 각 고유 서브넷에 대해 IP 주소가 지정됩니다. 예를 들어 두 서브넷에 복제본이 있는 가용성 그룹에 대해 수신기를 만드는 경우 두 개의 IP 주소가 수신기에 정의됩니다. 한 주소는 서브넷 1의 SQL Server instance 연결할 수 있는 애플리케이션에서 사용되며, 다른 주소는 애플리케이션이 서브넷 2의 SQL Server instance 연결할 때 사용됩니다.

백그라운드에서 수신기는 Windows 클러스터 클라이언트 액세스 지점 리소스를 만듭니다. 속성 중 하나는 입니다 RegisterAllProvidersIP. 수신기가 만들어지면 1로 설정되고 모든 수신기의 IP 주소가 DNS 서버에 등록됩니다. 이 구성은 클라이언트에 대한 다시 연결 시간을 줄입니다.

DNS 레코드에는 모든 IP 주소가 포함되므로 수신기에 연결하려는 클라이언트는 이 상황을 처리하는 방법을 알고 있어야 합니다. MultiSubnetFailover 매개 변수를 사용하면 클라이언트 드라이버가 모든 수신기의 IP 주소와 병렬로 연결을 시도할 수 있습니다. 매개 변수가 MultiSubnetFailover 없으면 클라이언트 드라이버는 수신기의 모든 IP 주소에 순차적으로 연결하려고 합니다. 순차적 연결로 인해 로그온 시간이 길어지거나 로그온 시간이 초과될 수 있습니다.

참고

이 문서에서 언급된 문제는 Always On 가용성 그룹의 보조 읽기 전용 복제본(replica) 사용하도록 구성된 SharePoint 환경에도 영향을 줍니다. 이 문제를 resolve SharePoint 버전에 적용되는 다음 작업 중 어느 것이든 수행합니다.

참조