Řešení přechodných chyb připojení ve službách SQL Database a SQL Managed Instance
Platí pro: Azure SQL Database Azure 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í vs. příkaz
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 opakujteSELECT
. - 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 Sdružování připojení (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 SqlConnection 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.SqlConnection, 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 naleznete v tématu SqlConnection.ConnectionString – vlastnost.
Při sestavování připojovací řetězec pro objekt SqlConnection koordinuje hodnoty mezi následující parametry:
- ConnectRetryCount: Výchozí hodnota je 1. Rozsah je 0 až 255.
- ConnectRetryInterval: Výchozí hodnota je 10 sekund. Rozsah je 1 až 60.
- Časový limit připojení: Výchozí hodnota je 15 sekund. Rozsah je 0 až 2147483647.
- Časový limit příkazu: Výchozí hodnota je 30 sekund. Rozsah je 0 až 2147483647.
Nastavení opakování připojení (ConnectRetryCount a ConnectRetryInterval) se vztahuje na odolnost připojení. Odolnost připojení zahrnuje následující různé typy:
Odolnost otevřeného připojení odkazuje na počáteční metodu SqlConnection.Open nebo OpenAsync(). První pokus o připojení se počítá jako pokus nula. ConnectRetryCount se vztahuje na následné opakování. Proto pokud se připojení nula nezdaří (nemusí k tomu dojít okamžitě), použije se nejprve ConnectRetryInterval a následné pokusy ConnectRetryCount (a ConnectRetryInterval). Pokud chcete využít výhod všech opakovaných pokusů, musí vlastnost Vypršení časového limitu připojení 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 ConnectRetryCount a ConnectRetryInterval :
ConnectRetryCount: 3 ConnectRetryInterval: 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 – Connection.Open() – nulový pokus
4:10:01 – Zjistilo se selhání připojení
4:10:11 - Opakování 1 --> První opakování nastane po ConnectRetryInterval
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í
ConnectRetryCount: 3 ConnectRetryInterval: 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í se proto nepoužije. 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í vs. příkaz
Parametry ConnectRetryCount a ConnectRetryInterval umožňují objektu SqlConnection opakovat operaci připojení bez toho, aby oznamovat nebo obtěžovat program, například vrácení ovládacího prvku do programu. Opakování může nastat v následujících situacích:
- Volání metody SqlConnection.Open
- Volání metody SqlConnection.Execute
Je tu jemné. Pokud během provádění dotazu dojde k přechodné chybě, váš objekt SqlConnection nezopakuje operaci připojení. Určitě se dotaz nebude opakovat. SqlConnection 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, SqlConnection opakuje operaci připojení. Pokud bude opakování úspěšné, odešle se dotaz ke spuštění.
Měl by se ConnectRetryCount 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 ConnectRetryInterval a ConnectRetryCount =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í k databázi ve službě SQL Database
Připojení: Připojovací řetězec
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.
Vyberte Všechny služby>SQL Database.
Do textového pole filtru v levém horním rohu podokna databází SQL zadejte název databáze.
Vyberte řádek databáze.
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.
V podokně databáze vyberte Zobrazit připojovací řetězec databáze.
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 .
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ý.
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řipojovací řetězce a konfigurační soubory.
Připojení: 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.
Přihlaste se k portálu Azure.
V seznamu vlevo vyberte Všechny služby.
Posuňte se a vyberte SERVERY SQL.
Do textového pole filtru začněte zadávat název serveru. Zobrazí se řádek.
Vyberte řádek pro váš server. Zobrazí se podokno pro váš server.
V podokně serveru vyberte Nastavení.
Vyberte bránu firewall.
Vyberte Přidat IP adresu klienta. Do prvního textového pole zadejte název nového pravidla.
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.
Zvolte Uložit.
Další informace najdete v tématu Konfigurace nastavení brány firewall ve službě SQL Database.
Připojení: 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.
- Otevřete okno Ovládací panely.
- Vyberte všechny Ovládací panely položky>brány Windows Firewall>Upřesnit nastavení>odchozích pravidel>akcí>nové pravidlo.
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.SqlConnection 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šena při otevření připojení pomocí metody SqlConnection.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í.
- Podporuje se sdružování připojení, 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 článek Enterprise Library 6.
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
- ReliableSqlConnection – 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:
- Zdarma ke stažení knihy: Příručka pro vývojáře microsoft Enterprise Library, 2. vydání.
- Osvědčené postupy: Obecné pokyny pro opakování mají vynikající podrobnou diskuzi o logice opakování.
- Stažení NuGet: Podniková knihovna – Přechodný blok aplikace pro zpracování chyb 6.0
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 objasňuje, které chyby byly považovány za přechodné a stojí za to zopakovat.
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
- Knihovny připojení pro SQL Database a SQL Server
- Sdružování připojení (ADO.NET)
- Opakování je licencovaná knihovna Pro obecné účely licencovaná v Apache 2.0, která je napsaná v Pythonu, aby se zjednodušilo přidávání chování opakování k ničemu.
- Řešení potíží s připojením a dalších chyb ve službách Azure SQL Database a Azure SQL Managed Instance
- Řešení potíží s chybami transakčního protokolu ve službě Azure SQL Database
- Řešení potíží s chybami transakčního protokolu ve službě Azure SQL Managed Instance