Řešení přechodných chyb připojení ve službách SQL Database a SQL Managed Instance

Platí pro:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Tento článek popisuje, jak zabránit, řešit potíže, diagnostikovat a zmírnit chyby připojení a přechodné chyby, se kterými se vaše klientská aplikace setká při interakci se službou Azure SQL Database, službou Azure SQL Managed Instance a Azure Synapse Analytics. Zjistěte, jak nakonfigurovat logiku opakování, sestavit připojovací řetězec a upravit další nastavení připojení.

Přechodné chyby (přechodné chyby)

Přechodná chyba, označovaná také jako přechodná chyba, má základní příčinu, která se brzy vyřeší. Občas je příčinou přechodných chyb rychlé přesouvání hardwarových prostředků systémem Azure kvůli lepšímu vyrovnávání zatížení různých úloh. Většina těchto událostí rekonfigurace trvá méně než 60 sekund. Během této doby rekonfigurace můžete mít problémy s připojením k databázi v SQL Database. Aplikace, které se připojují k databázi, by měly být vytvořené tak, aby očekávaly tyto přechodné chyby. Pokud je chcete zpracovat, implementujte do jejich kódu logiku opakování místo toho, abyste je uživatelům zpřístupňovali jako chyby aplikace.

Pokud váš klientský program používá ADO.NET, program se dozví o přechodné chybě vyvoláním výjimky SqlException.

Připojení ion vs. command

Opakujte pokus o připojení služby SQL Database a spravované instance SQL nebo ho znovu nastavte v závislosti na následujících případech:

  • Během pokusu o připojení dojde k přechodné chybě.

Po prodlevě několika sekund zkuste připojení zopakovat.

  • Během příkazu dotazu sql Database a spravované instance SQL dojde k přechodné chybě.

Opakujte příkaz okamžitě. Místo toho po zpoždění nové navázání připojení. Pak zkuste příkaz zopakovat.

Logika opakování pro přechodné chyby

Klientské programy, u kterých občas dochází k přechodné chybě, jsou robustnější, pokud obsahují logiku opakování. Když váš program komunikuje s vaší databází ve službě SQL Database prostřednictvím middlewaru třetích stran, zeptejte se dodavatele, jestli middleware obsahuje logiku opakování přechodných chyb.

Principy opakování

  • Pokud je chyba přechodná, zkuste znovu otevřít připojení.
  • Neopakujte přímo příkaz služby SQL Database nebo spravované instance SELECT SQL, který selhal s přechodnou chybou. Místo toho vytvořte nové připojení a potom akci opakujte SELECT.
  • Pokud příkaz SQL Database nebo SQL Managed Instance UPDATE selže s přechodnou chybou, vytvořte nové připojení před opakováním aktualizace. Logika opakování musí zajistit, aby byla dokončena celá databázová transakce nebo že se celá transakce vrátila zpět.

Další aspekty opakování

  • Dávkový program, který se automaticky spustí po pracovní době a končí před ranní dobou, si může dovolit být velmi trpělivý s dlouhými časovými intervaly mezi pokusy o opakování.
  • Program uživatelského rozhraní by měl počítat s lidskou tendenci vzdát se po příliš dlouhém čekání. Řešení nesmí opakovat každých několik sekund, protože tato zásada může systém zahltit požadavky.

Zvýšení intervalu mezi opakovanými pokusy

Doporučujeme počkat 5 sekund před prvním opakováním. Opakování po zpoždění kratším než 5 sekund riskuje zahlcení cloudové služby. U každého dalšího opakování by se zpoždění mělo exponenciálně zvětšit až na 60 sekund.

Diskuzi o době blokování pro klienty, kteří používají ADO.NET, najdete v tématu Připojení ion pooling (ADO.NET).

Můžete také nastavit maximální počet opakování před ukončením programu.

Ukázky kódu s logikou opakování

Příklady kódu s logikou opakování jsou k dispozici v těchto případech:

Testování logiky opakování

Pokud chcete otestovat logiku opakování, musíte simulovat nebo způsobit chybu, která se dá opravit, když je program stále spuštěný.

Testování odpojením od sítě

Jedním ze způsobů, jak otestovat logiku opakování, je odpojit klientský počítač od sítě, když je program spuštěný. Chyba:

  • SqlException.Number = 11001
  • Zpráva: "Žádný takový hostitel není znám"

V rámci prvního pokusu o opakování můžete klientský počítač znovu připojit k síti a pak se pokusit připojit.

Pokud chcete, aby byl tento test praktický, odpojte počítač od sítě před spuštěním programu. Program pak rozpozná parametr modulu runtime, který způsobí, že program:

  • Dočasně přidejte 11001 do seznamu chyb, které je potřeba vzít v úvahu jako přechodné.
  • Zkuste první připojení jako obvykle.
  • Po zachycení chyby odeberte ze seznamu 11001.
  • Zobrazí zprávu, která uživateli řekne, aby počítač připojil k síti.
  • K pozastavení dalšího provádění použijte metodu Console.ReadLine nebo dialogové okno s tlačítkem OK. Uživatel po připojení počítače k síti stiskne klávesu Enter.
  • Zkuste se znovu připojit, očekáváme úspěch.

Otestujte chybně napsané uživatelské jméno při připojování.

Program může záměrně chybně zadat uživatelské jméno před prvním pokusem o připojení. Chyba:

  • SqlException.Number = 18456
  • Zpráva: Přihlášení uživatele WRONG_MyUserName se nezdařilo.

V rámci prvního pokusu o opakování může váš program opravit pravopis a pak se pokusit připojit.

Aby byl tento test praktický, program rozpozná parametr modulu runtime, který způsobí, že program:

  • Dočasně přidejte 18456 do seznamu chyb, které je potřeba vzít v úvahu jako přechodné.
  • Účelně přidejte do uživatelského jména "WRONG_".
  • Po zachycení chyby odeberte ze seznamu číslo 18456.
  • Odeberte z uživatelského jména WRONG_.
  • Zkuste se znovu připojit, očekáváme úspěch.

Parametry .NET Sql Připojení ion pro opakování připojení

Pokud se váš klientský program připojí k databázi ve službě Azure SQL Database pomocí třídy .NET Framework System.Data.SqlClient.Sql Připojení ion, použijte .NET 4.6.1 nebo novější verzi (nebo .NET Core), abyste mohli použít funkci opakování připojení. Další informace o této funkci najdete v tématu Sql Připojení ion.PřipojeníionString – vlastnost.

Při sestavování připojovací řetězec pro objekt Sql Připojení ion koordinuje hodnoty mezi následující parametry:

  • Připojení RetryCount: Výchozí hodnota je 1. Rozsah je 0255.
  • Připojení RetryInterval: Výchozí hodnota je 10 sekund. Rozsah je 160.
  • časový limit Připojení: Výchozí hodnota je 15 sekund. Rozsah je 02147483647.
  • Časový limit příkazu: Výchozí hodnota je 30 sekund. Rozsah je 02147483647.

Nastavení opakování připojení (Připojení RetryCount a Připojení RetryInterval) platí pro odolnost připojení. odolnost Připojení zahrnuje následující různé typy:

  • Odolnost otevřeného připojení odkazuje na počáteční sql Připojení ion. Metoda Open nebo OpenAsync(). První pokus o připojení se počítá jako pokus nula. Připojení RetryCount se vztahuje na následné opakování. Pokud se tedy nula připojení nezdaří (nemusí k tomu dojít okamžitě), použije se nejprve Připojení RetryInterval a následné pokusy o Připojení RetryCount (a Připojení RetryInterval). Pokud chcete využít všechny pokusy o opakování, musí vlastnost časového limitu Připojení ion poskytnout čas pro všechny pokusy.

  • Odolnost nečinného připojení odkazuje na automatickou detekci a opětovné připojení stávajících nečinných připojení, která byla přerušena. První pokus o opětovné připojení přerušeného nečinného připojení se počítá jako první pokus o opakování. Pokud chcete využít všechny pokusy o opakování, musí časový limit příkazu poskytnout čas pro všechny pokusy.

Příklad: Předpokládejme následující hodnoty pro parametry Připojení RetryCount a Připojení RetryInterval:

Připojení RetryCount: 3 Připojení RetryInterval: 10 sekund

Podívejte se, jak se tyto hodnoty používají v následujících scénářích:

Scénář: Nové připojení

4:10:00 - Připojení ion. Open() – nulový pokus

4:10:01 – zjištěna chyba Připojení

4:10:11 - Opakování 1 –-> První opakování nastane po Připojení RetryInterval

4:10:21 - Opakovat 2

4:10:31 - Opakovat 3

Pro tento scénář by zvolené hodnoty měly splňovat následující podmínku:
Connection Timeout > = ConnectRetryCount * ConnectionRetryInterval

Pokud je například počet 3 a interval je 10 sekund, časový limit pouze 29 sekund neposkytuje dostatek času pro třetí a poslední pokus o připojení systému:

29 < 3 * 10

Scénář: Nečinné připojení

Připojení RetryCount: 3 Připojení RetryInterval: 10 sekund

4:10:00 - Bylo zjištěno přerušené připojení při spuštění příkazu

4:10:00 - Opakování 1 -->První opakování proběhne okamžitě.

4:10:10 - Opakovat 2

4:10:20 - Opakovat 3

Toto není počáteční připojení. Časový limit Připojení proto neplatí. Vzhledem k tomu, že během provádění příkazu dojde k obnovení připojení, platí nastavení časového limitu příkazu. Výchozí časový limit příkazu je 30 sekund. Obnovení připojení je sice v typických případech rychlé, ale občasný výpadek může způsobit, že obnovení nějakou dobu provádění příkazu trvá.

Pokud v tomto scénáři chcete plně využít nečinné pokusy o obnovení připojení, měly by zvolené hodnoty splňovat následující podmínku:
Command Timeout > (ConnectRetryCount - 1) * ConnectionRetryInterval

Pokud je například počet 3 a interval je 10 sekund, hodnota časového limitu příkazu nižší než 20 sekund by nedal dostatek času na třetí a poslední opakování připojení: (3 –1) * 10 = 20'

Vezměte také v úvahu, že samotný příkaz vyžaduje, aby se po obnovení připojení spustil čas.

Poznámka:

Hodnoty doby trvání, které jsou k dispozici v těchto scénářích, jsou určené pouze pro ukázku. Skutečná doba detekce v obou scénářích závisí na základní infrastruktuře.

Připojení ion vs. command

Parametry Připojení RetryCount a Připojení RetryInterval umožňují vašemu objektu Sql Připojení ion zopakovat operaci připojení, aniž by oznamovat nebo obtěžovat váš program, například vrácení ovládacího prvku do programu. Opakování může nastat v následujících situacích:

  • Sql Připojení ion. Volání metody Open
  • Sql Připojení ion. Volání metody Execute

Je tu jemné. Pokud během provádění dotazu dojde k přechodné chybě, objekt Sql Připojení ion operaci připojení nezopakuje. Určitě se dotaz nebude opakovat. Sql Připojení ion ale před odesláním dotazu na spuštění velmi rychle zkontroluje připojení. Pokud rychlá kontrola zjistí problém s připojením, sql Připojení opakování operace připojení. Pokud bude opakování úspěšné, odešle se dotaz ke spuštění.

Měli byste Připojení RetryCount kombinovat s logikou opakování aplikace.

Předpokládejme, že vaše aplikace má robustní vlastní logiku opakování. Operace připojení se může opakovat čtyřikrát. Pokud do připojovací řetězec přidáte Připojení RetryInterval a Připojení RetryCount =3, zvýšíte počet opakování na 4 * 3 = 12 opakování. Možná nemáte v úmyslu takový velký počet opakování.

Připojení iony k databázi ve službě SQL Database

Připojení ion: řetězec Připojení

Připojovací řetězec, která je nezbytná pro připojení k databázi, se mírně liší od řetězce použitého pro připojení k SQL Serveru. Připojovací řetězec databáze můžete zkopírovat z webu Azure Portal.

Získání připojovací řetězec z webu Azure Portal

Pomocí webu Azure Portal získejte připojovací řetězec, které je nezbytné pro interakci s Azure SQL Database v klientském programu.

  1. Vyberte Všechny služby>SQL Database.

  2. Do textového pole filtru v levém horním rohu podokna databází SQL zadejte název databáze.

  3. Vyberte řádek databáze.

  4. Jakmile se podokno zobrazí pro vaši databázi, vyberte tlačítka Minimalizovat a sbalte okna, která jste použili k procházení a filtrování databáze.

  5. V podokně databáze vyberte Zobrazit připojovací řetězec databáze.

  6. Zkopírujte odpovídající připojovací řetězec. Tj. pokud chcete použít knihovnu připojení ADO.NET, zkopírujte příslušný řetězec z karty ADO.NET .

    Copy the ADO connection string for your database

  7. Podle potřeby upravte připojovací řetězec. Tj. vložte heslo do připojovací řetězec nebo odeberte z uživatelského jména @<název_serveru>, pokud je uživatelské jméno nebo název serveru příliš dlouhý.

  8. V jednom nebo jiném formátu vložte informace připojovací řetězec do kódu klientského programu.

Další informace najdete v tématu Připojení ionové řetězce a konfigurační soubory.

Připojení ion: IP adresa

Sql Database musíte nakonfigurovat tak, aby přijímala komunikaci z IP adresy počítače, který je hostitelem klientského programu. Pokud chcete tuto konfiguraci nastavit, upravte nastavení brány firewall prostřednictvím webu Azure Portal.

Pokud zapomenete nakonfigurovat IP adresu, program selže s praktickou chybovou zprávou, která uvádí potřebnou IP adresu.

  1. Přihlaste se k portálu Azure.

  2. V seznamu vlevo vyberte Všechny služby.

  3. Posuňte se a vyberte SERVERY SQL.

    Find your Azure SQL Database server in the portal

  4. Do textového pole filtru začněte zadávat název serveru. Zobrazí se řádek.

  5. Vyberte řádek pro váš server. Zobrazí se podokno pro váš server.

  6. V podokně serveru vyberte Nastavení.

  7. Vyberte bránu firewall.

    Select Settings > Firewall

  8. Vyberte Přidat IP adresu klienta. Do prvního textového pole zadejte název nového pravidla.

  9. Zadejte nízké a vysoké hodnoty IP adres pro rozsah, který chcete povolit.

    • Může být užitečné mít konec nízké hodnoty s hodnotou 0 a vysokou hodnotou končí hodnotou 0,255.
  10. Zvolte Uložit.

Další informace najdete v tématu Konfigurace nastavení brány firewall ve službě SQL Database.

Připojení ion: Porty

Obvykle je potřeba zajistit, aby byl otevřený jenom port 1433 pro odchozí komunikaci v počítači, který je hostitelem vašeho klientského programu.

Pokud je například klientský program hostovaný na počítači s Windows, můžete k otevření portu 1433 použít bránu Windows Firewall na hostiteli.

  1. Otevřete okno Ovládací panely.
  2. Vyberte všechny Ovládací panely položky>brány Windows Firewall>Advanced Nastavení> Outbound Rules>Actions>New Rule.

Pokud je váš klientský program hostovaný na virtuálním počítači Azure, přečtěte si porty nad rámec 1433 pro ADO.NET 4.5 a SQL Database.

Základní informace o konfiguraci portů a IP adres v databázi najdete v tématu Brána firewall služby Azure SQL Database.

Připojení: ADO.NET 4.6.2 nebo novější

Pokud váš program používá ADO.NET třídy, jako je System.Data.SqlClient.Sql Připojení ion pro připojení ke službě SQL Database, doporučujeme použít rozhraní .NET Framework verze 4.6.2 nebo novější.

Počínaje ADO.NET 4.6.2

  • Otevřený pokus o připojení se pro Azure SQL pokusíte okamžitě opakovat, čímž se zlepší výkon aplikací s podporou cloudu.

Počínaje ADO.NET 4.6.1

  • Pro SLUŽBU SQL Database je spolehlivost vylepšená při otevření připojení pomocí sql Připojení ionu. Metoda Open Metoda Open nyní zahrnuje mechanismy opakování v rámci úsilí v reakci na přechodné chyby u určitých chyb v době časového limitu připojení.
  • Připojení sdružování je podporováno, což zahrnuje efektivní ověření, že objekt připojení, který poskytuje vašemu programu, funguje.

Pokud používáte objekt připojení z fondu připojení, doporučujeme, aby program dočasně zavře připojení, když se okamžitě nepoužívá. Opětovné otevření připojení není nákladné, ale je vytvořit nové připojení.

Pokud používáte ADO.NET 4.0 nebo starší, doporučujeme upgradovat na nejnovější ADO.NET. Od srpna 2018 si můžete stáhnout ADO.NET 4.6.2.

Diagnostika

Diagnostika: Testování, jestli se můžou připojit nástroje

Pokud se váš program nepodaří připojit k databázi v SQL Database, je jednou diagnostickou možností pokusu o připojení pomocí nástroje. V ideálním případě se nástroj připojí pomocí stejné knihovny, kterou program používá.

Na libovolném počítači s Windows můžete vyzkoušet tyto nástroje:

  • SQL Server Management Studio (ssms.exe), který se připojuje pomocí ADO.NET
  • sqlcmd.exe, který se připojuje pomocí rozhraní ODBC

Po připojení programu otestujte, jestli funguje krátký dotaz SQL SELECT.

Diagnostika: Kontrola otevřených portů

Pokud máte podezření, že pokusy o připojení selžou kvůli problémům s portem, můžete na počítači spustit nástroj, který hlásí konfiguraci portů.

V Linuxu můžou být užitečné následující nástroje:

  • netstat -nap
  • nmap -sS -O 127.0.0.1: Změňte ukázkovou hodnotu na vaši IP adresu.

Ve Windows může být užitečný nástroj PortQry.exe . Tady je příklad spuštění, které dotazovalo situaci na portu databáze ve službě SQL Database a které se spustilo na přenosném počítači:

[C:\Users\johndoe\]
>> portqry.exe -n johndoesvr9.database.windows.net -p tcp -e 1433

Querying target system called: johndoesvr9.database.windows.net

Attempting to resolve name to IP address...
Name resolved to 23.100.117.95

querying...
TCP port 1433 (ms-sql-s service): LISTENING

[C:\Users\johndoe\]
>>

Diagnostika: Protokolování chyb

Občasný problém je někdy nejvhodnější diagnostikovat detekcí obecného vzoru v průběhu dnů nebo týdnů.

Váš klient může pomoct s diagnostikou tím, že zaznamená všechny chyby, na které narazí. Je možné, že budete moct korelovat položky protokolu s chybovými daty, která sql Database interně protokoluje.

Enterprise Library 6 (EntLib60) nabízí spravované třídy .NET, které vám pomůžou s protokolováním. Další informace najdete v tématu 5 – Stejně snadné jako pád z protokolu: Použijte blok aplikace protokolování.

Diagnostika: Kontrola chyb v systémových protokolech

Tady jsou některé příkazy JAZYKa Transact-SQL SELECT, které dotazují protokoly chyb a další informace.

Dotaz protokolu Popis
SELECT e.*
FROM sys.event_log AS e
WHERE e.database_name = 'myDbName'
AND e.event_category = 'connectivity'
AND 2 >= DateDiff
  (hour, e.end_time, GetUtcDate())
ORDER BY e.event_category,
  e.event_type, e.end_time;
Zobrazení sys.event_log nabízí informace o jednotlivých událostech, včetně některých, které můžou způsobit přechodné chyby nebo selhání připojení.

V ideálním případě můžete korelovat hodnoty start_time nebo end_time s informacemi o tom, kdy u klientského programu došlo k problémům.

Abyste mohli tento dotaz spustit, musíte se připojit k hlavní databázi.
SELECT c.*
FROM sys.database_connection_stats AS c
WHERE c.database_name = 'myDbName'
AND 24 >= DateDiff
  (hour, c.end_time, GetUtcDate())
ORDER BY c.end_time;
Zobrazení sys.database_connection_stats nabízí agregované počty typů událostí pro další diagnostiku.

Abyste mohli tento dotaz spustit, musíte se připojit k hlavní databázi.

Diagnostika: Hledání problémových událostí v protokolu služby SQL Database

V protokolu služby SQL Database můžete vyhledat položky týkající se problémových událostí. Vyzkoušejte následující příkaz Transact-SQL SELECT v hlavní databázi:

SELECT
   object_name
  ,CAST(f.event_data as XML).value
      ('(/event/@timestamp)[1]', 'datetime2')                      AS [timestamp]
  ,CAST(f.event_data as XML).value
      ('(/event/data[@name="error"]/value)[1]', 'int')             AS [error]
  ,CAST(f.event_data as XML).value
      ('(/event/data[@name="state"]/value)[1]', 'int')             AS [state]
  ,CAST(f.event_data as XML).value
      ('(/event/data[@name="is_success"]/value)[1]', 'bit')        AS [is_success]
  ,CAST(f.event_data as XML).value
      ('(/event/data[@name="database_name"]/value)[1]', 'sysname') AS [database_name]
FROM
  sys.fn_xe_telemetry_blob_target_read_file('el', null, null, null) AS f
WHERE
  object_name != 'login_event'  -- Login events are numerous.
  and
  '2015-06-21' < CAST(f.event_data as XML).value
        ('(/event/@timestamp)[1]', 'datetime2')
ORDER BY
  [timestamp] DESC
;

Několik vrácených řádků z sys.fn_xe_telemetry_blob_target_read_file

Následující příklad ukazuje, jak může vrácený řádek vypadat. Zobrazené hodnoty null často nejsou null v jiných řádcích.

object_name                   timestamp                    error  state  is_success  database_name

database_xml_deadlock_report  2015-10-16 20:28:01.0090000  NULL   NULL   NULL        AdventureWorks

Podniková knihovna 6

Enterprise Library 6 (EntLib60) je architektura tříd .NET, která pomáhá implementovat robustní klienty cloudových služeb, z nichž jedna je SQL Database. Pokud chcete vyhledat témata vyhrazená pro každou oblast, ve které může EntLib60 pomoct, přečtěte si téma Enterprise Library 6 – duben 2013.

Logika opakování pro zpracování přechodných chyb je jednou oblastí, ve které může EntLib60 pomoct. Další informace naleznete v tématu 4 - Vytrvalost, tajemství všech vítězství: Použití přechodného bloku aplikace zpracování chyb.

Poznámka:

Zdrojový kód pro EntLib60 je k dispozici pro veřejné stahování z webu Download Center. Společnost Microsoft nemá v úmyslu provádět další aktualizace funkcí nebo aktualizace údržby knihovny EntLib.

Třídy EntLib60 pro přechodné chyby a opakování

Následující třídy EntLib60 jsou zvláště užitečné pro logiku opakování. Všechny tyto třídy jsou nalezeny v oboru názvů Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.

V oboru názvů Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling:

  • RetryPolicy – třída
    • Metoda ExecuteAction
  • ExponentialBackoff – třída
  • SqlDatabaseTransientErrorDetectionStrategy – třída
  • ReliableSql Připojení ion – třída
    • Metoda ExecuteCommand

V oboru názvů Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.TestSupport:

  • AlwaysTransientErrorDetectionStrategy – třída
  • NeverTransientErrorDetectionStrategy – třída

Tady jsou některé odkazy na informace o EntLib60:

EntLib60: Blok protokolování

  • Blok protokolování je vysoce flexibilní a konfigurovatelné řešení, které můžete použít k:
    • Vytvářejte a ukládejte zprávy protokolu do široké škály míst.
    • Kategorizace a filtrování zpráv
    • Shromážděte kontextové informace, které jsou užitečné pro ladění a trasování, a také pro auditování a obecné požadavky na protokolování.
  • Blok protokolování abstrahuje funkce protokolování z cíle protokolu, aby kód aplikace byl konzistentní bez ohledu na umístění a typ cílového úložiště protokolování.

Další informace najdete v tématu 5 – Stejně snadné jako pád z protokolu: Použijte blok aplikace protokolování.

Zdrojový kód metody EntLib60 IsTransient

Dále je ze třídy SqlDatabaseTransientErrorDetectionStrategy zdrojový kód jazyka C# pro metodu IsTransient . Zdrojový kód vysvětluje, které chyby byly považovány za přechodné a vhodné k opakování od dubna 2013.

public bool IsTransient(Exception ex)
{
  if (ex != null)
  {
    SqlException sqlException;
    if ((sqlException = ex as SqlException) != null)
    {
      // Enumerate through all errors found in the exception.
      foreach (SqlError err in sqlException.Errors)
      {
        switch (err.Number)
        {
            // SQL Error Code: 40501
            // The service is currently busy. Retry the request after 10 seconds.
            // Code: (reason code to be decoded).
          case ThrottlingCondition.ThrottlingErrorNumber:
            // Decode the reason code from the error message to
            // determine the grounds for throttling.
            var condition = ThrottlingCondition.FromError(err);

            // Attach the decoded values as additional attributes to
            // the original SQL exception.
            sqlException.Data[condition.ThrottlingMode.GetType().Name] =
              condition.ThrottlingMode.ToString();
            sqlException.Data[condition.GetType().Name] = condition;

            return true;

          case 10928:
          case 10929:
          case 10053:
          case 10054:
          case 10060:
          case 40197:
          case 40540:
          case 40613:
          case 40143:
          case 233:
          case 64:
            // DBNETLIB Error Code: 20
            // The instance of SQL Server you attempted to connect to
            // does not support encryption.
          case (int)ProcessNetLibErrorCode.EncryptionNotSupported:
            return true;
        }
      }
    }
    else if (ex is TimeoutException)
    {
      return true;
    }
    else
    {
      EntityException entityException;
      if ((entityException = ex as EntityException) != null)
      {
        return this.IsTransient(entityException.InnerException);
      }
    }
  }

  return false;
}

Další kroky