다음을 통해 공유


SqlClient를 사용하여 구성 가능한 다시 시도 논리 구성 파일

적용 대상: .NET Framework .NET .NET Standard

ADO.NET 다운로드

안전 스위치를 사용할 때 기본 다시 시도 방법은 SqlConnectionSqlCommand 모두에 대해 SqlConfigurableRetryFactory.CreateNoneRetryProvider입니다. 구성 파일을 사용하여 다른 다시 시도 방법을 지정할 수 있습니다.

구성 섹션

구성 파일의 configSections 섹션 내에 다음 섹션을 추가하여 애플리케이션에 대한 기본 다시 시도 논리 옵션을 변경할 수 있습니다.

  • SqlConfigurableRetryLogicConnection: SqlConnection에 대한 기본 다시 시도 논리를 지정합니다.
<section name="SqlConfigurableRetryLogicConnection"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
  • SqlConfigurableRetryLogicCommand: SqlCommand에 대한 기본 다시 시도 논리를 지정합니다.
<section name="SqlConfigurableRetryLogicCommand"
        type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
  • AppContextSwitchOverrides: .NET Framework는 명시적으로 정의하지 않아도 되는 AppContextSwitchOverrides 섹션을 통해 AppContext 스위치를 지원합니다. .NET Core에서 스위치를 활성화하려면 이 섹션을 지정해야 합니다.
<section name="AppContextSwitchOverrides"
        type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>

참고 항목

configuration 섹션 내에 다음 구성을 지정해야 합니다. 애플리케이션 구성 파일을 통해 기본 다시 시도 논리를 구성하려면 이러한 새 섹션을 선언하세요.

안전 스위치 사용

참고 항목

Microsoft.Data.SqlClient v4.0부터 구성 가능한 다시 시도 논리 기능을 사용하기 위해 앱 컨텍스트 전환 "Switch.Microsoft.Data.SqlClient.EnableRetryLogic"이 더 이상 필요하지 않습니다. 이 기능은 이제 프로덕션에서 지원됩니다. 이 기능의 기본 동작은 계속해서 비시도 정책으로 유지되며 재시도를 사용하도록 설정하려면 클라이언트 애플리케이션에서 이 정책을 재정의해야 합니다.

구성 파일을 통해 안전 스위치를 사용하도록 설정할 수 있습니다. 애플리케이션 코드를 통해 사용하도록 설정하는 방법을 알아보려면 구성 가능한 다시 시도 논리 사용을 참조하세요.

<runtime>
    <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
</runtime>
  • .NET Core: .NET Framework와 같이 세미콜론(;)으로 구분된 여러 개의 스위치를 지원합니다.
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

연결 섹션

다음 특성을 사용하여 애플리케이션의 모든 SqlConnection 인스턴스에 대한 기본 다시 시도 논리를 지정할 수 있습니다.

  • numberOfTries: 시도 횟수를 설정합니다.

  • deltaTime: 격차 시간 간격을 TimeSpan 개체로 설정합니다.

  • minTime: 허용되는 최소 격차 시간 간격을 TimeSpan 개체로 설정합니다.

  • maxTime: 허용되는 최대 격차 시간 간격을 TimeSpan 개체로 설정합니다.

  • transientErrors: 다시 시도할 일시적인 오류 번호 목록을 설정합니다.

  • retryMethod: SqlRetryLogicOption 매개 변수를 통해 다시 시도 구성을 수신하고 SqlRetryLogicBaseProvider 개체를 반환하는 다시 시도 메서드 작성자를 지정합니다.

  • retryLogicType: retryMethod를 제공하는 다시 시도 메서드 작성자를 포함하는 사용자 지정 다시 시도 논리 공급자를 설정합니다. 이 메서드는 retryMethod의 조건을 충족해야 합니다. 공급자의 정규화된 형식 이름을 사용해야 합니다. 자세한 내용은 정규화된 형식 이름 지정을 참조하세요.

참고 항목

기본 제공 다시 시도 공급자를 사용하는 경우 retryLogicType을 지정할 필요는 없습니다. 기본 제공 다시 시도 공급자를 찾으려면 SqlClient의 내부 다시 시도 논리 공급자를 참조하세요.

명령 섹션

애플리케이션의 모든 SqlCommand 인스턴스에 대해 다음 특성을 설정할 수도 있습니다.

  • authorizedSqlCondition: 특정 SQL 문을 필터링하기 위해 SqlCommand.CommandText에 대한 사전 다시 시도 정규식을 설정합니다.

참고 항목

정규식은 대/소문자를 구분합니다.

예제

  • SqlConfigurableRetryFactory.CreateFixedRetryProvider 메서드 및 기본 일시적인 오류 목록을 사용하여 시도 사이에 약 1초의 지연 시간으로 최대 3회 연결을 설정하려고 시도합니다.

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" 
                                            numberOfTries ="3" deltaTime ="00:00:01"/>
    
  • SqlConfigurableRetryFactory.CreateExponentialRetryProvider 메서드 및 기본 일시적인 오류 목록을 사용하여 시도 사이에 최대 45초의 지연 시간으로 최대 5회 연결을 설정하려고 시도합니다.

    <SqlConfigurableRetryLogicConnection retryMethod ="CreateExponentialRetryProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"/>
    
  • SqlConfigurableRetryFactory.CreateIncrementalRetryProvider 메서드 및 기본 일시적인 오류 목록을 사용하여 2~30초의 지연 시간으로 최대 4회 연결을 설정하려고 시도합니다.

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider"
                        numberOfTries ="4" deltaTime ="00:00:02" maxTime ="00:00:30"/>
    
  • 1초에서 1분까지의 지연 시간으로 최대 8회 명령을 실행하려고 시도합니다. CommandText에 단어 SELECT를 포함하고 예외 번호 102 또는 997이 있는 명령으로 제한됩니다. 기본 제공 SqlConfigurableRetryFactory.CreateIncrementalRetryProvider 메서드를 사용합니다.

    <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" 
                            numberOfTries ="8" deltaTime ="00:00:01" maxTime ="00:01:00"
                            transientErrors="102, 997"
                            authorizedSqlCondition="\b(SELECT)\b"/>
    

참고 항목

다음 두 샘플의 경우 SqlClient의 구성 가능한 다시 시도 논리 핵심 API에서 사용자 지정 다시 시도 논리 소스 코드를 찾을 수 있습니다. CreateCustomProvider 메서드가 애플리케이션의 실행 디렉터리에 있는CustomCRL_Doc.CustomRetry 클래스(CustomCRL_Doc.dll 어셈블리 내)에 정의되어 있다고 가정합니다.

  • 3~45초의 지연 시간으로 목록에 오류 번호 4060, 997, 233이 있고 지정된 사용자 지정 다시 시도 공급자를 사용하여 최대 5회 연결을 설정하려고 시도합니다.

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                        retryMethod ="CreateCustomProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    
  • 이 샘플은 이전 샘플과 같이 동작합니다.

    <SqlConfigurableRetryLogicConnection retryLogicType ="CustomCRL_Doc.CustomRetry, CustomCRL_Doc"
                        retryMethod ="CreateCustomProvider" 
                        numberOfTries ="5" deltaTime ="00:00:03" maxTime ="00:00:45"
                        transientErrors ="4060, 997, 233"/>
    

참고 항목

다시 시도 논리 공급자는 애플리케이션 수명 동안 나중에 사용할 수 있도록 연결 또는 명령에서 처음 사용할 때 캐시됩니다.

참고 항목

다시 시도 논리 설정에 대한 애플리케이션 구성 파일을 읽을 때 발생하는 오류는 애플리케이션에서 오류를 일으키지 않습니다. SqlConfigurableRetryFactory.CreateNoneRetryProvider 기본값이 대신 사용됩니다.

이벤트 원본 추적을 사용하여 다시 시도 논리 구성과 관련된 문제를 확인하거나 해결할 수 있습니다. 자세한 내용은 SqlClient에서 이벤트 추적 사용을 참조하세요.

참고 항목