OLE DB 드라이버의 유휴 연결 복원력

적용 대상: SQL Server 2014(12.x) 이상 Azure SQL 데이터베이스

OLE DB 드라이버 다운로드

개요

Microsoft OLE DB Driver for SQL Server 버전 18.6.0부터 연결 복원력을 통해 드라이버에서 끊어진 유휴 연결을 자동으로 복원할 수 있습니다.

다음 다이어그램은 OLE DB 드라이버에서 유휴 연결 복원력이 작동하는 방식을 설명합니다. 연결 복원력 정보 다이어그램

  1. T1에서 IDBInitialize::Initialize를 사용하여 연결이 설정됩니다.
  2. T2와 T3 사이에 드라이버와 서버 간 통신이 없는 기간이 있어서 유휴 연결이 발생합니다. 이 시간 동안 네트워크 연결이 중단될 수 있습니다. 중단은 네트워크 디바이스가 유휴 소켓을 닫거나 디바이스가 짧은 기간 동안 대기 모드로 전환되는 것일 수 있습니다.
  3. T3에서 클라이언트 애플리케이션이 OLE DB 드라이버를 사용하여 명령을 실행하려고 합니다(예: ICommand::Execute 사용). 드라이버에서 연결이 끊어진 것을 감지하고 투명하게 연결을 다시 설정합니다.

키워드 및 속성

키워드 속성 기본값 설명
ConnectRetryCount SSPROP_INIT_CONNECT_RETRY_COUNT 0과 255(포함) 사이의 정수 값 1 연결이 끊어진 경우 다시 연결하려고 시도하는 최대 횟수를 제어합니다. 기본적으로 끊어진 연결을 다시 설정하려고 한 번 시도합니다. 값이 0이면 재연결을 시도하지 않습니다.
ConnectRetryInterval SSPROP_INIT_CONNECT_RETRY_INTERVAL 1과 60(포함) 사이의 정수 10 연결을 다시 시도하는 간격(초)입니다. ConnectRetryCount가 0이면 이 키워드는 무시됩니다.

다음 페이지에서 이러한 속성 설정에 대한 자세한 정보를 제공합니다.

애플리케이션이 DBPROP_INIT_PROMPT에 연결하고 나중에 끊어진 연결을 통해 문을 실행하려고 하면 OLE DB 드라이버는 대화 상자를 다시 표시하지 않습니다.

DBPROP_CONNECTIONSTATUS 속성을 통해 연결 상태를 가져오는 경우:

  • 복구 중에는 속성이 DBPROPVAL_CS_INITIALIZED를 반환합니다.
  • 복구에 실패하면 속성이 DBPROPVAL_CS_COMMUNICATIONFAILURE를 반환합니다.

참고

명령 시간 제한(DBPROPSET_ROWSET의 DBPROP_COMMANDTIMEOUT)이 0이 아닌 값으로 설정되었으며 연결 복구에 명령 시간 제한보다 오랜 시간이 걸리면 연결이 복구되지 않습니다.

비동기 실행을 사용한 연결 복구

비동기 실행을 사용 중이며 연결을 복구해야 하는 경우 비동기 호출을 실행하기 전에 연결 복구가 동기적으로 수행됩니다. 비동기 실행에 대한 자세한 내용은 비동기 작업 수행을 참조하세요.

예상 오류

연결 복구에 실패하면 다음 오류 중 하나가 발생할 수 있습니다.

  • 연결이 끊어져서 복구가 불가능합니다. 클라이언트 드라이버가 한 번 이상 연결을 복구하려고 시도했지만 모든 시도가 실패했습니다. 복구 시도 횟수를 늘리려면 ConnectRetryCount의 값을 늘립니다.
  • 서버가 복구 시도를 승인하지 않았으므로 연결 복구가 가능하지 않습니다.
  • 서버가 복구 시도 중 요청된 정확한 클라이언트 TDS 버전을 유지하지 않았기 때문에 연결 복구가 가능하지 않습니다.
  • 서버가 복구 시도 중 요청된 정확한 서버의 주 버전을 유지하지 않았기 때문에 연결 복구가 가능하지 않습니다.
  • 연결이 끊어져서 복구가 불가능합니다. 서버에서 연결을 복구할 수 없다고 표시합니다. 연결을 복원하려고 시도하지 않았습니다.
  • 연결이 끊어져서 복구가 불가능합니다. 클라이언트 드라이버에서 연결을 복구할 수 없다고 표시합니다. 연결을 복원하려고 시도하지 않았습니다.
  • 복구를 시도하는 동안 서버에서 SSL 암호화를 유지하지 않았습니다. 연결을 복구할 수 없습니다.