Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Sql Server 2022 (16.x) és újabb verziók
Azure SQL Database
Felügyelt Azure SQL-példány
Az adatbázis-főkönyv a főkönyv szolgáltatás része. Az adatbázis-főkönyv növekményesen rögzíti az adatbázis állapotát, ahogy az adatbázis idővel fejlődik, míg a frissítések a főkönyvtáblákon történnek. Logikailag blokkláncot és Merkle-fa adatstruktúrát használ.
A főkönyvtáblát frissítő műveleteknek további feladatokat kell végrehajtaniuk az előzményadatok karbantartásához és az adatbázis-főkönyvben rögzített kivonatok kiszámításához. Konkrétan minden frissített sor esetében a következőt kell elvégezni:
- A sor korábbi verziójának megőrzése az előzménytáblában.
- Rendelje hozzá a tranzakcióazonosítót, és hozzon létre egy új sorszámot, és őrizze meg őket a megfelelő rendszeroszlopokban.
- Szerializálja a sortartalmat, és foglalja bele a tranzakció által frissített összes sor kivonatának kiszámításakor.
A Ledger ezt úgy éri el, hogy kiterjeszti az összes beszúrási, frissítési és törlési művelet adatmanipulációs nyelvi (DML) lekérdezési tervét a főkönyvtáblákra. A tranzakcióazonosító és az újonnan létrehozott sorszám a sor új verziójához van beállítva. Ezután a lekérdezésterv-operátor végrehajt egy speciális kifejezést, amely szerializálja a sor tartalmát, és kiszámítja a kivonatát, hozzáfűzi azt egy Merkle-fához, amely a tranzakció szintjén van tárolva, és tartalmazza a tranzakció által frissített összes sorverzió kivonatát a tranzakcióhoz ehhez a főkönyvtáblához. A fa gyökere a tranzakció által végrehajtott összes frissítést és törlést jelöli ebben a főkönyvtáblában. Ha a tranzakció több táblát frissít, minden táblához külön Merkle-fa marad fenn. Az alábbi ábrán egy merklefa látható, amely egy főkönyvtábla frissített sorverzióit és a sorok szerializálásához használt formátumot tárolja. Az egyes oszlopok szerializált értékén kívül metaadatokat is tartalmazunk a sor oszlopainak számáról, az egyes oszlopok sorszámáról, az adattípusokról, a hosszúságokról és az értékek értelmezését befolyásoló egyéb információkról.
Az adatbázis állapotának rögzítéséhez az adatbázis-főkönyv minden tranzakcióhoz tárol egy bejegyzést. A tranzakció metaadatait rögzíti, például a véglegesítés időbélyegét és az azt végrehajtó felhasználó identitását. Emellett rögzíti az egyes főkönyvtáblákban frissített sorok Merkle fa gyökércsomópontját is (lásd fent). Ezeket a bejegyzéseket ezután hozzáfűzi egy illetéktelen beavatkozást jelző adatstruktúrához, amely lehetővé teszi az integritás jövőbeni ellenőrzését. A blokk bezárul:
- Körülbelül 30 másodpercenként, amikor az adatbázis automatikus adatbázis-kivonatolási tárolásra van konfigurálva
- Amikor a felhasználó manuálisan hoz létre adatbázis-kivonatot a sys.sp_generate_database_ledger_digest tárolt eljárás futtatásával
- Ha 100 000 tranzakciót tartalmaz.
Egy blokk bezárásakor a rendszer új tranzakciókat szúr be egy új blokkba. A blokkgenerálási folyamat ezután:
- Lekéri a lezárt blokkhoz tartozó összes tranzakciót a memóriabeli üzenetsorból és a sys.database_ledger_transactions rendszerkatalógus nézetből.
- Kiszámítja a Merkle-fa gyökerét ezeken a tranzakciókon és az előző blokk kivonatán.
- Megőrzi a lezárt blokkot a sys.database_ledger_blocks rendszerkatalógus nézetben.
Mivel ez egy rendszeres táblafrissítés, a rendszer automatikusan garantálja annak tartósságát. A blokklánc fenntartása érdekében ez a művelet egy szálon fut. Ugyanakkor hatékony is, mivel csak a tranzakciós adatok kivonatait számítja ki, és aszinkron módon történik. Ez nem befolyásolja a tranzakció teljesítményét.
A főkönyv adatintegritással kapcsolatos további információiért tekintse meg a cikkeket, a Kivonatkezelést és az Adatbázis-ellenőrzést.
Hol tárolják az adatbázis-tranzakciókat és a blokkadatokat?
A tranzakciók és blokkok adatait fizikailag sorokként tárolja a rendszer két rendszerkatalógus-nézetben:
- sys.database_ledger_transactions: Egy sort tart fenn az adatbázis-főkönyvben lévő egyes tranzakciók adataival. Az információk tartalmazzák annak a blokknak az azonosítóját, amelyhez ez a tranzakció tartozik, valamint a blokkon belüli tranzakció sorszámát.
- sys.database_ledger_blocks: Fenntart egy sort a főkönyv minden blokkjához, beleértve a Merkle fa gyökerét a blokkon belüli tranzakciók felett, és az előző blokk kivonatát, hogy blokkláncot képezze.
Az adatbázis-főkönyv megtekintéséhez futtassa az alábbi T-SQL-utasításokat az SQL Server Management Studióban vagy az SQL Server Developer Toolsban.
SELECT * FROM sys.database_ledger_transactions;
GO
SELECT * FROM sys.database_ledger_blocks;
GO
A következő példa egy főkönyvtáblára négy tranzakcióból áll, amelyek egy blokkot alkotnak az adatbázis-főkönyv blokkláncában:
Permissions
Az adatbázis-főkönyv megtekintéséhez engedély VIEW LEDGER CONTENT szükséges. A főkönyvtáblákkal kapcsolatos engedélyekkel kapcsolatos részletekért lásd: Engedélyek.