다음을 통해 공유


SQL Server 용 OLE DB 드라이버의 고가용성, 재해 복구 지원

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB 드라이버 다운로드

이 문서에서는 Always On 가용성 그룹에 대한 OLE DB Driver for SQL Server 지원에 대해 설명합니다. Always On 가용성 그룹에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(Failover)(SQL Server), 가용성 그룹의 생성 및 구성(SQL Server), 장애 조치(Failover) 클러스터링 및 Always On 가용성 그룹(SQL Server)활성 보조: 읽기 가능한 보조 복제본(Always On 가용성 그룹)을 참조하세요.

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

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

참고 항목

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

MultiSubnetFailover로 연결

SQL Server Always On 가용성 그룹 수신기 또는 SQL Server 장애 조치(failover) 클러스터 인스턴스에 연결할 때는 항상 MultiSubnetFailover=Yes를 지정합니다. MultiSubnetFailover 를 사용하면 SQL Server의 모든 Always On 가용성 그룹 및 장애 조치(failover) 클러스터 인스턴스에 대해 더 빠른 장애 조치(failover)를 수행할 수 있으며 단일 및 다중 서브넷 Always On 토폴로지의 장애 조치(failover) 시간을 크게 줄일 수 있습니다. 다중 서브넷 장애 조치(Failover) 중에는 클라이언트가 연결을 병렬로 시도합니다. 서브넷 장애 조치(failover) 중에 OLE DB Driver for SQL Server는 TCP 연결을 다시 시도합니다.

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

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

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

다음 지침에 따라 가용성 그룹의 서버 또는 장애 조치(failover) 클러스터 인스턴스로 연결하세요.

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

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

  • IP 주소가 64개 이상으로 구성된 SQL Server 인스턴스에 연결하면 연결 오류가 발생합니다.

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

  • 장애 조치(failover) 시간을 수용하고 애플리케이션 연결 재시도 시도를 줄이기 위해 loginTimeout값을 늘릴 수 있습니다.

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

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

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

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

주 복제본이 읽기 전용 작업을 거부하도록 구성되어 있고 연결 스트링에 ApplicationIntent=ReadOnly가 포함되어 있으면 연결이 실패합니다.

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

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

현재 데이터베이스 미러링을 사용하는 OLE DB Driver for SQL Server 애플리케이션을 다중 서브넷 시나리오로 업그레이드하는 경우 Failover_Partner 연결 속성을 제거하고 Yes로 설정된 MultiSubnetFailover바꾸고 연결 문자열 서버 이름을 가용성 그룹 수신기로 바꿔야 합니다. 연결 문자열 Failover_PartnerMultiSubnetFailover=Yes를 사용하는 경우 드라이버는 오류를 생성합니다. 그러나 연결 문자열 Failover_Partner 및 MultiSubnetFailover=No(또는 ApplicationIntent=ReadWrite)를 사용하는 경우 애플리케이션은 데이터베이스 미러링을 사용합니다.

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

애플리케이션 의도 지정

연결 문자열에 키워드 ApplicationIntent를 지정할 수 있습니다. 할당 가능한 값은 ReadWrite(기본값) 또는 ReadOnly입니다.

ApplicationIntent=ReadOnly를 설정하면 클라이언트는 연결 시 읽은 워크로드를 요청합니다. 서버는 연결 시 및 USE 데이터베이스 문 중에 의도를 적용합니다.

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

ReadOnly의 대상

연결이 ReadOnly를 선택하면 데이터베이스에 대해 존재할 수 있는 다음 특수 구성 중 하나에 연결이 할당됩니다.

  • Always On. 데이터베이스는 대상 가용성 그룹 데이터베이스에 대한 읽기 워크로드를 허용하거나 허용하지 않을 수 있습니다. 이 선택은 PRIMARY_ROLESECONDARY_ROLE Transact-SQL 문의 ALLOW_CONNECTIONS절을 사용하여 제어됩니다.

  • 지역에서 복제

  • 읽기 확장

이러한 특수 대상을 사용할 수 없는 경우 일반 데이터베이스를 읽습니다.

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

읽기 전용 라우팅

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

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

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

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

각각 읽기 전용 라우팅을 사용하는 여러 연결이 동일한 읽기 전용 복제본에 연결되지 않을 수 있습니다. 데이터베이스 동기화를 변경하거나 서버 라우팅 구성을 변경하면 클라이언트를 다른 읽기 전용 복사본에 연결할 수 있습니다.

가용성 그룹 수신기를 Server 연결 스트링 키워드에 전달하지 않고 모든 읽기 전용 요청을 동일한 읽기 전용 복제본에 연결할 수 있습니다. 대신, 읽기 전용 인스턴스의 이름을 지정합니다.

읽기 전용 라우팅은 주 복제본에 연결하는 것보다 시간이 더 오래 걸릴 수도 있습니다. 읽기 전용 라우팅은 먼저 주 복제본에 연결한 다음, 가장 잘 읽을 수 있는 보조 복제본을 찾기 때문입니다. 이렇게 단계가 여럿이기 때문에 login 제한 시간을 30초 이상으로 늘려야 합니다.

OLE DB

OLE DB Driver for SQL Server는 ApplicationIntentMultiSubnetFailover 키워드를 모두 지원합니다.

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

  • ApplicationIntent
  • MultiSubnetFailover

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

Application Intent

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

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

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

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

  • IDataInitialize::GetDataSource
    IDataInitialize::GetDataSource는 애플리케이션 의도 키워드를 포함할 수 있는 입력 연결 문자열 사용합니다.

  • IDBProperties::SetProperties
    ApplicationIntent 속성 값을 설정하려면 "ReadWrite" 또는 "ReadOnly" 또는 "ApplicationIntent=ReadWrite" 또는 "ApplicationIntent=ReadWrite"가 포함된 값이 있는 DBPROP_INIT_PROVIDERSTRING 속성을 사용하여 SSPROP_INIT_APPLICATIONINTENT 속성을 전달하는 IDBProperties::SetProperties를 호출합니다.

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

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

MultiSubnetFailover

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

  • SSPROP_INIT_MULTISUBNETFAILOVER

  • DBPROP_INIT_PROVIDERSTRING

OLE DB Driver for SQL Server 애플리케이션에서는 다음 방법 중 하나를 사용하여 MultiSubnetFailover 옵션을 설정할 수 있습니다.

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

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

  • IDBProperties::SetProperties
    MultiSubnetFailover 속성 값을 설정하려면 "MultiSubnetFailover=Yes" 또는 "MultiSubnetFailover=No"가 포함된 값이 있는 값 VARIANT_TRUE 또는 VARIANT_FALSE 또는 DBPROP_INIT_PROVIDERSTRING 속성으로 SSPROP_INIT_MULTISUBNETFAILOVER 속성을 전달하는 IDBProperties::SetProperties를 호출합니다.

예시

DBPROP rgPropMultisubnet;

rgPropMultisubnet.dwPropertyID = SSPROP_INIT_MULTISUBNETFAILOVER;
rgPropMultisubnet.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMultisubnet.dwStatus = DBPROPSTATUS_OK;
rgPropMultisubnet.colid = DB_NULLID;
V_VT(&(rgPropMultisubnet.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMultisubnet.vValue)) = VARIANT_TRUE;

DBPROPSET PropSet;

PropSet.rgProperties = &rgPropMultisubnet;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;
IDBProperties* pIDBProperties = NULL;
hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void **)&pIDBProperties);
pIDBProperties->SetProperties(1, &PropSet);

참고 항목

SQL Server 기능용 OLE DB 드라이버
SQL Server용 OLE DB 드라이버에서 연결 문자열 키워드 사용