데이터베이스 미러링 세션에 클라이언트 연결(SQL Server)Connect Clients to a Database Mirroring Session (SQL Server)

데이터베이스 미러링 세션에 연결하기 위해 클라이언트는 SQL ServerSQL Server Native Client 또는 .NET Framework Data Provider for SQL ServerSQL Server를 사용할 수 있습니다.To connect to a database mirroring session, a client can use either SQL ServerSQL Server Native Client or .NET Framework Data Provider for SQL ServerSQL Server. SQL Server 2017SQL Server 2017 데이터베이스에 대해 구성하면 두 데이터 액세스 공급자가 모두 데이터베이스 미러링을 완전하게 지원합니다.When configured for a SQL Server 2017SQL Server 2017 database, these data access providers both fully support database mirroring. 미러된 데이터베이스 사용 시 프로그래밍 고려 사항에서 대한 자세한 내용은 Using Database Mirroring을 참조하십시오.For information about programming considerations for using a mirrored database, see Using Database Mirroring. 또한 현재 주 서버 인스턴스를 사용할 수 있어야 하며 서버 인스턴스에 클라이언트 로그인이 만들어져 있어야 합니다.In addition, the current principal server instance must be available and the login of the client must have been created on the server instance. 자세한 내용은 분리된 사용자 문제 해결(SQL Server)을 참조하세요.For more information, see Troubleshoot Orphaned Users (SQL Server). 클라이언트에서 데이터베이스 미러링 세션에 연결할 때는 미러링 모니터 서버 인스턴스가 있어도 사용되지 않습니다.Client connections to a database mirroring session do not involve the witness server instance, if one exists.

데이터베이스 미러링 세션에 대한 초기 연결 설정 Making the Initial Connection to a Database Mirroring Session

미러된 데이터베이스에 대한 초기 연결의 경우 클라이언트에서 최소한 서버 인스턴스의 이름을 제공하는 연결 문자열을 제공해야 합니다.For the initial connection to a mirrored database, a client must supply a connection string that minimally supplies the name of a server instance. 이 필수 서버 이름은 현재 주 서버 인스턴스를 식별하며 초기 파트너 이름이라고 합니다.This required server name should identify the current principal server instance and is known as the initial partner name.

필요에 따라 연결 문자열에서 다른 서버 인스턴스의 이름을 제공할 수도 있습니다. 이 이름은 첫 번째 연결 시도 중에 초기 파트너를 사용할 수 없는 경우 사용되는 현재 미러 서버 인스턴스를 식별합니다.Optionally, the connection string can also supply the name of another server instance, which should identify the current mirror server instance, for use if the initial partner is unavailable during the first connection attempt. 두 번째 이름을 장애 조치(failover) 파트너 이름이라고 합니다.The second name is known as the failover partner name.

또한 연결 문자열에서 데이터베이스 이름을 제공해야 합니다.The connection string must also supply a database name. 데이터베이스 이름은 데이터 액세스 공급자의 장애 조치(Failover) 시도를 지원하는 데 필요합니다.This is necessary to enable failover attempts by the data access provider.

연결 문자열이 수신되면 데이터 액세스 공급자는 초기 파트너 이름과 장애 조치(failover) 파트너 이름(제공된 경우)을 클라이언트의 휘발성 메모리에 캐시로 저장합니다. 관리 코드의 경우 캐시 범위는 응용 프로그램 도메인까지 해당됩니다.On receiving a connection string, the data access provider stores the initial partner name and the failover partner name, if supplied, in a cache in the client's volatile memory (for managed code, the cache is scoped to the application domain). 초기 파트너 이름이 캐시된 다음에는 데이터 액세스 공급자가 초기 파트너 이름을 업데이트하지 않습니다.Once cached, the initial partner name is never updated by the data access provider. 클라이언트에서 장애 조치(failover) 파트너 이름을 제공하면 데이터 액세스 공급자는 초기 파트너 이름을 사용하여 연결할 수 없는 경우에 대비하여 이 장애 조치(failover) 파트너 이름도 일시적으로 저장합니다.When the client supplies the failover partner name, the data access provider also stores this failover partner name temporarily in case the provider cannot connect using the initial partner name.

데이터베이스 미러링 세션에서는 클라이언트 컴퓨터에 네트워크 통신 문제가 있는 경우 등 서버에 액세스하는 클라이언트와 관련된 문제를 방지하지 못합니다.A database mirroring session does not protect against server-access problems that are specific to clients, such as when a client computer is having a problems communicating with the network. 데이터 액세스 공급자와 관련되지 않은 여러 가지 이유로 인해 미러된 데이터베이스에 대한 연결 시도가 실패할 수도 있습니다. 예를 들어 데이터베이스가 장애 조치 중이어서 주 서버 인스턴스가 비활성화되거나 네트워크 오류로 인해 연결 시도가 실패할 수 있습니다.A connection attempt to a mirrored database can also fail for a variety of reasons that are unrelated to the data-access provider; for example, a connection attempt can fail because the principal server instance is inactive, as occurs when the database is failing over, or because of a network error.

연결을 시도할 때 데이터 액세스 공급자는 최초 파트너 이름부터 사용하기 시작합니다.When attempting to connect, the data access provider begins by using the initial partner name. 지정한 서버 인스턴스를 사용할 수 있으며 현재 주 서버 인스턴스이면 일반적으로 연결 시도에 성공합니다.If the specified server instance is available and is the current principal server instance, the connection attempt typically succeeds.

참고

미러링 세션이 일시 중지되면 일반적으로 클라이언트는 주 서버에 연결하여 파트너 이름을 다운로드합니다.If the mirroring session is paused, the client typically connects to the principal server and the downloads the partner name. 그러나 미러링이 재개될 때까지 클라이언트에서 데이터베이스를 사용할 수 없습니다.However, the database is unavailable to the client until mirroring resumes.

이 시도가 실패하면 데이터 액세스 공급자는 장애 조치(failover) 파트너 이름(사용 가능한 경우)을 시도합니다.If that attempt does not work, the data access provider tries the failover partner name, if available. 파트너 이름이 현재 주 서버를 올바르게 식별하는 경우 일반적으로 데이터 액세스 공급자가 초기 연결을 여는 데 성공합니다.If either partner name correctly identifies the current principal server, the data access provider normally succeeds in opening the initial connection. 이 연결을 완료하면 데이터 액세스 공급자는 현재 미러 서버의 서버 인스턴스 이름을 다운로드합니다.On completing this connection, the data access provider downloads the server instance name of the current mirror server. 이 이름은 장애 조치(failover) 파트너 이름으로 캐시에 저장되며 클라이언트에서 제공한 장애 조치(failover) 파트너 이름(있는 경우)을 덮어씁니다.This name is stored in the cache as the failover partner name, overwriting the client-supplied failover partner name, if any. 그런 후에는 .NET Framework Data Provider for SQL ServerSQL Server 에서 장애 조치(failover) 파트너 이름을 업데이트하지 않습니다.Thereafter, the .NET Framework Data Provider for SQL ServerSQL Server does not update the failover partner name. 반면 SQL ServerSQL Server Native Client는 후속 연결이나 연결 다시 설정에서 다른 파트너 이름이 반환될 때마다 캐시를 업데이트합니다.In contrast, SQL ServerSQL Server Native Client updates the cache whenever a subsequent connection or connection reset returns a different partner name.

다음 그림에서는 미러된 데이터베이스 Db_1에 대한 클라이언트의 초기 파트너 Partner_A연결을 보여 줍니다.The following figure illustrates a client connection to the initial partner, Partner_A, for a mirrored database named Db_1. 이 그림은 클라이언트가 제공한 초기 파트너 이름이 현재 주 서버인 Partner_A를 올바르게 식별하는 경우를 나타냅니다.This figure shows a case in which the initial partner name supplied by the client correctly identifies the current principal server, Partner_A. 초기 연결 시도에 성공하고 데이터 액세스 공급자가 미러 서버의 이름(현재 Partner_B)을 장애 조치(failover) 파트너 이름으로 해당 로컬 캐시에 저장합니다.The initial connection attempt succeeds, and the data access provider stores the name of the mirror server (currently Partner_B) as the failover partner name in the local cache. 마지막으로 클라이언트에서 Db_1 데이터베이스의 주 복사본에 연결합니다.Finally, the client connects to the principal copy of the Db_1 database.

초기 파트너가 주 서버인 경우의 클라이언트 연결Client connection if initial partner is principal

예를 들어 네트워크 오류나 비활성 서버 인스턴스로 인해 초기 연결 시도가 실패할 수 있습니다.The initial connection attempt may fail, for example, because of a network error or an inactive server instance. 초기 파트너를 사용할 수 없어 데이터 액세스 공급자가 장애 조치(failover) 파트너에 연결하려면 클라이언트에서 제공한 장애 조치(failover) 파트너 이름이 연결 문자열에 있어야 합니다.Because the initial partner is unavailable, for the data access provider to attempt to connect to the failover partner, the client must have supplied the failover partner name in the connection string.

이 경우 장애 조치(failover) 파트너 이름을 사용할 수 없으면 미러되지 않은 데이터베이스의 경우처럼 오류가 반환되거나 네트워크 연결 시간이 초과될 때까지 원래 연결 시도가 계속됩니다.In that case, if the failover partner name is unavailable, the original connection attempt continues until the network connection timeout or an error is returned (just as for a non-mirrored database).

장애 조치(failover) 파트너 이름이 연결 문자열에 제공되는 경우 데이터 액세스 공급자의 동작은 클라이언트의 네트워크 프로토콜과 운영 체제에 따라 다음과 같이 달라집니다.When the failover partner name is supplied in the connection string, the behavior of the data access provider depends on the network protocol and operating system of the client, as follows:

  • TCP/IP의 경우 데이터베이스 미러링과 관련된 연결 다시 시도 알고리즘에 의해 연결 시도가 조정됩니다.For TCP/IP, the connection attempts are regulated by a connection retry algorithm that is specific to database mirroring. 연결 다시 시도 알고리즘 은 지정된 연결 시도에서 연결을 여는 데 할당되는 최대 시간( 다시 시도 시간)을 결정합니다.The connection retry algorithm determines the maximum time (the retry time) allotted for opening a connection in a given connection attempt.

  • 기타 네트워크 프로토콜의 경우For other network protocols

    오류가 발생하거나 초기 파트너를 사용할 수 없으면 데이터 액세스 공급자에서 네트워크 연결 제한 시간이 만료되거나 로그인 제한 시간이 만료될 때까지 초기 연결 시도가 대기합니다.If an error occurs or if the initial partner is unavailable, the initial connection attempt waits until the network connection timeout period expires or the login timeout period expires on the data access provider. 일반적으로 이 대기 시간은 20초에서 30초 정도입니다.Typically, this wait is on the order of 20 to 30 seconds. 그런 후에는 데이터 액세스 공급자가 시간 초과되지 않으면 장애 조치(failover) 파트너에 연결을 시도합니다.Thereafter, if the data access provider has not timed out, it attempts to connect to the failover partner. 연결에 성공하기 전에 연결 제한 시간이 만료되거나 장애 조치(failover) 파트너를 사용할 수 없으면 연결 시도가 실패합니다.If the connection timeout period expires before the connection succeeds or the failover partner is unavailable, the connection attempt fails. 로그인 제한 시간 내에 장애 조치(failover) 파트너를 사용할 수 있으며 현재 주 서버인 경우 일반적으로 연결 시도에 성공합니다.If failover partner is available within the login timeout period and is now the principal server, the connection attempt normally succeeds.

미러된 데이터베이스에 대한 연결 문자열Connection Strings for a Mirrored Database

클라이언트가 제공한 연결 문자열에는 데이터 액세스 공급자가 데이터베이스에 연결하는 데 사용하는 정보가 포함되어 있습니다.The connection string supplied by the client contains information that the data access provider uses to connect to the database. 이 섹션에서는 특히 SQL ServerSQL Server Native Client ODBC 드라이버 연결을 사용하여 미러된 데이터베이스에 연결하는 경우와 관련된 키워드에 대해 설명합니다.This section discusses the keywords that are specifically relevant for connecting to a mirrored database using a SQL ServerSQL Server Native Client ODBC Driver Connection.

Network 특성Network Attribute

연결 문자열에 네트워크 프로토콜을 지정하는 Network 특성이 있어야 합니다.The connection string should contain the Network attribute to specify the network protocol. 이렇게 하면 지정한 네트워크 프로토콜이 여러 파트너에 대한 연결 간에 유지됩니다.This ensures that the specified network protocol persists between connections to different partners. 미러된 데이터베이스에 대한 연결에 가장 적합한 프로토콜은 TCP/IP입니다.The best protocol for connecting to a mirrored database is TCP/IP. 클라이언트에서 모든 파트너 연결에 대해 TCP/IP를 요청하도록 하기 위해 연결 문자열은 다음 특성을 제공합니다.To ensure that the client requests TCP/IP for every connection to the partners, a connection string supplies the following attribute:

Network=dbmssocn;   
중요

클라이언트의 프로토콜 목록 맨 위에 TCP/IP를 유지하는 것이 좋습니다.We recommend keeping TCP/IP at the top of a client's protocol list. 그러나 연결 문자열에서 Network 특성을 지정하면 목록 순서가 재정의됩니다.However, if the connection string specifies the Network attribute, this overrides the list order.

또는 클라이언트에서 모든 파트너 연결에 대해 명명된 파이프를 요청하도록 하기 위해 연결 문자열은 다음 특성을 제공합니다.Alternatively, to ensure that the client requests named pipes for every connection to the partners, a connection string supplies the following attribute:

Network=dbnmpntw;   
중요

명명된 파이프는 TCP/IP 다시 시도 알고리즘을 사용하지 않으므로 미러된 데이터베이스에 연결하기 전에 명명된 파이프 연결 시도가 시간 초과되는 경우가 많습니다.Because named pipes does not use the TCP/IP retry algorithm, in many cases, a named pipes connection attempt may time out before connecting to a mirrored database.

Server 특성Server Attribute

연결 문자열에는 초기 파트너 이름을 제공하는 Server 특성이 있어야 합니다. 이 특성은 현재 주 서버 인스턴스를 식별합니다.The connection string must contain a Server attribute that supplies the initial partner name, which should identify the current principal server instance.

서버 인스턴스를 식별하는 가장 간단한 방법은 [\]과 같이 해당 이름을 지정하는 것입니다.The simplest way to identify the server instance is by specifying its name , [\]. 예를 들어For example:

Server=Partner_A;

또는or

Server=Partner_A\Instance_2;

그러나 시스템 이름을 사용하는 경우 클라이언트에서 DNS 조회를 수행하여 서버의 IP 주소를 가져오고 SQL Server Browser 쿼리를 수행하여 파트너가 있는 서버의 포트 번호를 가져와야 합니다.However, when the system name is used, the client must perform a DNS lookup to obtain the IP address of the server and a SQL Server Browser query to obtain the port number of the server on which the partner resides. 서버 이름을 지정하는 대신 Server 특성에 파트너의 IP 주소와 포트 번호를 지정하면 해당 조회와 쿼리를 무시할 수 있습니다.Those lookups and queries can be bypassed by specifying the IP address and port number of the partner in the Server attribute, rather than specifying the server name. 파트너에 연결하는 동안 외부 지연 가능성을 최소화하려면 이 방법을 사용하는 것이 좋습니다.This is recommended to minimize the possibility of external delays while connecting to that partner.

참고

연결 문자열에서 포트가 아닌 명명된 인스턴스 이름을 지정하는 경우 SQL Server Browser 쿼리가 필요합니다.A SQL Server Browser query is necessary if the connection string specifies the named instance name and not the port.

IP 주소와 포트를 지정하기 위해 Server 특성은 Server=,<포트> 형식을 사용합니다. 예를 들면 다음과 같습니다.To specify the IP address and port, the Server attribute takes the following form, Server=,<port>, for example:

Server=123.34.45.56,4724;   
참고

IP 주소는 IP 버전 4(IPv4) 또는 IP 버전 6(IPv6)일 수 있습니다.The IP address can be IP Version 4 (IPv4) or IP Version 6 (IPv6).

Database 특성Database Attribute

또한 연결 문자열은 미러된 데이터베이스의 이름을 제공하는 Database 특성을 지정해야 합니다.In addition, the connection string must specify the Database attribute to supply the name of the mirrored database. 클라이언트가 연결을 시도할 때 데이터베이스를 사용할 수 없으면 예외가 발생합니다.If the database is unavailable when the client attempts to connect, an exception is raised.

예를 들어 주 서버 Partner_A의 AdventureWorks 데이터베이스에 명시적으로 연결하기 위해 클라이언트는 다음 연결 문자열을 사용합니다.For example, to expressly connect to the AdventureWorks database on the principal server Partner_A, a client uses the following connection string:

" Server=Partner_A; Database=AdventureWorks "

참고

이 문자열에는 인증 정보가 생략됩니다.This string omits authentication information.

중요

프로토콜 접두사를 Server 특성(Server=tcp:<servername>)으로 묶으면 Network 특성과 호환되지 않으며, 두 위치 모두에서 프로토콜을 지정하면 오류가 발생할 가능성이 있습니다.Bundling the protocol prefix with the Server attribute (Server=tcp:<servername>) is incompatible with the Network attribute, and specifying the protocol in both places will likely result in an error. 따라서 연결 문자열에서 Network 특성을 사용하여 프로토콜을 지정하고 Server 특성에는 서버 이름만 지정하는 것이 좋습니다("Network=dbmssocn; Server=<servername>").Therefore, we recommend that a connection string specify the protocol using the Network attribute and specify only the server name in the Server attribute ("Network=dbmssocn; Server=<servername>").

Failover Partner 특성Failover Partner Attribute

초기 파트너 이름 외에 클라이언트에서 현재 미러 서버 인스턴스를 식별하는 장애 조치(failover) 파트너 이름을 지정할 수도 있습니다.In addition to the initial partner name, the client can also specify failover partner name, which should identify the current mirror server instance. 장애 조치(failover) 파트너는 Failover Partner 특성의 키워드 중 하나에 의해 지정됩니다.The failover partner is specified by one of the keywords for the failover partner attribute. 이 특성의 키워드는 사용 중인 API에 따라 다릅니다.The keyword for this attribute depends on the API that you are using. 다음 표에서는 이러한 키워드를 보여 줍니다.The following table lists these keywords:

APIAPI Failover Partner 특성의 키워드Keyword for failover partner attribute
OLE DB 공급자OLE DB Provider FailoverPartnerFailoverPartner
ODBC 드라이버ODBC Driver Failover_PartnerFailover_Partner
ADO(ActiveX Data Objects)ActiveX Data Objects (ADO) 장애 조치(failover) 파트너Failover Partner

서버 인스턴스를 식별하는 가장 간단한 방법은 [\]과 같이 시스템 이름을 지정하는 것입니다.The simplest way to identify the server instance is by its system name, [\].

또는 장애 조치(failover) 파트너 특성에 IP 주소와 포트 번호를 제공할 수 있습니다.Alternatively, the IP address and port number can be supplied in the Failover Partner attribute. 데이터베이스에 대한 첫 번째 연결 중에 초기 연결 시도가 실패하면 장애 조치(failover) 파트너에 대한 연결에서 DNS 및 SQL Server Browser를 사용하지 않습니다.If the initial connection attempt fails during the first connection to the database, the attempt to connect to the failover partner will be freed from relying on DNS and SQL Server Browser. 연결이 설정되면 장애 조치(failover) 파트너 이름이 장애 조치(failover) 파트너 이름을 덮어쓰므로 장애 조치가 발생할 경우 리디렉션된 연결에 DNS 및 SQL Server Browser가 필요합니다.Once a connection is established, the failover partner name will be overwritten with the failover partner name, so if a failover occurs, the redirected connections will require DNS and SQL Server Browser.

참고

초기 파트너 이름만 제공되면 다시 연결 방법에 대한 경우를 제외하고 응용 프로그램 개발자가 다른 동작을 수행하거나 코드를 작성할 필요가 없습니다.When only the initial partner name is provided, application developers do not need to take any action or write any code except about how to reconnect.

참고

관리 코드 응용 프로그램 개발자는 ConnectionString 개체의 SqlConnection 에 장애 조치(failover) 파트너 이름을 제공합니다.Managed code application developers supply the failover partner name in the ConnectionString of the SqlConnection object. 이러한 연결 문자열을 사용하는 방법은 MicrosoftMicrosoft .NET Framework SDK에 포함된 ADO.NET 설명서에서 "Database Mirroring Support in the .NET Framework Data Provider for SQL Server"를 참조하십시오.For information on using this connection string, see "Database Mirroring Support in the .NET Framework Data Provider for SQL Server" in the ADO.NET documentation, which is part of the MicrosoftMicrosoft .NET Framework SDK.

연결 문자열 예Example Connection String

예를 들어 TCP/IP를 사용하여 Prtner_A 또는 Partner_B의 AdventureWorks 데이터베이스에 명시적으로 연결하기 위해 ODBC 드라이버를 사용하는 클라이언트 응용 프로그램에서 다음 연결 문자열을 제공할 수 있습니다.For example, to explicitly connect using TCP/IP to the AdventureWorks database on either Partner_A or Partner_B, a client application that uses the ODBC Driver could supply the following connection string:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"  

또는 클라이언트에서 IP 주소와 포트 번호를 사용하여 초기 파트너 Partner_A를 식별할 수 있습니다. 예를 들어 IP 주소가 250.65.43.21이고 포트 번호가 4734이면 연결 문자열은 다음과 같습니다.Alternatively, the client could use the IP address and port number to identify the initial partner, Partner_A; for example, if the IP address is 250.65.43.21 and the port number is 4734, the connection string would be:

"Server=250.65.43.21,4734; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"  

연결 다시 시도 알고리즘(TCP/IP 연결용) Connection Retry Algorithm (for TCP/IP Connections)

TCP/IP 연결의 경우 두 파트너 이름이 캐시에 있을 때 데이터 액세스 공급자가 연결 다시 시도 알고리즘을 따릅니다.For a TCP/IP connection, when both partner names are in the cache, the data access provider adheres to a connection retry algorithm. 이는 세션에 대한 초기 연결을 설정하는 경우와 설정된 연결이 끊어진 후 다시 연결하는 경우에 모두 적용됩니다.This is true both for making the initial connection to the session and for reconnecting after losing an established connection. 연결이 열려 있으면 사전 로그인 및 로그인 단계를 완료하는 데 추가 시간이 필요합니다.Once a connection has been opened, completing the pre-login and login steps takes additional time.

참고

느린 DNS 조회, 느린 도메인 컨트롤러/Kerberos KDC(키 배포 센터), SQL Server Browser 연결 시간, 많은 네트워크 사용량 등의 외부 요소로 인해 연결에 소요되는 시간이 다시 시도 시간을 초과할 수 있습니다.The time spent in opening a connection can exceed the retry time because of external factors, such as slow DNS lookups, slow domain controller/Kerberos Key Distribution Center (KDC), time spent contacting SQL Server Browser, network congestion, and so forth. 이러한 외부 요소 때문에 클라이언트가 미러된 데이터베이스에 연결하지 못할 수 있습니다.Such external factors can prevent a client from connecting to a mirrored database. 또한 외부 요소로 인해 연결을 여는 데 걸리는 시간이 할당된 다시 시도 시간을 초과할 수 있습니다.Also, external factors can cause a connection to take longer to open than the allotted retry time. 초기 파트너에 대한 연결 시도에서 DNS 및 SQL Server Browser를 무시하는 방법은 이 항목의 앞부분에 나오는 데이터베이스 미러링 세션에 대한 초기 연결 설정을 참조하십시오.For information on bypassing DNS and SQL Server Browser for connection attempt to the initial partner, see Making the Initial Connection to a Database Mirroring Session, earlier in this topic.

연결 시도가 실패하거나 성공하기 전에 다시 시도 시간이 만료하면 데이터 액세스 공급자는 다른 파트너에 연결을 시도합니다.If a connection attempt fails or the retry time expires before it succeeds, the data access provider tries the other partner. 이때 연결이 열려 있지 않으면 공급자는 연결이 열리거나 로그인 기간이 시간 초과될 때까지 초기 및 장애 조치(Failover) 파트너 이름에 연결을 시도합니다.If a connection is not opened by this point, the provider alternately tries the initial and failover partner names, until a connection is opened or the login period times out. 기본 로그인 제한 시간은 15초입니다.The default login time-out period is 15 seconds. 로그인 제한 시간을 5초 이상으로 설정하는 것이 좋습니다.We recommend that the login time-out period be at least 5 seconds. 너무 짧은 제한 시간을 지정하면 연결 시도가 하나도 성공하지 못할 수 있습니다.Specifying a smaller time-out period might prevent any of the connection attempts from succeeding.

다시 시도 시간은 로그인 기간의 백분율입니다.The retry time is a percentage of the login period. 연결 시도의 다시 시도 시간은 연속 라운드가 진행됨에 따라 더 커집니다.The retry time for a connection attempt is larger in each successive round. 첫 번째 라운드에서 두 시도 중 각각의 다시 시도 시간은 총 로그인 기간의 8%입니다.In the first round, the retry time for each of the two attempts is 8 percent of the total login period. 다시 시도 알고리즘은 각 연속 라운드에서 최대 다시 시도 시간을 동일한 양만큼 늘립니다.In each successive round, the retry algorithm increases the maximum retry time by the same amount. 따라서 처음 8개 연결 시도의 다시 시도 시간은 다음과 같습니다.Thus, the retry times for the first eight connection attempts is as follows:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

다시 시도 시간은 다음 수식을 사용하여 계산됩니다.The retry time is calculated using the following formula:

RetryTime = PreviousRetryTime +( 0.08 \LoginTimeout)RetryTime* = PreviousRetryTime +( 0.08 \LoginTimeout)*

여기서 PreviousRetryTime 의 초기값은 0입니다.Where PreviousRetryTime is initially 0.

예를 들어 기본 로그인 제한 시간이 15초이면 LoginTimeout = 15입니다.For example, if using the default login time-out period of 15 seconds, LoginTimeout = 15. 이 경우 처음 세 라운드에 할당되는 다시 시도 시간은 다음과 같습니다.In this case, the retry times allotted in the first three rounds are as follows:

반올림Round RetryTime 계산RetryTime calculation 시도당 다시 시도 시간Retry time per attempt
11 0 +(0.08 \* 15)0 +(0.08 \* 15) 1.2초1.2 seconds
22 1.2 +(0.08 \* 15)1.2 +(0.08 \* 15) 2.4초2.4 seconds
33 2.4 +(0.08 \* 15)2.4 +(0.08 \* 15) 3.6초3.6 seconds
44 3.6 +(0.08 \* 15)3.6 +(0.08 \* 15) 4.8초4.8 seconds

다음 그림에서는 각각 시간 초과되는 연속 연결 시도의 다시 시도 시간을 보여 줍니다.The following figure illustrates these retry times for successive connection attempts, each of which times out.

15초 로그인 시간에 대한 최대 다시 시도 지연Maximum retry delays for 15 second login timeout

기본 로그인 제한 시간 동안 처음 세 라운드의 연결 시도에 할당되는 최대 시간은 14.4초입니다.For the default login time-out period, the maximum time allotted to the first three rounds of connection attempts is 14.4 seconds. 각 시도에서 할당된 시간을 모두 사용하는 경우 로그인 기간이 시간 초과되기까지 0.6초의 시간만 남습니다.If every attempt were to use all of its allotted time, only 0.6 seconds of time would remain before the login period times out. 이 경우 네 번째 라운드는 단축되어 초기 파트너 이름을 사용하여 빨리 연결할 수 있는 최종 시도만 허용합니다.In that case, the fourth round would be curtailed, allowing only a final quick attempt to connect using the initial partner name. 그러나 특히 이후 라운드에서 연결 시도가 할당된 다시 시도 시간보다 먼저 실패할 수 있습니다.However, a connection attempt may fail in less than its allotted retry time, particularly in later rounds. 예를 들어 네트워크 오류가 발생하면 다시 시도 시간이 만료되기 전에 시도가 종료될 수 있습니다.For example, receiving a network error can cause an attempt to end before the retry time expires. 네트워크 오류로 인해 이전 시도가 실패하면 네 번째 라운드 및 추가 라운드에 더 많은 시간을 사용할 수 있습니다.If earlier attempts fail due to a network error, additional time would be available for the fourth round and, perhaps, additional rounds.

연결 시도에 실패하는 또 다른 원인에는 서버 인스턴스가 데이터베이스 장애 조치를 수행할 때 발생하는 비활성 서버 인스턴스가 있습니다.Another cause of a failed attempt is an inactive server instance, as occurs when a server instance is engaged in failing over its database. 이 경우 다시 시도가 지연되어 클라이언트가 연결 시도를 빨리 연속하여 파트너를 오버로드하지 않도록 방지합니다.In this case, a retry delay is imposed to prevent clients from overloading the partners with a rapid succession of connection attempts.

참고

두 파트너 이름을 모두 사용할 수 있을 경우 로그인 제한 시간이 정해져 있지 않으면 클라이언트는 초기 파트너 이름과 장애 조치(failover) 파트너 이름을 교대로 사용하여 무제한으로 서버에 다시 연결합니다.When both partner names are available, if the login time-out period is infinite, the client attempts to reconnect to the servers indefinitely, alternating between the initial partner name and the failover partner name.

장애 조치 중 다시 시도 지연Retry Delays During Failover

클라이언트가 장애 조치 중인 파트너에 연결하면 해당 파트너가 비활성 상태라고 즉시 응답합니다.If a client attempts to connect to a partner that is failing over, the partner immediately responds that it is inactive. 이 경우 각 라운드의 연결 시도가 할당된 다시 시도 시간보다 훨씬 짧습니다.In this case, each round of connection attempts are much briefer than the allotted retry time. 즉, 로그인 기간이 시간 초과되기 전에 많은 라운드의 연결 시도가 수행될 수 있습니다.This means that many rounds of connection attempts could happen before the login period times out. 장애 조치 중에 연결 시도를 빨리 연속하여 파트너를 오버로드하지 않도록 방지하기 위해 데이터 액세스 공급자는 각 다시 시도 주기 후에 짧은 다시 시도 지연을 추가합니다.To avoid overloading the partners with a rapid series of connection attempts during a failover, the data access provider adds a brief retry delay after each retry cycle. 지정된 다시 시도 지연의 길이는 다시 시도 지연 알고리즘에 의해 결정됩니다.The length of a given retry delay is determined by the retry-delay algorithm. 첫 번째 라운드 후의 지연은 100밀리초입니다.After the first round, the delay is 100 milliseconds. 다음 세 라운드 후에는 다시 시도 지연이 각각 두 배씩 증가하여 200, 400, 800이 됩니다.After each of the next three rounds, the retry delay doubles—to 200, 400, and 800. 이후의 모든 라운드에서 다시 시도 지연은 연결 시도가 성공하거나 시간이 초과될 때까지 1초입니다.For all later rounds, the retry delay is 1 second until the connection attempt succeeds or times out.

참고

서버 인스턴스가 중지되면 연결 요청이 즉시 실패합니다.If the server instance is stopped, then the connection request fails immediately.

다음 그림에서는 파트너가 서로 역할을 전환하는 수동 장애 조치 중에 다시 시도 지연이 연결 시도에 미치는 영향을 보여 줍니다.The following figure illustrates how the retry delay affects connection attempts during a manual failover, in which the partners switch their roles. 로그인 제한 시간은 15초입니다.The login time-out period is 15 seconds.

다시 시도 지연 알고리즘Retry-delay algorithm

데이터베이스 미러링 세션에 다시 연결 Reconnecting to a Database Mirroring Session

데이터베이스 미러링 장애 조치(Failover) 등의 이유로 데이터베이스 미러링 세션에 대해 설정된 연결이 실패하고 응용 프로그램이 초기 서버에 다시 연결하는 경우 데이터 액세스 공급자는 클라이언트 캐시에 저장된 장애 조치(failover) 파트너 이름을 사용하여 다시 연결할 수 있습니다.If an established connection to a database mirroring session fails for any reason, for example, due to a database mirroring failover, and the application attempts to reconnect to the initial server, the data access provider can attempt to reconnect using the failover partner name stored in the client's cache. 그러나 다시 연결은 자동으로 수행되지 않습니다.Reconnecting is not automatic, however. 응용 프로그램에서 오류를 알고 있어야 합니다.The application must become aware of the error. 그런 다음 응용 프로그램은 실패한 연결을 닫고 동일한 연결 문자열 특성을 사용하여 새 연결을 열어야 합니다.Then, the application needs to close the failed connection and open a new connection using the same connection string attributes. 이때 데이터 액세스 공급자는 장애 조치(failover) 파트너로 연결을 리디렉션합니다.At this point, the data access provider redirects the connection to the failover partner. 이 이름으로 식별된 서버 인스턴스가 현재 주 서버이면 일반적으로 연결 시도에 성공합니다.If the server instance identified by this name is currently the principal server, the connection attempt usually succeeds. 트랜잭션이 커밋 또는 롤백되었는지가 확실하지 않으면 응용 프로그램에서 독립 실행형 서버 인스턴스에 다시 연결할 때와 같은 방식으로 트랜잭션 상태를 확인해야 합니다.If it is unclear whether a transaction was committed or rolled back, the application must check on the state of the transaction, in the same way as when reconnecting to a stand-alone server instance.

다시 연결은 연결 문자열이 장애 조치(failover) 파트너 이름을 제공한 초기 연결과 유사합니다.Reconnecting resembles an initial connection for which the connection string supplied a failover partner name. 첫 번째 연결 시도가 실패하면 클라이언트가 주 서버에 연결하거나 데이터 액세스 공급자가 시간 초과될 때까지 연결 시도에서 초기 파트너 이름과 장애 조치(failover) 파트너 이름을 교대로 사용합니다.If the first connection attempt fails, connection attempts alternate back and forth between the initial partner name and failover partner name until either the client connects to the principal server or the data access provider times out.

참고

SQL ServerSQL Server Native Client는 주 서버 인스턴스에 연결하는지 확인하지만, 이 인스턴스가 연결 문자열의 초기 파트너 이름에 지정된 서버 인스턴스의 파트너인지 여부는 확인하지 않습니다. Native Client verifies that it connects to a principal server instance but not whether this instance is the partner of server instance specified in the initial partner name of the connection string.

연결에서 TCP/IP를 사용하는 경우 연결 다시 시도 알고리즘에 의해 각 라운드의 연결 시도에 할당되는 시간이 결정됩니다.If the connections use TCP/IP, the connection retry algorithm determines the amount of time allotted to the connection attempts in each round.

중요

데이터베이스에서 클라이언트의 연결이 끊어지는 경우 데이터 액세스 공급자는 다시 연결을 시도하지 않습니다.If the client gets disconnected from the database, the data access provider does not attempt to reconnect. 클라이언트는 새 연결 요청을 실행해야 합니다.The client must issue a new connection request. 또한 연결 손실 시 응용 프로그램이 종료되면 캐시된 파트너 이름도 손실됩니다.Also, if an application shuts down on losing the connection, it will lose the cached partner names. 주 서버를 사용할 수 없어 연결이 손실된 경우 연결 문자열의 장애 조치(failover) 파트너 이름을 제공해야만 응용 프로그램이 미러 서버에 다시 연결할 수 있습니다.If the connection was lost because the principal server became unavailable, the only way that the application can reconnect to the mirror server is by supplying the failover partner name in its connection string.

리디렉션이 클라이언트 응용 프로그램에 미치는 영향Impact of Redirection on a Client Application

장애 조치 후에 데이터 액세스 공급자는 현재 주 서버 인스턴스로 연결을 리디렉션합니다.After a failover, the data access provider redirects the connection to the current principal server instance. 그러나 클라이언트에서 리디렉션을 인식하지 못합니다.However, the redirection is transparent to clients. 리디렉션된 연결은 초기 파트너 이름으로 식별된 서버 인스턴스에 대한 연결인 것처럼 클라이언트에 표시됩니다.To a client, a redirected connection appears to be a connection to the server instance identified by the initial partner name. 초기 파트너가 현재 미러 서버인 경우 클라이언트가 미러 서버에 연결되어 있으며 미러 데이터베이스를 업데이트하는 것처럼 보일 수 있습니다.When the initial partner is currently the mirror server, the client can appear to be connected to the mirror server and updating the mirror database. 그러나 클라이언트는 실제로 현재 주 데이터베이스인 장애 조치(failover) 파트너로 리디렉션되었으며 새로운 주 데이터베이스를 업데이트하고 있습니다.Actually, however, the client has been redirected to the failover partner, which is the current principal database, and the client is updating the new principal database.

장애 조치(failover) 파트너로 리디렉션된 후에 클라이언트에서 다른 데이터베이스를 사용하기 위해 Transact-SQLTransact-SQL USE 문을 사용하면 예기치 않은 결과가 발생할 수 있습니다.After being redirected to the failover partner, a client can experience unexpected results when using a Transact-SQLTransact-SQL USE statement to use a different database. 현재 주 서버 인스턴스(장애 조치(failover) 파트너)에 원래 주 서버(초기 파트너)와 다른 데이터베이스 집합이 있을 경우 이런 문제가 발생합니다.This can happen if the current principal server instance (the failover partner) has a different set of databases than the original principal server (the initial partner).

유효하지 않은 장애 조치(Failover) 파트너 이름의 영향 The Impact of a Stale Failover Partner Name

데이터베이스 관리자는 언제라도 장애 조치(Failover) 파트너를 변경할 수 있습니다.The database administrator can change the failover partner at any time. 그러므로 클라이언트에서 제공한 장애 조치(failover) 파트너 이름이 최신이 아니거나 부실할 수 있습니다.Therefore, a client-supplied failover partner name might be out of date, or stale. 예를 들어 Partner_B라는 장애 조치(failover) 파트너가 다른 서버 인스턴스인 Partner_C로 바뀔 수 있습니다.For example, consider a failover partner named Partner_B that is replaced by another server instance, Partner_C. 이 경우 클라이언트에서는 장애 조치(failover) 파트너 이름으로 Partner_B를 제공하지만 이 이름은 유효하지 않습니다.Now, if a client supplies Partner_B as the failover partner name, that name is stale. 클라이언트가 제공한 장애 조치(failover) 파트너 이름이 지난 데이터인 경우 데이터 액세스 공급자의 동작은 클라이언트에서 장애 조치(failover) 파트너 이름을 제공하지 않은 경우와 같습니다.When the client-supplied failover partner name is stale, the behavior of the data access provider equates to the case in which a failover partner name is not supplied by the client.

예를 들어 클라이언트가 하나의 연결 문자열을 사용하여 4회 연속으로 연결 시도를 하는 경우를 가정합니다.For example, consider situation in which a client uses one connection string for a series of four connection attempts. 연결 문자열에서 초기 파트너 이름은 Partner_A이고 장애 조치(failover) 파트너 이름은 Partner_B입니다.In the connection string, the initial partner name is Partner_A, and the failover partner name is Partner_B:

"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks"  

다음 표에서는 4가지 파트너 구성을 보여 주고 각 구성에 대해 이 연결 문자열이 클라이언트를 처음 연결하는 데 사용되는지 여부를 나타냅니다.The following table shows four partner configurations and indicates for each whether this connection string works for connecting the client for the first time.

참고

응용 프로그램에서 구성 변경 내용을 추적하고 연결 문자열을 적절하게 변경할 수 있습니다.An application can track configuration changes and change its connection string accordingly. 이렇게 하려면 추가 코드가 필요하지만 관리 작업이 줄어듭니다.This requires extra code but reduces the administrative burden.

ConfigurationConfiguration 주 서버Principal server 미러 서버Mirror server Partner_A 및 Partner_B를 지정하여 연결을 시도할 때의 동작Behavior when attempting to connect specifying Partner_A and Partner_B
초기 미러링 구성 단계입니다.Original mirroring configuration. Db_1Partner_A Partner_BPartner_B Partner_A가 초기 파트너 이름으로 캐시됩니다.Partner_A is cached as the initial partner name. 클라이언트가 Partner_A에 대한 연결에 성공합니다.The client succeeds in connecting to Partner_A. 클라이언트는 미러 서버 이름인 Partner_B를 다운로드하고 이를 캐시합니다. 이때 클라이언트가 제공한 장애 조치(failover) 파트너 이름은 무시합니다.The client downloads the name of mirror server, Partner_B, and caches it, ignoring the client-supplied failover partner name.
Partner_A에 하드웨어 오류가 발생하고 장애 조치가 수행됩니다(클라이언트 연결 끊기).Partner_A experiences a hardware failure, and failover occurs (disconnecting clients). Partner_BPartner_B nonenone Partner_A가 초기 파트너 이름으로 계속 캐시되지만 클라이언트가 제공한 장애 조치(failover) 파트너 이름인 Partner_B를 사용하여 클라이언트는 현재 주 서버에 연결할 수 있습니다.The Partner_A is still cached as the initial partner name, but the client-supplied failover partner name, Partner_B, permits the client to connect to the current principal server.
데이터베이스 관리자는 미러링을 중지(클라이언트 연결 끊기)하고 Partner_A를 Partner_C로 바꾼 다음 미러링을 다시 시작합니다.The database administrator stops mirroring (disconnecting clients), replaces Partner_A with Partner_C, and restarts mirroring. Partner_BPartner_B Partner_CPartner_C 클라이언트가 Partner_A에 연결을 시도하지만 실패합니다. 그런 다음 클라이언트가 Partner_B(현재 주 서버)에 연결을 시도하여 성공합니다.The client attempts to connect to Partner_A and fails; then the client tries Partner_B (the current principal server) and succeeds. 데이터 액세스 공급자는 현재 미러 서버 이름인 Partner_C를 다운로드하고 이를 현재 장애 조치(failover) 파트너 이름으로 캐시합니다.The data access provider downloads the name of the current mirror server, Partner_C, and caches it as the current failover partner name.
서비스가 Partner_C로 수동으로 장애 조치가 수행됩니다(클라이언트 연결 끊기).Service is manually failed over to Partner_C (disconnecting clients). Partner_CPartner_C Partner_BPartner_B 클라이언트가 처음에는 Partner_A로 연결을 시도한 다음 Partner_B로 연결을 시도합니다.Client attempts to connect to Partner_A initially, and then to Partner_B. 두 이름이 모두 유효하지 않으면 연결 요청 시간이 초과되고 실패합니다.Both names fail, and eventually the connection request times out and fails.

참고 항목See Also

데이터베이스 미러링(SQL Server) Database Mirroring (SQL Server)
데이터베이스 미러링 중에 발생 가능한 오류Possible Failures During Database Mirroring