다음을 통해 공유


고가용성 재해 복구를 위한 SQL Server Native Client 지원

이 항목에서는 Always On 가용성 그룹에 대한 SQL Server Native Client 지원(SQL Server 2012에 추가됨)에 대해 설명합니다. Always On 가용성 그룹에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(failover),가용성 그룹 만들기 및 구성(SQL Server), 장애 조치(failover) 클러스터링 및 AlwaysOn 가용성 그룹(SQL Server) 및활성 보조 복제본: 읽기 가능한 보조 복제본(AlwaysOn 가용성 그룹)을 참조하세요.

연결 문자열에서 지정된 가용성 그룹의 가용성 그룹 수신기를 지정할 수 있습니다. SQL Server Native Client 애플리케이션이 장애 조치(failover)되는 가용성 그룹의 데이터베이스에 연결된 경우 원래 연결이 끊어지고 애플리케이션이 장애 조치(failover) 후 작업을 계속하려면 새 연결을 열어야 합니다.

가용성 그룹 수신기에 연결하지 않고 여러 IP 주소가 호스트 이름과 연결된 경우 SQL Server Native Client는 DNS 항목과 연결된 모든 IP 주소를 순차적으로 반복합니다. DNS 서버에서 반환된 첫 번째 IP 주소가 NIC(네트워크 인터페이스 카드)에 바인딩되지 않은 경우 시간이 오래 걸릴 수 있습니다. 가용성 그룹 수신기에 연결할 때 SQL Server Native Client는 모든 IP 주소에 대한 연결을 병렬로 설정하려고 시도하며 연결 시도가 성공하면 드라이버는 보류 중인 연결 시도를 모두 삭제합니다.

비고

연결 시간 제한을 늘리고 연결 재시도 논리를 구현하면 애플리케이션이 가용성 그룹에 연결할 확률이 높아질 수 있습니다. 또한 가용성 그룹 장애 조치(failover)로 인해 연결이 실패할 수 있으므로 연결 재시도 논리를 구현하여 연결이 다시 연결될 때까지 실패한 연결을 다시 시도해야 합니다.

MultiSubnetFailover를 사용하여 연결

SQL Server 2012 가용성 그룹 수신기 또는 SQL Server 2012 장애 조치(failover) 클러스터 인스턴스에 연결할 때 항상 지정 MultiSubnetFailover=Yes 합니다. MultiSubnetFailover 는 SQL Server 2012의 모든 가용성 그룹 및 장애 조치(failover) 클러스터 인스턴스에 대해 더 빠른 장애 조치(failover)를 가능하게 하며 단일 및 다중 서브넷 AlwaysOn 토폴로지의 장애 조치(failover) 시간을 크게 줄입니다. 다중 서브넷 장애 조치(failover) 중에 클라이언트는 병렬로 연결을 시도합니다. 서브넷 장애 조치(failover) 중에 SQL Server Native Client는 TCP 연결을 적극적으로 다시 시도합니다.

연결 속성은 MultiSubnetFailover 애플리케이션이 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스에 배포되고 있으며 SQL Server Native Client가 모든 IP 주소에 연결하려고 시도하여 주 SQL Server 인스턴스의 데이터베이스에 연결하려고 했음을 나타냅니다. 연결에 대해 지정된 경우 MultiSubnetFailover=Yes 클라이언트는 운영 체제의 기본 TCP 재전송 간격보다 더 빠르게 TCP 연결을 다시 시도합니다. 이렇게 하면 AlwaysOn 가용성 그룹 또는 AlwaysOn 장애 조치(failover) 클러스터 인스턴스의 장애 조치(failover) 후 더 빠르게 다시 연결할 수 있으며, 단일 및 다중 서브넷 가용성 그룹 및 장애 조치(failover) 클러스터 인스턴스 모두에 적용할 수 있습니다.

연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.

MultiSubnetFailover=Yes 가용성 그룹 수신기 또는 장애 조치(failover) 클러스터 인스턴스가 아닌 다른 항목에 연결할 때 지정하면 성능에 부정적인 영향을 미칠 수 있으며 지원되지 않습니다.

다음 지침을 사용하여 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스의 서버에 연결합니다.

  • MultiSubnetFailover 단일 서브넷 또는 다중 서브넷에 연결할 때 연결 속성을 사용하면 둘 다의 성능이 향상됩니다.

  • 가용성 그룹에 연결하려면 가용성 그룹의 가용성 그룹 수신기를 연결 문자열의 서버로 지정합니다.

  • 64개 이상의 IP 주소로 구성된 SQL Server 인스턴스에 연결하면 연결이 실패합니다.

  • 연결 속성을 사용하는 MultiSubnetFailover 애플리케이션의 동작은 인증 유형(SQL Server 인증, Kerberos 인증 또는 Windows 인증)에 따라 영향을 받지 않습니다.

  • 장애 조치(failover) 시간에 맞게 값을 loginTimeout 늘리고 애플리케이션 연결 다시 시도 시도를 줄일 수 있습니다.

  • 분산 트랜잭션은 지원되지 않습니다.

읽기 전용 라우팅이 적용되지 않으면 다음과 같은 상황에서 가용성 그룹의 보조 복제본 위치에 연결하지 못합니다.

  1. 보조 복제본 위치가 연결을 허용하도록 구성되지 않은 경우

  2. 애플리케이션에서 사용 ApplicationIntent=ReadWrite (아래 설명)하고 보조 복제본 위치가 읽기 전용 액세스용으로 구성된 경우

주 복제본이 읽기 전용 워크로드를 거부하도록 구성되고 연결 문자열에 포함된 경우 연결이 실패합니다 ApplicationIntent=ReadOnly.

데이터베이스 미러링에서 다중 서브넷 클러스터를 사용하도록 업그레이드

연결 문자열에 MultiSubnetFailover 연결 키워드와 Failover_Partner 연결 키워드가 있으면 연결 오류가 발생합니다. 사용하는 경우에도 MultiSubnetFailover 오류가 발생하고 SQL Server는 데이터베이스 미러링 쌍의 일부임을 나타내는 장애 조치(failover) 파트너 응답을 반환합니다.

현재 데이터베이스 미러링을 사용하는 SQL Server Native Client 애플리케이션을 다중 서브넷 시나리오로 업그레이드하는 경우 연결 속성을 제거하고 Failover_Partner 설정 Yes 으로 MultiSubnetFailover 바꾸고 연결 문자열의 서버 이름을 가용성 그룹 수신기로 바꿔야 합니다. 연결 문자열이 사용하고 Failover_PartnerMultiSubnetFailover=Yes있으면 드라이버에서 오류가 생성됩니다. 그러나 연결 문자열이 사용 Failover_Partner 하거나 MultiSubnetFailover=No 애플리케이션 ApplicationIntent=ReadWrite에서 데이터베이스 미러링을 사용하는 경우

가용성 그룹의 주 데이터베이스에서 데이터베이스 미러링을 사용하고 가용성 그룹 수신기 대신 주 데이터베이스에 연결하는 연결 문자열에서 사용되는 경우 MultiSubnetFailover=Yes 드라이버가 오류를 반환합니다.

애플리케이션 의도 지정

이 경우 ApplicationIntent=ReadOnly클라이언트는 AlwaysOn 사용 데이터베이스에 연결할 때 읽기 워크로드를 요청합니다. 서버는 연결 시 및 USE 데이터베이스 문 중에 의도를 적용하지만 Always On이 설정된 데이터베이스에만 적용합니다.

키워드는 ApplicationIntent 레거시 읽기 전용 데이터베이스에서 작동하지 않습니다.

데이터베이스는 대상 AlwaysOn 데이터베이스에서 읽기 워크로드를 허용하거나 허용하지 않습니다. (이 작업은 문 및 SECONDARY_ROLETransact-SQL 절 PRIMARY_ROLE 을 사용하여 수행 ALLOW_CONNECTIONS 됩니다.)

ApplicationIntent 워드는 읽기 전용 라우팅을 사용하도록 설정하는 데 사용됩니다.

읽기 전용 라우팅

읽기 전용 라우팅은 데이터베이스의 읽기 전용 복제본의 가용성을 보장할 수 있는 기능입니다. 읽기 전용 라우팅을 사용하도록 설정하려면 다음을 수행합니다.

  1. Always On 가용성 그룹 가용성 그룹 수신기에 연결해야 합니다.

  2. 연결 문자열 키워드를 ApplicationIntent .로 ReadOnly설정해야 합니다.

  3. 읽기 전용 라우팅을 사용하도록 설정하려면 데이터베이스 관리자가 가용성 그룹을 구성해야 합니다.

읽기 전용 라우팅을 사용하는 여러 연결이 모두 동일한 읽기 전용 복제본에 연결되지 않을 수 있습니다. 데이터베이스 동기화가 변경되거나 서버의 라우팅 구성이 변경되면 클라이언트가 다른 읽기 전용 복제본에 연결될 수 있습니다. 모든 읽기 전용 요청이 동일한 읽기 전용 복제본에 연결되도록 하려면 가용성 그룹 수신기를 연결 문자열 키워드에 Server 전달하지 마세요. 대신 읽기 전용 인스턴스의 이름을 지정합니다.

읽기 전용 라우팅은 읽기 전용 라우팅이 먼저 주 데이터베이스에 연결한 다음, 사용 가능한 최상의 읽기 가능한 보조 복제본을 찾기 때문에 주 데이터베이스에 연결하는 것보다 더 오래 걸릴 수 있습니다. 이 때문에 로그인 시간 제한을 늘려야 합니다.

ODBC (오픈 데이터베이스 연결)

SQL Server Native Client에서 Always On 가용성 그룹을 지원하기 위해 두 개의 ODBC 연결 문자열 키워드가 추가되었습니다.

  • ApplicationIntent

  • MultiSubnetFailover

SQL Server Native Client의 ODBC 연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.

해당하는 연결 속성은 다음과 같습니다.

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

SQL Server Native Client의 ODBC 연결 속성에 대한 자세한 내용은 SQLSetConnectAttr를 참조하세요.

MultiSubnetFailover 키워드의 ApplicationIntent 기능은 SQL Server 2012부터 SQL Server Native Client 드라이버를 사용하는 DSN용 ODBC 데이터 원본 관리자에 노출됩니다.

SQL Server Native Client ODBC 애플리케이션은 세 가지 함수 중 하나를 사용하여 연결할 수 있습니다.

기능 설명
SQLBrowseConnect 반환된 SQLBrowseConnect 서버 목록에는 VNN이 포함되지 않습니다. 서버가 독립 실행형 서버인지 또는 Always On 가용성 그룹에 대해 사용하도록 설정된 두 개 이상의 SQL Server 인스턴스가 포함된 WSFC(Windows Server 장애 조치(failover) 클러스터링) 클러스터의 주 또는 보조 서버인지에 대한 표시 없이 서버 목록이 표시됩니다. 서버에 연결하여 오류가 발생하면 서버에 연결되어 있고 설정이 서버 구성과 ApplicationIntent 호환되지 않기 때문일 수 있습니다.

Always On 가용성 그룹에 SQLBrowseConnect 대해 사용하도록 설정된 두 개 이상의 SQL Server 인스턴스가 포함된 WSFC(Windows Server 장애 조치(failover) 클러스터링) 클러스터에서 서버를 인식하지 못하므로 SQLBrowseConnect 연결 문자열 키워드를 MultiSubnetFailover 무시합니다.
SQLConnect SQLConnect 는 DSN(데이터 원본 이름) 또는 연결 속성을 둘 다 ApplicationIntentMultiSubnetFailover 지원합니다.
SQLDriverConnect SQLDriverConnectApplicationIntentMultiSubnetFailover 연결 문자열 키워드, 연결 속성 또는 DSN을 지원합니다.

OLE DB

SQL Server Native Client의 OLE DB는 키워드를 MultiSubnetFailover 지원하지 않습니다.

SQL Server Native Client의 OLE DB는 애플리케이션 의도를 지원합니다. 애플리케이션 의도는 ODBC 애플리케이션과 OLE DB 애플리케이션에 대해 동일하게 작동합니다(위 참조).

SQL Server Native Client에서 Always On 가용성 그룹을 지원하기 위해 추가된 OLE DB 연결 문자열 키워드 1개:

  • Application Intent

SQL Server Native Client의 연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.

해당하는 연결 속성은 다음과 같습니다.

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

SQL Server Native Client OLE DB 애플리케이션은 다음 방법 중 하나를 사용하여 애플리케이션 의도를 지정할 수 있습니다.

IDBInitialize::Initialize
IDBInitialize::Initialize 는 이전에 구성된 속성 집합을 사용하여 데이터 원본을 초기화하고 데이터 원본 개체를 만듭니다. 애플리케이션 의도를 공급자 속성 또는 확장 속성 문자열의 일부로 지정합니다.

IDataInitialize::GetDataSource
IDataInitialize::GetDataSource 는 키워드를 포함할 수 있는 입력 연결 문자열을 사용합니다 Application Intent .

IDBProperties::GetProperties
IDBProperties::GetProperties 는 현재 데이터 원본에 설정된 속성의 값을 검색합니다. DBPROP_INIT_PROVIDERSTRING 속성 및 SSPROP_INIT_APPLICATIONINTENT 속성을 통해 값을 검색 Application Intent 할 수 있습니다.

IDBProperties::SetProperties
속성 값을 설정 ApplicationIntent 하려면 값이 "" 또는 ""인 속성을 호출하거나 DBPROP_INIT_PROVIDERSTRING "ReadWrite" 또는 "ApplicationIntent=ReadOnlyReadOnlyApplicationIntent=ReadWrite"가 포함된 값을 가진 속성을 전달 IDBProperties::SetPropertiesSSPROP_INIT_APPLICATIONINTENT 합니다.

데이터 링크 속성 대화 상자의 모든 탭에 있는 애플리케이션 의도 속성 필드에서 애플리케이션 의도를 지정할 수 있습니다.

암시적 연결이 설정되면 암시적 연결은 부모 연결의 애플리케이션 의도 설정을 사용합니다. 마찬가지로 동일한 데이터 원본에서 만든 여러 세션은 데이터 원본의 애플리케이션 의도 설정을 상속합니다.

또한 참조하십시오

SQL Server Native Client 기능
SQL Server Native Client에서 연결 문자열 키워드 사용