고가용성 재해 복구를 위한 SQL Server Native Client 지원SQL Server Native Client Support for High Availability, Disaster Recovery

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스예Azure SQL 데이터 웨어하우스 예 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

이 항목에서는 SQL ServerSQL Server에 대한 SQL Server 2012(11.x)SQL Server 2012 (11.x) Native Client 지원( Always On 가용성 그룹Always On availability groups에 추가됨)에 대해 설명합니다.This topic discusses SQL ServerSQL Server Native Client support (added in SQL Server 2012(11.x)SQL Server 2012 (11.x)) for Always On 가용성 그룹Always On availability groups. Always On 가용성 그룹Always On availability groups에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 응용 프로그램 장애 조치(Failover)(SQL Server), 가용성 그룹의 생성 및 구성(SQL Server), 장애 조치(Failover) 클러스터링 및 AlwaysOn 가용성 그룹(SQL Server)활성 보조: 읽기 가능한 보조 복제본(AlwaysOn 가용성 그룹)을 참조하세요.For more information about Always On 가용성 그룹Always On availability groups, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server), Creation and Configuration of Availability Groups (SQL Server), Failover Clustering and AlwaysOn Availability Groups (SQL Server), and Active Secondaries: Readable Secondary Replicas (AlwaysOn Availability Groups).

연결 문자열에서 특정 AG(가용성 그룹)에 대한 가용성 그룹 수신기를 지정할 수 있습니다.You can specify the availability group listener of a given availability group in the connection string. SQL ServerSQL Server Native Client 응용 프로그램이 장애 조치(Failover)되는 가용성 그룹의 데이터베이스에 연결된 경우, 원래 연결은 끊어지며 장애 조치 후 응용 프로그램이 계속 작동하려면 새 연결을 열어야 합니다.If a SQL ServerSQL Server Native Client application is connected to a database in an availability group that fails over, the original connection is broken, and the application must open a new connection to continue work after the failover.

가용성 그룹 수신기에 연결하지 않았고 여러 IP 주소가 호스트 이름과 연결된 경우 SQL ServerSQL Server Native Client는 DNS 항목과 연결된 모든 IP 주소를 순차적으로 반복합니다.If you are not connecting to an availability group listener, and if multiple IP addresses are associated with a hostname, SQL ServerSQL Server Native Client will iterate sequentially through all IP addresses associated with DNS entry. DNS 서버가 반환한 첫 번째 IP 주소가 NIC(네트워크 인터페이스 카드)에 바인딩되지 않은 경우 시간이 오래 걸릴 수 있습니다.This can be time consuming if the first IP address returned by DNS server is not bound to any network interface card (NIC). 가용성 그룹 수신기에 연결할 경우 SQL ServerSQL Server Native Client는 모든 IP 주소에 대한 연결을 병렬로 시도하고, 그 중 한 연결 시도가 성공하면 드라이버가 보류 중인 모든 연결 시도를 삭제합니다.When connecting to an availability group listener, SQL ServerSQL Server Native Client attempts to establish connections to all IP addresses in parallel and if a connection attempt succeeds, the driver will discard any pending connection attempts.

참고

연결 제한 시간을 늘리고 연결 재시도 논리를 구현하면 응용 프로그램이 가용성 그룹에 연결될 가능성이 증가합니다.Increasing connection timeout and implementing connection retry logic will increase the probability that an application will connect to an availability group. 또한 가용성 그룹 장애 조치(failover)로 인해 연결이 실패할 수 있으므로 실패한 연결을 다시 연결할 때까지 다시 시도하는 연결 재시도 논리를 구현해야 합니다.Also, because a connection can fail because of an availability group failover, you should implement connection retry logic, retrying a failed connection until it reconnects.

MultiSubnetFailover로 연결Connecting With MultiSubnetFailover

SQL Server 2012 가용성 그룹 수신기 또는 SQL Server 2012 장애 조치(Failover) 클러스터 인스턴스에 연결할 때는 항상 MultiSubnetFailover=Yes를 지정하세요.Always specify MultiSubnetFailover=Yes when connecting to a SQL Server 2012 availability group listener or SQL Server 2012 Failover Cluster Instance. MultiSubnetFailover 모든 가용성 그룹 및 장애 조치 클러스터에서 SQL Server 2012 인스턴스 및 토폴로지에 대 한 단일 및 다중 서브넷 Always On 장애 조치 시간을 크게 줄일 보다 빠르게 장애 조치할 수 있도록 합니다.MultiSubnetFailover enables faster failover for all Availability Groups and failover cluster instance in SQL Server 2012 and will significantly reduce failover time for single and multi-subnet Always On topologies. 다중 서브넷 장애 조치(Failover) 중에는 클라이언트가 연결을 병렬로 시도합니다.During a multi-subnet failover, the client will attempt connections in parallel. 서브넷 장애 조치(Failover) 중에는 SQL ServerSQL Server Native Client가 적극적으로 TCP 연결을 다시 시도합니다.During a subnet failover, SQL ServerSQL Server Native Client will aggressively retry the TCP connection.

MultiSubnetFailover 연결 속성은 응용 프로그램을 가용성 그룹 또는 장애 조치(Failover) 클러스터 인스턴스에 배포하는 중이며 SQL ServerSQL Server Native Client가 모든 IP 주소에 연결을 시도하여 주 SQL ServerSQL Server 인스턴스의 데이터베이스에 연결을 시도함을 나타냅니다.The MultiSubnetFailover connection property indicates that the application is being deployed in an availability group or Failover Cluster Instance, and that SQL ServerSQL Server Native Client will try to connect to the database on the primary SQL ServerSQL Server instance by trying to connect to all the IP addresses. 연결에 대해 MultiSubnetFailover=Yes를 지정하면 클라이언트는 운영 체제의 기본 TCP 재전송 간격보다 빠르게 TCP 연결을 다시 시도합니다.When MultiSubnetFailover=Yes is specified for a connection, the client retries TCP connection attempts faster than the operating system’s default TCP retransmit intervals. 이 Always On 가용성 그룹 또는 항상에 장애 조치 클러스터 인스턴스를 장애 조치 후 더 빠르게 다시 연결할 수 있도록 하며 모두 단일 및 다중 서브넷 가용성 그룹과 장애 조치 클러스터 인스턴스에 적용 합니다.This enables faster reconnection after failover of either an Always On Availability Group or an Always On Failover Cluster Instance, and is applicable to both single- and multi-subnet Availability Groups and Failover Cluster Instances.

연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.For more information about connection string keywords, see Using Connection String Keywords with SQL Server Native Client.

가용성 그룹 수신기 또는 장애 조치(Failover) 클러스터 인스턴스 이외의 다른 항목에 연결할 때 MultiSubnetFailover=Yes를 지정하면 성능에 상당히 부정적인 영향을 줄 수 있으므로 이러한 설정은 지원되지 않습니다.Specifying MultiSubnetFailover=Yes when connecting to something other than an availability group listener or Failover Cluster Instance may result in a negative performance impact, and is not supported.

다음 지침에 따라 장애 조치(Failover) 클러스터 인스턴스 또는 가용성 그룹의 서버에 연결하십시오.Use the following guidelines to connect to a server in an availability group or Failover Cluster Instance:

  • 단일 서브넷 또는 다중 서브넷에 연결할 때 MultiSubnetFailover 연결 속성을 사용하면 두 서브넷의 성능이 향상됩니다.Use the MultiSubnetFailover connection property when connecting to a single subnet or multi-subnet; it will improve performance for both.

  • 가용성 그룹에 연결하려면 가용성 그룹에 대한 가용성 그룹 수신기를 연결 문자열의 서버로 지정합니다.To connect to an availability group, specify the availability group listener of the availability group as the server in your connection string.

  • IP 주소가 64개 이상으로 구성된 SQL ServerSQL Server 인스턴스에 연결하면 연결 오류가 발생합니다.Connecting to a SQL ServerSQL Server instance configured with more than 64 IP addresses will cause a connection failure.

  • MultiSubnetFailover 연결 속성을 사용하는 응용 프로그램 동작은 SQL ServerSQL Server 인증, Kerberos 인증, Windows 인증과 같은 인증 유형의 영향을 받지 않습니다.Behavior of an application that uses the MultiSubnetFailover connection property is not affected based on the type of authentication: SQL ServerSQL Server Authentication, Kerberos Authentication, or Windows Authentication.

  • 장애 조치(failover) 시간을 수용하고 응용 프로그램의 연결 재시도 횟수를 줄이기 위해 loginTimeout 값을 늘릴 수 있습니다.You can increase the value of loginTimeout to accommodate for failover time and reduce application connection retry attempts.

  • 분산 트랜잭션은 지원되지 않습니다.Distributed transactions are not supported.

    읽기 전용 라우팅이 적용되지 않으면 다음과 같은 경우 가용성 그룹의 보조 복제본 위치에 대한 연결이 실패합니다.If read-only routing is not in effect, connecting to a secondary replica location in an availability group will fail in the following situations:

  1. 보조 복제본 위치가 연결을 허용하도록 구성되어 있지 않은 경우If the secondary replica location is not configured to accept connections.

  2. 응용 프로그램에서 ApplicationIntent=ReadWrite(아래에서 설명)를 사용하고 보조 복제본 위치가 읽기 전용 액세스용으로 구성되어 있는 경우If an application uses ApplicationIntent=ReadWrite (discussed below) and the secondary replica location is configured for read-only access.

    주 복제본이 읽기 전용 작업을 거부하도록 구성되어 있고 연결 문자열에 ApplicationIntent=ReadOnly가 포함되어 있으면 연결이 실패합니다.A connection will fail if a primary replica is configured to reject read-only workloads and the connection string contains ApplicationIntent=ReadOnly.

데이터베이스 미러링에서 다중 서브넷 클러스터를 사용하도록 업그레이드Upgrading to Use Multi-Subnet Clusters from Database Mirroring

연결 문자열에 MultiSubnetFailoverFailover_Partner 연결 키워드가 있으면 연결 오류가 발생합니다.A connection error will occur if the MultiSubnetFailover and Failover_Partner connection keywords are present in the connection string. MultiSubnetFailover가 사용되고 SQL ServerSQL Server에서 데이터베이스 미러링 쌍의 일부임을 나타내는 장애 조치(failover) 파트너 응답을 반환하는 경우에도 오류가 발생합니다.An error will also occur if MultiSubnetFailover is used and the SQL ServerSQL Server returns a failover partner response indicating it is part of a database mirroring pair.

현재 데이터베이스 미러링을 사용 중인 SQL ServerSQL Server Native Client 응용 프로그램을 다중 서브넷 시나리오로 업그레이드할 경우에는 Failover_Partner 연결 속성을 제거하고, 이를 Yes로 설정된 MultiSubnetFailover로 바꾸고, 연결 문자열에서 서버 이름을 가용성 그룹 수신기로 바꿔야 합니다.If you upgrade a SQL ServerSQL Server Native Client application that currently uses database mirroring to a multi-subnet scenario, you should remove the Failover_Partner connection property and replace it with MultiSubnetFailover set to Yes and replace the server name in the connection string with an availability group listener. 연결 문자열에서 Failover_PartnerMultiSubnetFailover=Yes를 사용하는 경우 드라이버에서 오류가 발생합니다.If a connection string uses Failover_Partner and MultiSubnetFailover=Yes, the driver will generate an error. 그러나 연결 문자열에서 Failover_PartnerMultiSubnetFailover=No(또는 ApplicationIntent=ReadWrite)를 사용하면 응용 프로그램에서 데이터베이스 미러링을 사용합니다.However, if a connection string uses Failover_Partner and MultiSubnetFailover=No (or ApplicationIntent=ReadWrite), the application will use database mirroring.

가용성 그룹의 주 데이터베이스에서 데이터베이스 미러링이 사용되고 가용성 그룹 수신기가 아닌 주 데이터베이스에 연결하는 연결 문자열에 MultiSubnetFailover=Yes가 사용될 경우 드라이버에서 오류를 반환합니다.The driver will return an error if database mirroring is used on the primary database in the availability group, and if MultiSubnetFailover=Yes is used in the connection string that connects to a primary database instead of to an availability group listener.

Specifying Application Intent

The keyword ApplicationIntent can be specified in your connection string. The assignable values are ReadWrite or ReadOnly. The default is ReadWrite.

When ApplicationIntent=ReadOnly, the client requests a read workload when connecting. The server enforces the intent at connection time, and during a USE database statement.

The ApplicationIntent keyword does not work with legacy read-only databases.

Targets of ReadOnly

When a connection chooses ReadOnly, the connection is assigned to any of the following special configurations that might exist for the database:

  • Always On

    • A database can allow or disallow read workloads on the targeted Always On database. This choice is controlled by using the ALLOW_CONNECTIONS clause of the PRIMARY_ROLE and SECONDARY_ROLE Transact-SQL statements.
  • Geo-Replication

  • Read Scale-Out

If none of those special targets are available, the regular database is read from.

 

The ApplicationIntent keyword enables read-only routing.

Read-Only Routing

Read-only routing is a feature that can ensure the availability of a read-only replica of a database. To enable read-only routing, all of the following apply:

  • You must connect to an Always On Availability Group availability group listener.

  • The ApplicationIntent connection string keyword must be set to ReadOnly.

  • The Availability Group must be configured by the database administrator to enable read-only routing.

Multiple connections each using read-only routing might not all connect to the same read-only replica. Changes in database synchronization or changes in the server's routing configuration can result in client connections to different read-only replicas. You can ensure that all read-only requests connect to the same read-only replica. Ensure this sameness by not passing an availability group listener to the Server connection string keyword. Instead, specify the name of the read-only instance.

Read-only routing may take longer than connecting to the primary. The longer wait is because read-only routing first connects to the primary, and then looks for the best available readable secondary. Due to these multiple staps, you should increase your login timeout to to at least 30 seconds.

ODBCODBC

Always On 가용성 그룹Always On availability groups Native Client에는 SQL ServerSQL Server을 지원하기 위해 다음과 같은 두 개의 ODBC 연결 문자열 키워드가 추가되었습니다.Two ODBC connection string keywords were added to support Always On 가용성 그룹Always On availability groups in SQL ServerSQL Server Native Client:

  • ApplicationIntentApplicationIntent

  • MultiSubnetFailoverMultiSubnetFailover

    SQL ServerSQL Server Native Client의 ODBC 연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.For more information about ODBC connection string keywords in SQL ServerSQL Server Native Client, see Using Connection String Keywords with SQL Server Native Client.

    해당하는 연결 속성은 다음과 같습니다.The equivalent connection properties are:

  • SQL_COPT_SS_APPLICATION_INTENTSQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVERSQL_COPT_SS_MULTISUBNET_FAILOVER

    SQL ServerSQL Server Native Client의 ODBC 연결 속성에 대한 자세한 내용은 SQLSetConnectAttr을 참조하세요.For more information about ODBC connection properties in SQL ServerSQL Server Native Client, see SQLSetConnectAttr.

    SQL Server 2012(11.x)SQL Server 2012 (11.x)부터는 ApplicationIntentMultiSubnetFailover 키워드의 기능이 SQL ServerSQL Server Native Client 드라이버를 사용하는 DSN의 ODBC 데이터 원본 관리자에 노출됩니다.The functionality of the ApplicationIntent and MultiSubnetFailover keywords will be exposed in the ODBC Data Source Administrator for DSNs that use the SQL ServerSQL Server Native Client driver, beginning in SQL Server 2012(11.x)SQL Server 2012 (11.x).

    SQL ServerSQL Server Native Client ODBC 응용 프로그램에서는 다음 세 가지 함수 중 하나를 사용하여 연결할 수 있습니다.A SQL ServerSQL Server Native Client ODBC application can use one of three functions to make the connection:

함수Function DescriptionDescription
SQLBrowseConnectSQLBrowseConnect SQLBrowseConnect에서 반환된 서버 목록에는 VNN이 포함되지 않습니다.The list of servers returned by SQLBrowseConnect will not include VNNs. 서버가 독립 실행형 서버인지, 아니면 SQL ServerSQL Server에 대해 사용하도록 설정된 둘 이상의 Always On 가용성 그룹Always On availability groups 인스턴스를 포함하는 WSFC(Windows Server 장애 조치(failover) 클러스터링) 클러스터의 주 또는 보조 서버인지는 표시되지 않고 서버 목록만 표시됩니다.You will only see a list of servers without any indication if the server is a standalone server, or a primary or secondary server in a Windows Server Failover Clustering (WSFC) cluster that contains two or more SQL ServerSQL Server instances that have been enabled for Always On 가용성 그룹Always On availability groups. 서버에 연결한 후 오류가 발생하면 서버에 연결은 되었지만 ApplicationIntent 설정이 서버 구성과 호환되지 않기 때문일 수 있습니다.If you connect to a server and get a failure, it may be because you have connected to a server, and the ApplicationIntent setting is not compatible with the server configuration.

SQLBrowseConnectAlways On 가용성 그룹Always On availability groups에 대해 사용하도록 설정된 둘 이상의 SQL ServerSQL Server 인스턴스를 포함하는 WSFC(Windows Server 장애 조치(Failover) 클러스터링) 클러스터의 서버를 인식하지 못하므로 SQLBrowseConnectMultiSubnetFailover 연결 문자열 키워드를 무시합니다.Because SQLBrowseConnect does not recognize servers in a Windows Server Failover Clustering (WSFC) cluster that contains two or more SQL ServerSQL Server instances that have been enabled for Always On 가용성 그룹Always On availability groups, SQLBrowseConnect ignores the MultiSubnetFailover connection string keyword.
SQLConnectSQLConnect SQLConnect 는 DSN(데이터 원본 이름) 또는 연결 속성을 통해 ApplicationIntentMultiSubnetFailover 를 모두 지원합니다.SQLConnect supports both ApplicationIntent and MultiSubnetFailover via a data source name (DSN) or connection properties.
SQLDriverConnectSQLDriverConnect SQLDriverConnect 는 연결 문자열 키워드, 연결 속성 또는 DSN을 통해 ApplicationIntentMultiSubnetFailover 를 지원합니다.SQLDriverConnect supports ApplicationIntent and MultiSubnetFailover via connection string keywords, connection properties, or DSN.

OLE DBOLE DB

SQL ServerSQL Server Native Client의 OLE DB는 MultiSubnetFailover 키워드를 지원하지 않습니다.OLE DB in the SQL ServerSQL Server Native Client does not support the MultiSubnetFailover keyword.

SQL ServerSQL ServerNative Client의 OLE DB는 응용 프로그램 의도를 지원합니다.OLE DB in the SQL ServerSQL Server Native Client will support application intent. 응용 프로그램 의도는 OLE DB 응용 프로그램에 대해 ODBC 응용 프로그램과 동일하게 동작합니다(위의 내용 참조).Application intent will behave the same for OLE DB applications as ODBC applications (see above).

Always On 가용성 그룹Always On availability groups Native Client에는 SQL ServerSQL Server을 지원하기 위해 다음과 같은 하나의 OLE DB 연결 문자열 키워드가 추가되었습니다.One OLE DB connection string keyword added to support Always On 가용성 그룹Always On availability groups in SQL ServerSQL Server Native Client:

  • 응용 프로그램 의도Application Intent

    SQL ServerSQL Server Native Client의 연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하세요.For more information about connection string keywords in SQL ServerSQL Server Native Client, see Using Connection String Keywords with SQL Server Native Client.

    해당하는 연결 속성은 다음과 같습니다.The equivalent connection properties are:

  • SSPROP_INIT_APPLICATIONINTENTSSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRINGDBPROP_INIT_PROVIDERSTRING

    SQL ServerSQL Server Native Client OLE DB 응용 프로그램에서는 다음 메서드 중 하나를 사용하여 응용 프로그램 의도를 지정할 수 있습니다.A SQL ServerSQL Server Native Client OLE DB application can use one of the methods to specify application intent:

    Idbinitialize:: InitializeIDBInitialize::Initialize
    IDBInitialize::Initialize는 이전에 구성한 속성 집합을 사용하여 데이터 원본을 초기화하고 데이터 원본 개체를 만듭니다.IDBInitialize::Initialize uses the previously configured set of properties to initialize the data source and create the data source object. 응용 프로그램 의도를 공급자 속성 또는 확장 속성 문자열의 일부로 지정합니다.Specify application intent as a provider property or as part of the extended properties string.

    Idatainitialize:: GetdatasourceIDataInitialize::GetDataSource
    IDataInitialize::GetDataSource응용 프로그램 의도 키워드를 포함할 수 있는 입력 연결 문자열을 사용합니다.IDataInitialize::GetDataSource takes an input connection string that can contain the Application Intent keyword.

    IDBProperties::GetPropertiesIDBProperties::GetProperties
    IDBProperties::GetProperties는 현재 데이터 원본에 설정된 속성의 값을 검색합니다.IDBProperties::GetProperties retrieves the value of the property that is currently set on the data source. DBPROP_INIT_PROVIDERSTRING 속성과 SSPROP_INIT_APPLICATIONINTENT 속성을 통해 응용 프로그램 의도 값을 검색할 수 있습니다.You can retrieve the Application Intent value through the DBPROP_INIT_PROVIDERSTRING property and SSPROP_INIT_APPLICATIONINTENT property.

    IDBProperties::SetPropertiesIDBProperties::SetProperties
    ApplicationIntent 속성 값을 설정하려면 값이 "ReadWrite" 또는 "ReadOnly"인 SSPROP_INIT_APPLICATIONINTENT 속성이나 값이 "ApplicationIntent=ReadOnly" 또는 "ApplicationIntent=ReadWrite"를 포함하는 DBPROP_INIT_PROVIDERSTRING 속성을 전달하여 IDBProperties::SetProperties를 호출합니다.To set the ApplicationIntent property value, call IDBProperties::SetProperties passing in the SSPROP_INIT_APPLICATIONINTENT property with value "ReadWrite" or "ReadOnly" or DBPROP_INIT_PROVIDERSTRING property with value containing "ApplicationIntent=ReadOnly" or "ApplicationIntent=ReadWrite".

    데이터 연결 속성 대화 상자의 모두 탭에 있는 응용 프로그램 의도 속성 필드에서 응용 프로그램 의도를 지정할 수 있습니다.You can specify application intent in the Application Intent Properties field of the All tab in the Data Link Properties dialog box.

    암시적 연결을 설정하면 암시적 연결이 부모 연결의 응용 프로그램 의도 설정을 사용합니다.When implicit connections are established, the implicit connection will use the application intent setting of the parent connection. 마찬가지로 동일한 데이터 원본에서 만들어진 여러 개의 세션은 데이터 원본의 응용 프로그램 의도 설정을 상속합니다.Similarly, multiple sessions created from the same data source will inherit the data source's application intent setting.

관련 항목:See Also

SQL Server Native Client 기능 SQL Server Native Client Features
SQL Server Native Client 연결 문자열 키워드 사용Using Connection String Keywords with SQL Server Native Client