Troubleshoot transient connection errors in SQL Database and SQL Managed Instance

A következőre vonatkozik: Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Ez a cikk bemutatja, hogyan háríthatja el, háríthatja el, diagnosztizálhatja és háríthatja el az ügyfélalkalmazás által az Azure SQL Database, az Azure SQL Managed Instance és az Azure Synapse Analytics használatakor előforduló csatlakozási hibákat és átmeneti hibákat. Megtudhatja, hogyan konfigurálhatja az újrapróbálkozási logikát, hogyan hozhatja létre a kapcsolati sztring, és hogyan módosíthatja az egyéb kapcsolati beállításokat.

Átmeneti hibák (átmeneti hibák)

Az átmeneti hibáknak, más néven átmeneti hibáknak van egy mögöttes oka, amely hamarosan megoldódik. An occasional cause of transient errors is when the Azure system quickly shifts hardware resources to better load-balance various workloads. Most of these reconfiguration events finish in less than 60 seconds. Az újrakonfigurálás időtartama alatt problémákat tapasztalhat az adatbázisához való csatlakozásakor az SQL Database-ben. Az adatbázishoz csatlakozó alkalmazásokat ezekre az átmeneti hibákra felkészülten kell buildelni. To handle them, implement retry logic in their code instead of surfacing them to users as application errors.

Ha az ügyfélprogram ADO.NET használ, a program az SqlException dobásával értesül az átmeneti hibáról.

Csatlakozás ion vs. command

Próbálkozzon újra az SQL Database és az SQL Managed Instance kapcsolattal, vagy hozza létre újra az alábbitól függően:

  • Átmeneti hiba történik egy kapcsolati kísérlet során

Néhány másodperces késés után próbálkozzon újra a kapcsolattal.

  • Átmeneti hiba történik egy SQL Database és egy felügyelt SQL-példány lekérdezési parancsa során

Ne próbálkozzon azonnal újra a paranccsal. Ehelyett egy késés után hozza létre újra a kapcsolatot. Ezután próbálkozzon újra a paranccsal.

Újrapróbálkozási logika átmeneti hibák esetén

Client programs that occasionally encounter a transient error are more robust when they contain retry logic. Amikor a program harmadik féltől származó köztes szoftveren keresztül kommunikál az SQL Database-ben lévő adatbázissal, kérdezze meg a szállítót, hogy a köztes szoftver tartalmaz-e újrapróbálkozási logikát átmeneti hibák esetén.

Újrapróbálkozás alapelvei

  • Ha a hiba átmeneti, próbálkozzon újra egy kapcsolat megnyitásához.
  • Ne próbálkozzon újra közvetlenül olyan SQL Database- vagy felügyelt SQL-példány-utasítással SELECT , amely átmeneti hibával meghiúsult. Ehelyett hozzon létre egy új kapcsolatot, majd próbálkozzon újra a SELECT.
  • Ha egy SQL Database vagy egy felügyelt SQL-példány UPDATE utasítása átmeneti hibával meghiúsul, hozzon létre egy új kapcsolatot, mielőtt újra megkísérlené az UPDATE-et. Az újrapróbálkozás logikájának biztosítania kell, hogy a teljes adatbázis-tranzakció befejeződött, vagy a teljes tranzakció vissza legyen állítva.

Az újrapróbálkozások egyéb szempontjai

  • Egy olyan kötegelt program, amely munkaidő után automatikusan elindul, és reggel előtt fejeződik be, megengedheti magának, hogy nagyon türelmes legyen az újrapróbálkozási kísérletek között.
  • A felhasználói felület programnak figyelembe kell vennie az emberi tendenciát, hogy túl hosszú várakozás után feladja. A megoldásnak nem szabad néhány másodpercenként újrapróbálkoznia, mert ez a szabályzat kérésekkel eláraszthatja a rendszert.

Az újrapróbálkozási időköz növelése

Javasoljuk, hogy várjon 5 másodpercet az első újrapróbálkozás előtt. Ha 5 másodpercnél rövidebb késleltetés után újra próbálkozik, az túlterheli a felhőszolgáltatást. Minden további újrapróbálkozáshoz a késleltetésnek exponenciálisan, legfeljebb 60 másodpercig kell növekednie.

A ADO.NET használó ügyfelek blokkolási időszakáról a Csatlakozás készletezés (ADO.NET) című témakörben olvashat.

A program önkiállítása előtt is beállíthatja az újrapróbálkozások maximális számát.

Kódminták újrapróbálkozással

Az újrapróbálkozással kapcsolatos példák a következő helyen érhetők el:

Az újrapróbálkozás logikája tesztelése

Az újrapróbálkozási logika teszteléséhez szimulálnia kell vagy hibát kell okoznia, amely javítható a program futtatása közben.

Tesztelés a hálózatról való leválasztással

Az újrapróbálkozási logika tesztelésének egyik módja, ha leválasztja az ügyfélszámítógépet a hálózatról, miközben a program fut. A hiba a következő:

  • SqlException.Number = 11001
  • Üzenet: "Ilyen gazdagép nem ismert"

Az első újrapróbálkozási kísérlet részeként újra csatlakoztathatja az ügyfélszámítógépet a hálózathoz, majd megpróbálhat csatlakozni.

A teszt gyakorlatiassá tétele érdekében húzza ki a számítógépet a hálózatról, mielőtt elindítja a programot. Ezután a program felismer egy futtatókörnyezeti paramétert, amely miatt a program a következőt eredményezi:

  • Ideiglenesen adja hozzá az 11001-et az átmenetiként figyelembe veendő hibák listájához.
  • Próbálja meg az első kapcsolatot a szokásos módon.
  • A hiba észlelése után távolítsa el az 11001-et a listából.
  • Megjelenít egy üzenetet, amely tájékoztatja a felhasználót, hogy csatlakoztassa a számítógépet a hálózathoz.
  • Szüneteltetheti a további végrehajtást a Console.ReadLine metódus vagy az OK gombot tartalmazó párbeszédpanel használatával. A felhasználó lenyomja az Enter billentyűt, miután a számítógép csatlakoztatva van a hálózathoz.
  • Próbálkozzon újra a csatlakozáshoz, és várjon sikert.

Tesztelés a felhasználónév elírásával a csatlakozáskor

A program szándékosan elgépelheti a felhasználónevet az első kapcsolati kísérlet előtt. A hiba a következő:

  • SqlException.Number = 18456
  • Üzenet: "A bejelentkezés nem sikerült az "WRONG_MyUserName" felhasználónál."

Az első újrapróbálkozási kísérlet részeként a program kijavíthatja a helyesírást, majd megpróbálhat csatlakozni.

A teszt gyakorlatiassá tétele érdekében a program felismer egy futtatókörnyezeti paramétert, amely miatt a program a következőt eredményezi:

  • Ideiglenesen adja hozzá az 18456-ot az átmenetinek tekintett hibák listájához.
  • Szándékosan adja hozzá az "WRONG_" nevet a felhasználónévhez.
  • A hiba észlelése után távolítsa el az 18456-ot a listából.
  • Távolítsa el a "WRONG_" nevet a felhasználónévből.
  • Próbálkozzon újra a csatlakozáshoz, és várjon sikert.

.NET Sql Csatlakozás ion paraméterek a kapcsolat újrapróbálkozáshoz

Ha az ügyfélprogram a System.Data.SqlClient.Sql Csatlakozás ion .NET-keretrendszer osztály használatával csatlakozik az adatbázishoz az Azure SQL Database-ben, használja a .NET 4.6.1-es vagy újabb verzióját (vagy .NET Core-t), hogy használni tudja a kapcsolat újrapróbálkozási funkcióját. A funkcióval kapcsolatos további információkért lásd: Sql Csatlakozás ion.CsatlakozásionString tulajdonság.

Az SQL Csatlakozás ion objektum kapcsolati sztring létrehozásakor koordinálja az értékeket a következő paraméterek között:

  • Csatlakozás RetryCount: Az alapértelmezett érték 1. A tartomány 0 és 255 között van.
  • Csatlakozás RetryInterval: Az alapértelmezett érték 10 másodperc. A tartomány 1 és 60 között van.
  • Csatlakozás ion időtúllépés: Az alapértelmezett érték 15 másodperc. A tartomány 0 és 2147483647 között van.
  • Parancs időtúllépése: Az alapértelmezett érték 30 másodperc. A tartomány 0 és 2147483647 között van.

A kapcsolat újrapróbálkozási beállításai (Csatlakozás RetryCount és Csatlakozás RetryInterval) a kapcsolat rugalmasságára vonatkoznak. Csatlakozás rugalmassága a következő különböző típusokat tartalmazza:

  • A nyílt kapcsolat rugalmassága a kezdeti SQL Csatlakozás ionra utal. Open vagy OpenAsync() metódus. Az első kapcsolati kísérlet nullának számít. Csatlakozás RetryCount a későbbi újrapróbálkozésekre vonatkozik. Ezért ha a kapcsolat nullája meghiúsul (ez nem feltétlenül következik be azonnal), a rendszer először a Csatlakozás RetryInterval függvényt alkalmazza, majd az azt követő Csatlakozás RetryCount (és Csatlakozás RetryInterval) kísérleteket. Az újrapróbálkozási kísérletek előnyeinek kihasználásához a Csatlakozás ion timeout tulajdonságnak időt kell adnia az összes kísérlethez.

  • Az inaktív kapcsolat rugalmassága a megszakadt inaktív kapcsolatok automatikus észlelését és újracsatlakozását jelenti. A megszakadt tétlen kapcsolatok újracsatlakoztatásának első kísérlete az első újrapróbálkozási kísérletnek számít. Az újrapróbálkozási kísérletek előnyeinek kihasználásához a parancs időtúllépésének időtúllépést kell biztosítania az összes kísérlethez.

Példa: Tegyük fel, hogy a Csatlakozás RetryCount és Csatlakozás RetryInterval paraméterek a következő értékek:

Csatlakozás RetryCount: 3 Csatlakozás RetryInterval: 10 másodperc

Tekintse meg, hogyan használják ezeket az értékeket a következő helyzetekben:

Forgatókönyv: Új kapcsolat

4:10:00 - Csatlakozás ion. Open() – nulla kísérlet

4:10:01 – Csatlakozás ion hiba észlelhető

4:10:11 – 1.> újrapróbálkozás – Az első újrapróbálkozás a Csatlakozás RetryInterval után következik be

4:10:21 – Újrapróbálkozás 2

4:10:31 – Újrapróbálkozás 3

Ebben a forgatókönyvben a kiválasztott értékeknek meg kell felelniük a következő feltételnek:
Connection Timeout > = ConnectRetryCount * ConnectionRetryInterval

Ha például a szám 3, és az intervallum 10 másodperc, akkor a mindössze 29 másodperces időtúllépés nem biztosít elegendő időt a rendszer harmadik és utolsó újrapróbálkozásához a csatlakozáshoz:

29 < 3 * 10

Forgatókönyv: Tétlen kapcsolat

Csatlakozás RetryCount: 3 Csatlakozás RetryInterval: 10 másodperc

4:10:00 – Megszakadt a kapcsolat a parancs végrehajtásakor

4:10:00 – 1.> újrapróbálkozás – Az első újrapróbálkozás azonnal megtörténik

4:10:10 – Újrapróbálkozás 2

4:10:20 – Újrapróbálkozás 3

Nem ez a kezdeti kapcsolat. Ezért a Csatlakozás időtúllépés nem érvényes. Mivel azonban a kapcsolat helyreállítása a parancs végrehajtása során történik, a parancs időtúllépési beállítása érvényes. A parancs időtúllépése alapértelmezés szerint 30 másodperc. Bár a kapcsolat helyreállítása jellemző körülmények között gyors, időszakos kimaradás esetén előfordulhat, hogy a helyreállítás a parancsvégrehajtási idő egy részét is igénybe veszi.

Ebben a forgatókönyvben, ha teljes mértékben ki szeretné használni az üresjárati kapcsolat helyreállításának újrapróbálkozását, a kiválasztott értékeknek a következő feltételnek kell megfelelniük:
Command Timeout > (ConnectRetryCount - 1) * ConnectionRetryInterval

Ha például a szám 3, és az intervallum 10 másodperc, akkor a 20 másodpercnél rövidebb parancsidőkorlát nem ad elegendő időt a harmadik és utolsó újrapróbálkozáshoz a csatlakozáshoz: (3 – 1) * 10 = 20'

Vegye figyelembe azt is, hogy magának a parancsnak időre van szüksége a kapcsolat helyreállítása után.

Megjegyzés:

Az ezekben a forgatókönyvekben megadott időtartamértékek csak bemutatóra szolgálnak. Mindkét forgatókönyv tényleges észlelési ideje a mögöttes infrastruktúrától függ.

Csatlakozás ion vs. command

A Csatlakozás RetryCount és Csatlakozás RetryInterval paraméterek lehetővé teszik, hogy az Sql Csatlakozás ion-objektum újrapróbálkozza a kapcsolódási műveletet a program elmondása vagy zavarása nélkül, például vissza kell adnia a vezérlőt a programnak. Az újrapróbálkozás a következő esetekben fordulhat elő:

  • Sql Csatlakozás ion. Metódushívás megnyitása
  • Sql Csatlakozás ion. Metódushívás végrehajtása

Van egy finomság. Ha átmeneti hiba történik a lekérdezés végrehajtása közben, az SQL Csatlakozás ion-objektum nem próbálkozik újra a kapcsolódási művelettel. Természetesen nem próbálkozik újra a lekérdezésrel. Az Sql Csatlakozás ion azonban nagyon gyorsan ellenőrzi a kapcsolatot, mielőtt elküldené a lekérdezést végrehajtásra. Ha a gyors ellenőrzés csatlakozási problémát észlel, az SQL Csatlakozás ion újrapróbálkozza a csatlakozási műveletet. Ha az újrapróbálkozás sikeres, a rendszer végrehajtásra küldi a lekérdezést.

A Csatlakozás RetryCount alkalmazás-újrapróbálkozás logikájával kombinálva

Tegyük fel, hogy az alkalmazás robusztus egyéni újrapróbálkoztatási logikával rendelkezik. Előfordulhat, hogy négyszer próbálkozik újra a csatlakozási művelettel. Ha Csatlakozás RetryInterval és Csatlakozás RetryCount =3 értéket ad hozzá a kapcsolati sztring, az újrapróbálkozási számot 4 * 3 = 12 újrapróbálkozási értékre növeli. Lehet, hogy nem tervez ilyen sok újrapróbálkozását.

Csatlakozás az adatbázisba az SQL Database-ben

Csatlakozás ion: Csatlakozás ion sztring

Az adatbázishoz való csatlakozáshoz szükséges kapcsolati sztring kissé eltér az SQL Serverhez való csatlakozáshoz használt sztringtől. Az adatbázis kapcsolati sztring az Azure Portalról másolhatja.

A kapcsolati sztring beszerzése az Azure Portalról

Az Azure Portal használatával szerezze be az ügyfélprogramhoz szükséges kapcsolati sztring az Azure SQL Database használatához.

  1. Válassza az Összes szolgáltatás>SQL-adatbázisát.

  2. Adja meg az adatbázis nevét az SQL-adatbázisok panel bal felső részén található szűrőszövegmezőbe.

  3. Válassza ki az adatbázis sorát.

  4. Miután megjelenik az adatbázis panelje, a vizuális kényelem érdekében válassza a Kis méret gombokat a böngészéshez és az adatbázisszűréshez használt panelek összecsukásához.

  5. Az adatbázis panelén válassza az Adatbázis-kapcsolati sztring megjelenítése lehetőséget.

  6. Másolja ki a megfelelő kapcsolati sztring. Ha a ADO.NET kapcsolatkódtárat szeretné használni, másolja ki a megfelelő sztringet a ADO.NET lapról.

    Copy the ADO connection string for your database

  7. Szükség szerint szerkessze a kapcsolati sztring. Például szúrja be a jelszót a kapcsolati sztring, vagy távolítsa el a "@<servername>" nevet a felhasználónévből, ha a felhasználónév vagy a kiszolgáló neve túl hosszú.

  8. Egy vagy több formátumban illessze be a kapcsolati sztring adatokat az ügyfélprogram kódjába.

További információ: Csatlakozás ion sztringek és konfigurációs fájlok.

Csatlakozás ion: IP-cím

Konfigurálnia kell az SQL Database-t, hogy fogadja el az ügyfélprogramot futtató számítógép IP-címéről érkező kommunikációt. A konfiguráció beállításához szerkessze a tűzfalbeállításokat az Azure Portalon.

Ha elfelejti konfigurálni az IP-címet, a program egy hasznos hibaüzenettel meghiúsul, amely a szükséges IP-címet adja meg.

  1. Jelentkezzen be az Azure Portalra.

  2. A bal oldali listában válassza a Minden szolgáltatás lehetőséget.

  3. Görgessen és válassza ki az SQL-kiszolgálókat.

    Find your Azure SQL Database server in the portal

  4. Kezdje el beírni a kiszolgáló nevét a szűrőszövegmezőbe. Megjelenik a sor.

  5. Válassza ki a kiszolgáló sorát. Megjelenik a kiszolgáló panelje.

  6. A kiszolgálópanelen válassza a Gépház.

  7. Válassza a Tűzfal lehetőséget.

    Select Settings > Firewall

  8. Válassza az Ügyfél IP-címének hozzáadása lehetőséget. Írja be az új szabály nevét az első szövegmezőbe.

  9. Írja be az engedélyezni kívánt tartomány alacsony és magas IP-címértékét.

    • Hasznos lehet, ha az alacsony érték vége .0 , a magas érték pedig .255.
  10. Válassza a Mentés parancsot.

További információ: Tűzfalbeállítások konfigurálása az SQL Database-ben.

Csatlakozás ion: Portok

Általában gondoskodnia kell arról, hogy csak az 1433-as port legyen nyitva a kimenő kommunikációhoz az ügyfélprogramot üzemeltető számítógépen.

Ha például az ügyfélprogramot windowsos számítógépen üzemelteti, a gazdagépen a Windows tűzfallal nyithatja meg az 1433-at.

  1. Nyissa meg a Vezérlőpultot.
  2. Válassza az Összes Vezérlőpult elemet>A Windows tűzfal>speciális Gépház> Kimenő szabályok>műveletek>új szabálya lehetőséget.

Ha az ügyfélprogram egy Azure-beli virtuális gépen (VM) fut, olvassa el az 1433-at meghaladó portokat a ADO.NET 4.5-ös és SQL Database-hez.

Az adatbázis portjainak és IP-címeinek konfigurálásáról további információt az Azure SQL Database tűzfalában talál.

Csatlakozás ion: ADO.NET 4.6.2 vagy újabb

Ha a program olyan ADO.NET osztályokat használ, mint a System.Data.SqlClient.Sql Csatlakozás ion az SQL Database-hez való csatlakozáshoz, javasoljuk, hogy .NET-keretrendszer 4.6.2-es vagy újabb verzióját használja.

A ADO.NET 4.6.2-vel kezdve

  • A kapcsolat megnyitásának kísérlete azonnal újrapróbálkozott az Azure SQL-hez, ezáltal javítva a felhőalapú alkalmazások teljesítményét.

A ADO.NET 4.6.1-től kezdve

  • Az SQL Database esetében a megbízhatóság akkor javul, ha az Sql Csatlakozás ion használatával nyit meg kapcsolatot. Open metódus. Az Open metódus mostantól a legjobb erőkifejtésű újrapróbálkozási mechanizmusokat is magában foglalja, amelyek a kapcsolat időtúllépési időszakán belüli bizonyos hibák átmeneti hibáira reagálnak.
  • Csatlakozás készletezés támogatott, amely magában foglalja annak hatékony ellenőrzését, hogy a program által biztosított kapcsolatobjektum működik-e.

Ha kapcsolati objektumot használ egy kapcsolatkészletből, javasoljuk, hogy a program ideiglenesen zárja be a kapcsolatot, ha nincs azonnal használatban. Nem költséges újra megnyitni egy kapcsolatot, de új kapcsolatot kell létrehoznia.

Ha a ADO.NET 4.0-s vagy korábbi verziót használja, javasoljuk, hogy frissítsen a legújabb ADO.NET. 2018 augusztusától letöltheti ADO.NET 4.6.2-t.

Diagnosztika

Diagnosztika: Annak tesztelése, hogy a segédprogramok képesek-e csatlakozni

Ha a program nem tud csatlakozni az adatbázishoz az SQL Database-ben, az egyik diagnosztikai lehetőség a segédprogrammal való kapcsolódás. Ideális esetben a segédprogram ugyanazzal a kódtárzal csatlakozik, amelyet a program használ.

Bármely Windows rendszerű számítógépen kipróbálhatja az alábbi segédprogramokat:

  • SQL Server Management Studio (ssms.exe), amely ADO.NET használatával csatlakozik
  • sqlcmd.exe, amely ODBC használatával csatlakozik

A program csatlakoztatása után tesztelje, hogy működik-e egy rövid SQL Standard kiadás LECT-lekérdezés.

Diagnosztika: A megnyitott portok ellenőrzése

Ha azt gyanítja, hogy a csatlakozási kísérletek portproblémák miatt meghiúsulnak, futtathat egy segédprogramot a számítógépen, amely a portkonfigurációkról számol be.

Linuxon a következő segédprogramok lehetnek hasznosak:

  • netstat -nap
  • nmap -sS -O 127.0.0.1: Módosítsa a példaértéket ip-címként.

Windows rendszeren a PortQry.exe segédprogram hasznos lehet. Íme egy példa a végrehajtásra, amely lekérdezte egy SQL Database-adatbázis porthelyzetét, és amelyet egy laptopon futtattak:

[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\]
>>

Diagnosztika: Hibák naplózása

Az időszakos problémákat néha a legjobban egy általános minta észlelésével diagnosztizálják napok vagy hetek alatt.

Az ügyfél a felmerülő hibák naplózásával segíthet a diagnózisban. Előfordulhat, hogy a naplóbejegyzéseket összevetheti az SQL Database által belsőleg naplózandó hibaadatokkal.

Az Enterprise Library 6 (EntLib60) .NET által felügyelt osztályokat kínál a naplózáshoz. További információ: 5 – Olyan egyszerű, mintha leesik egy naplóról: Használja a naplózási alkalmazásblokkot.

Diagnosztika: A rendszernaplók hibáinak vizsgálata

Íme néhány Transact-SQL Standard kiadás LECT utasítás, amely hibanaplókat és egyéb információkat kérdez le.

Napló lekérdezése Leírás
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;
A sys.event_log nézet információkat tartalmaz az egyes eseményekről, amelyek átmeneti hibákat vagy csatlakozási hibákat okozhatnak.

Ideális esetben korrelálhatja a start_time vagy end_time értékeket az ügyfélprogram problémáinak észlelésekor tapasztalt adatokkal.

A lekérdezés futtatásához csatlakoznia kell a adatbázishoz.
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;
A sys.database_connection_stats nézet az eseménytípusok összesített számát kínálja további diagnosztikákhoz.

A lekérdezés futtatásához csatlakoznia kell a adatbázishoz.

Diagnosztika: Problémaesemények keresése az SQL Database naplójában

A problémaesemények bejegyzéseit az SQL Database naplójában keresheti meg. Próbálja ki a következő Transact-SQL Standard kiadás LECT utasítást a főadatbázisban:

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éhány visszaadott sor a sys.fn_xe_telemetry_blob_target_read_file

Az alábbi példa bemutatja, hogyan nézhet ki egy visszaadott sor. A megjelenített null értékek gyakran nem null értékűek más sorokban.

object_name                   timestamp                    error  state  is_success  database_name

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

Vállalati kódtár 6

Az Enterprise Library 6 (EntLib60) a .NET-osztályok keretrendszere, amely segít a felhőalapú szolgáltatások robusztus ügyfeleinek implementálásában, amelyek egyike az SQL Database. Az EntLib60 minden olyan területhez kapcsolódó témakörök megkereséséhez, amelyekben az EntLib60 segíthet, tekintse meg az Enterprise Library 6 – Április 2013 című témakört.

Az átmeneti hibák kezelésére szolgáló újrapróbálkozási logika egy olyan terület, ahol az EntLib60 segíthet. További információ: 4 – Kitartás, minden diadal titka: Használja az átmeneti hibakezelési alkalmazásblokkot.

Megjegyzés:

Az EntLib60 forráskódja nyilvánosan letölthető a letöltőközpontból. A Microsoft nem tervezi az EntLib további funkciófrissítéseit vagy karbantartási frissítéseit.

EntLib60-osztályok átmeneti hibákhoz és újrapróbálkozáshoz

Az alábbi EntLib60-osztályok különösen hasznosak az újrapróbálkozáshoz. Ezek az osztályok a Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling névtérben vagy alatt találhatók.

A Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling névtérben:

  • RetryPolicy osztály
    • ExecuteAction metódus
  • ExponenciálisBackoff osztály
  • SqlDatabaseTransientErrorDetectionStrategy osztály
  • ReliableSql Csatlakozás ion osztály
    • ExecuteCommand metódus

A Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.TestSupport névtérben:

  • AlwaysTransientErrorDetectionStrategy osztály
  • NeverTransientErrorDetectionStrategy osztály

Íme néhány hivatkozás az EntLib60-ra vonatkozó információkra:

EntLib60: A naplózási blokk

  • A naplózási blokk egy rendkívül rugalmas és konfigurálható megoldás, amellyel:
    • Naplóüzenetek létrehozása és tárolása számos helyen.
    • Üzenetek kategorizálása és szűrése.
    • Gyűjtse össze a hibakereséshez és nyomkövetéshez, valamint a naplózáshoz és az általános naplózási követelményekhez hasznos környezeti információkat.
  • A naplózási blokk elvonja a naplózási funkciót a napló céljától, hogy az alkalmazáskód konzisztens legyen, függetlenül a célnapló-tároló helyétől és típusától.

További információ: 5 – Olyan egyszerű, mintha leesik egy naplóról: Használja a naplózási alkalmazásblokkot.

EntLib60 IsTransient metódus forráskódja

Ezután az SqlDatabaseTransientErrorDetectionStrategy osztályban található az IsTransient metódus C# forráskódja. A forráskód 2013 áprilisától egyértelművé teszi, hogy mely hibák tekinthetők átmenetinek és újrapróbálkozásra érdemesnek.

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;
}

Következő lépések