Automatikus oldaljavítás (elérhetőségi csoportok: adatbázis tükrözés)

A következőkre vonatkozik:SQL Server

Az automatikus oldaljavítást az adatbázis tükrözése és a Always On elérhetőségi csoportok támogatják. Miután bizonyos típusú hibák megrontják az oldalt, így olvashatatlanná válik, egy adatbázis-tükröző partner (fő vagy tükör) vagy egy elérhetőségi replika (elsődleges vagy másodlagos) megpróbálja automatikusan helyreállítani az oldalt. Az a partner/replika, amely nem tudja elolvasni az oldalt, új másolatot kér a partnerétől vagy egy másik másolattól. Ha ez a kérés sikerrel jár, az olvashatatlan oldalt az olvasható másolat helyettesíti, és ez általában megoldja a hibát.

Általánosságban elmondható, hogy az adatbázis-tükrözés és a Always On elérhetőségi csoportok hasonló módon kezelik az I/O hibákat. A néhány különbség itt kifejezetten kiemelhető.

Megjegyzés:

Az automatikus oldaljavítás eltér a DBCC javítástól. Az összes adatot automatikus oldaljavítás tartja meg. Ezzel szemben a hibák javítása a DBCC REPAIR_ALLOW_DATA_LOSS beállítással szükségessé teheti egyes oldalak, és ezáltal adatok törlését.

Hibatípusok, amelyek automatikus Page-Repair próbálkozást okoznak

Az adatbázis-tükrözés automatikus oldaljavítása csak az adatfájlban lévő olyan oldalak javítását kísérli meg, amelyeknél egy művelet az alábbi táblázatban felsorolt hibák valamelyike miatt meghiúsult.

Hiba száma Leírás Olyan esetek, amelyek automatikus oldaljavítási kísérletet okoznak
823 A cselekvés csak akkor történik, ha az operációs rendszer ciklikus redundancia-ellenőrzést (CRC) hajtott végre, amely az adatokon meghibásodott. ERROR_CRC. Ennek a hibának az operációs rendszer értéke 23.
824 Logikai hibák. Logikai adathibák, például szakadt írás vagy rossz oldalellenőrző összegzés.
829 Egy oldalt helyreállítás várakozó állapotként jelöltek. Összes.

A legutóbbi 823-as CRC-hibák és 824-es hibák megtekintéséhez tekintse meg az suspect_pages táblát az msdb adatbázisban.

Oldaltípusok, amelyeket nem lehet automatikusan javítani

Az automatikus oldaljavítás nem tudja javítani a következő vezérlőoldalak típusait:

  • Fájlfejléc oldal (oldalazonosító 0).

  • 9. oldal (az adatbázis boot oldala).

  • Kiosztási lapok: Globális kiosztási térkép (GAM) lapok, megosztott globális foglalási térkép (SGAM) oldalak és lapterület-szabad terület (PFS) oldalak.

Az I/O hibák kezelése a fő/elsődleges adatbázison

A fő/elsődleges adatbázisban az automatikus oldaljavítást csak akkor próbálják ki, ha az adatbázis SZINKRONIZÁLT állapotban van, és a főügy/elsődleges adatbázis továbbra is naplóadatokat küld az adatbázishoz a tükörnek/másodlagosnak. Az automatikus oldaljavítási kísérlet alapvető műveletsorrendje a következő:

  1. Amikor olvasási hiba jelentkezik egy adatlapon a fő/elsődleges adatbázisban, a főügyvéd/főügyes egy sort helyez be a suspect_pages táblába a megfelelő hibastátuszsal. Az adatbázis tükrözéséhez az igazgató ezután kéri az oldal másolatát a tükörből. Az Always On rendelkezésre állási csoportok esetén az elsődleges replika továbbítja a kérést az összes másodlagos replikának, és az elsőként válaszoló replikától kapja meg az oldalt. A kérés megadja az oldalazonosítót és az LSN-t, amely jelenleg a kitisztított napló végén van. Az oldal helyreállításra vár jelölést kapott. Ez elérhetetlenné teszi az automatikus oldaljavítási kísérlet során. A javítási kísérlet során az oldal elérésére tett kísérletek 829-es hibával (visszaállítás függőben) sikertelenek lesznek.

  2. Az oldalkérés megérkezése után a tükör/másodlagos megvárja, amíg újra elvégezi a naplót a kérésben megadott LSN-ig. Ezután a tükör/másodlagos megpróbálja elérni az adatbázis másolatának oldalát. Ha a lap elérhető, a tükör/másodlagos elküldi a lap másolatát az elsődlegesnek. Ellenkező esetben a tükör-/másodlagos példány hibát ad vissza az elsődlegesnek, és az automatikus oldaljavítási kísérlet meghiúsul.

  3. Az elsődleges folyamat feldolgozza azt a választ, amely az oldal friss másolatát tartalmazza.

  4. Miután az automatikus oldaljavítási kísérlet kijavít egy gyanús oldalt, az oldal a suspect_pages táblában helyreállítottként (event_type = 5) van megjelölve.

  5. Ha a lap I/O-hibája függőben lévő tranzakciókat eredményezett, a lap kijavítása után az elsődleges megpróbálja rendezni ezeket a tranzakciókat.

Az I/O hibák kezelése a tükör/másodlagos adatbázison

A tükör-/másodlagos adatbázisban az adatlapokon előforduló I/O-hibákat az adatbázis-tükrözés és az Always On rendelkezésre állási csoportok általában közel azonos módon kezelik.

  1. Adatbázis tükrözéssel, ha a tükör egy vagy több oldali I/O hibát tapasztal, amikor újra elkészíti a naplóbejegyzést, a tükrözési munkamenet FELFÜGGESZTETT állapotba kerül. Always On elérhetőségi csoportoknál, ha egy másodlagos replika egy vagy több oldali I/O hibát tapasztal egy naplóbejegyzés újraindításakor, a másodlagos adatbázis FELFÜGGESZTETT állapotba kerül. Ezen a ponton a tükör-/másodlagos kiszolgáló beszúr egy sort a suspect_pages táblába a megfelelő hibaállapottal. A tükör/másodlagos ezután kéri az oldal másolatát az elsődleges/fő példánytól.

  2. Az alapító/elsődleges megpróbál hozzáférni az adatbázis másolatán lévő oldalhoz. Ha az oldal elérhető, az elsődleges elküldi az oldal másolatát a tükörnek/másodlagosnak.

  3. Ha a tükör/másodlagos minden kért oldal másolatát megkapja, a tükör/másodlagos megpróbálja folytatni a tükrözési munkamenetet. Ha egy automatikus oldal-helyreállítási kísérlet helyreállít egy gyanús oldalt, az oldalt a suspect_pages táblában helyreállítottként jelölik meg (event_type = 4).

    Ha egy tükör/másodlagos példány nem kapja meg azt a lapot, amelyet az elsődleges példánytól kért, az automatikus lapjavítási kísérlet meghiúsul. Az adatbázis tükrözésével a tükrözési munka felfüggesztve marad. A Always On elérhetőségi csoportoknál a másodlagos adatbázis továbbra is felfüggesztve marad. Ha a tükrözési munkamenetet vagy a másodlagos adatbázist manuálisan folytatják, a rendszer a szinkronizálási fázis során ismét eléri a sérült lapokat.

Fejlesztői legjobb gyakorlatok

Az automatikus oldaljavítás egy aszinkron folyamat, amely a háttérben fut. Ezért egy olyan adatbázis-művelet, amely olvashatatlan oldalt kér, megbukik, és visszaadja a hibakódot arra a feltételre, amely a hibát okozta. Amikor egy alkalmazást fejlesztenek tükrözött adatbázishoz vagy elérhetőségi adatbázishoz, akkor el kell fogni a sikertelen műveletek kivételeit. Ha az SQL Server hibakódja 823, 824 vagy 829, később érdemes újra próbálkozni.

Útmutató: Az automatikus lapjavítási kísérletek megtekintése

Az alábbi dinamikus menedzsment nézetek a legfrissebb automatikus oldaljavítási kísérletekhez tartozó sorokat adnak vissza egy adott elérhetőségi adatbázison vagy tükrözött adatbázison, maximum 100 sorral adatbázisonként.

  • Always On rendelkezésre állási csoportok:

    sys.dm_hadr_auto_page_repair (Transact-SQL)

    Egy sort ad vissza minden automatikus oldaljavítási kísérlethez egy rendelkezésre állási replikán található rendelkezésre állási adatbázison, amelyet a kiszolgálópéldány bármely rendelkezésre állási csoporthoz üzemeltet.

  • Adatbázis tükrözése:

    sys.dm_db_mirroring_auto_page_repair (Transact-SQL)

    A kiszolgálópéldány bármely tükrözött adatbázisán végrehajtott minden automatikus oldaljavítási kísérletről egy sort ad vissza.