101 - Datenstrukturen in SQLite-Datenbanken - Kapitel 7
45 Questions
5 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Welche Datenstrukturen werden typischerweise in SQLite-Datenbankdateien verwendet?

  • B-Bäume und binäre Suchbäume
  • B-Bäume und Tabellen (correct)
  • Lineare Listen und Hashtabellen
  • B-Bäume und Hashtabellen
  • Wie groß ist die kleinste mögliche Größe einer SQLite-Datenbank?

  • 1 Kilobyte
  • 1024 Bytes
  • 256 Bytes
  • 512 Bytes (correct)
  • Welche der folgenden Page-Typen ist in SQLite-Datenbanken am häufigsten vorhanden?

  • Pointer Map Page
  • Overflow Page
  • B-Tree Page (correct)
  • Freelist Page
  • Welche der folgenden Page-Typen ist kein Bestandteil einer SQLite-Datenbank?

    <p>Data Page</p> Signup and view all the answers

    Welche der folgenden Aussagen beschreibt am besten die Funktion von 'Freelist Pages' in SQLite?

    <p>Sie verwalten den freien Speicherplatz innerhalb der Datenbank.</p> Signup and view all the answers

    Welche zwei Hauptunterarten von B-Tree Pages werden in SQLite verwendet?

    <p>Innen- (Interior) und Blatt- (Leaf) Pages</p> Signup and view all the answers

    Wo werden die aktiven Inhalte der Tabellen in einer SQLite-Datenbank primär gespeichert?

    <p>In Table-B-Tree Pages</p> Signup and view all the answers

    Wozu dient eine 'Lock-Byte Page' in einer SQLite Datenbank?

    <p>Zur Implementierung der Datenbank Sperrfunktion</p> Signup and view all the answers

    Welche Aussage beschreibt die Architektur von SQLite am besten?

    <p>SQLite läuft direkt auf dem Client und benötigt keinen separaten Server.</p> Signup and view all the answers

    Wie werden die Daten einer SQLite-Datenbank typischerweise gespeichert?

    <p>Die Daten werden als eine einzige Datei abgelegt.</p> Signup and view all the answers

    Welche der folgenden Optionen ist kein typischer Anwendungsbereich für SQLite?

    <p>Große, verteilte Server-Datenbanken in Rechenzentren.</p> Signup and view all the answers

    Was ist der Hauptfokus beim Verständnis des Dateiformats von SQLite im forensischen Kontext?

    <p>Das Verständnis des zugrunde liegenden Dateiformats zur forensisch relevanten Datenanalyse und -gewinnung.</p> Signup and view all the answers

    Woraus besteht eine SQLite Datenbank grundsätzlich?

    <p>Eine Sammlung von Tabellen, die durch definierte Formate charakterisiert sind.</p> Signup and view all the answers

    Was ist das Konzept hinter relationalen Datenbanken im Zusammenhang mit SQLite?

    <p>Tabellen können über eindeutige Schlüssel miteinander verknüpft werden.</p> Signup and view all the answers

    Was ist das Ziel der Normalisierung einer Datenbank?

    <p>Die Minimierung von Duplikaten und Steigerung von Effizienz und Integrität.</p> Signup and view all the answers

    Was bedeutet es, wenn eine Datenbank 'normalisiert' ist?

    <p>Die Datenbank ist frei von Redundanzen.</p> Signup and view all the answers

    Welche der folgenden Aussagen beschreibt die Funktion von Interior Pages in einer SQLite-Datenbank am besten?

    <p>Sie speichern keine Daten, sondern enthalten Pointer zu anderen Pages.</p> Signup and view all the answers

    Was ist die Hauptfunktion der Leaf Pages im Kontext einer SQLite-Datenbank?

    <p>Sie enthalten die eigentlichen Datensätze, die in der Datenbank abgelegt wurden.</p> Signup and view all the answers

    Wie viele Root Pages gibt es in einer Standard-SQLite-Tabelle?

    <p>Es existiert exakt eine Root Page am Anfang des Tables.</p> Signup and view all the answers

    Was passiert mit Pages in einer SQLite-Datenbank, wenn Daten verändert werden?

    <p>Pages können hinzugefügt, gelöscht oder modifiziert werden, um Datenänderungen zu reflektieren.</p> Signup and view all the answers

    Welche der folgenden Komponenten ist kein Bestandteil des Aufbaus von Interior- und Leaf Pages in SQLite?

    <p>Datenbank Schema</p> Signup and view all the answers

    Was ist innerhalb einer Zelle (Cell) in einer SQLite-Page enthalten?

    <p>Cell Header und Cell Payload.</p> Signup and view all the answers

    Was kennzeichnet die Struktur größerer Tabellen in Bezug auf Interior- und Leaf Pages?

    <p>Größere Tabellen besitzen eine komplexe Struktur aus Interior- und Leaf Pages.</p> Signup and view all the answers

    Was beschreibt der Begriff 'Free Blocks' im Kontext von SQLite Pages?

    <p>Verfügbare Speicherbereiche innerhalb der Page, die für neue Einträge genutzt werden können.</p> Signup and view all the answers

    Was bedeutet die Zahl 118 in Bezug auf einen SQLite-Datensatz?

    <p>Die Gesamtgröße des Datensatzes in Byte.</p> Signup and view all the answers

    Was bedeutet ein Serial Type Array mit der Länge 0x00 in einem SQLite-Datensatz?

    <p>Das Serial Type Array ist defekt oder nicht vorhanden.</p> Signup and view all the answers

    Was beschreibt 'verwaiste Einträge' im Kontext von SQLite?

    <p>Einträge die am Anfang von nicht-allokierten Bytes beginnen.</p> Signup and view all the answers

    Was repräsentiert die Zahl (49)₁₀ im Kontext des zweiten Beispiels?

    <p>Die Länge des String-Payloads in Byte.</p> Signup and view all the answers

    Welche Bedeutung hat 'ROWID' in einem SQLite-Datensatz?

    <p>Die eindeutige ID des Datensatzes.</p> Signup and view all the answers

    Wie wird die Länge des String-Payloads im zweiten Beispiel berechnet?

    <p>Durch Subtraktion von 13 von (49)₁₀ und anschließender Division durch 2.</p> Signup and view all the answers

    Warum ist die Anzahl der Bytes des Serial Type Arrays in den 'verwaisten Einträgen' oft 0x00?

    <p>Weil der Eintrag korrupt ist oder nicht korrekt allokiert wurde.</p> Signup and view all the answers

    Was ist die Funktion von pos.VARINT im Kontext der Payload-Länge und ROWID?

    <p>Es speichert eine variable Anzahl an Bytes um die Länge oder ID zu repräsentieren.</p> Signup and view all the answers

    Was bedeutet es, wenn die angegebene Payload-Länge eines Eintrags größer ist als benötigt?

    <p>Der Eintrag könnte korrekt sein, insbesondere wenn die Datentypen in der Tabelle mit den Serial Types übereinstimmen.</p> Signup and view all the answers

    Welches Szenario beschreibt ein Problem mit der Größe von Serial Types in verwaisten Einträgen?

    <p>Die angegebene Länge der Serial Types führt zu einem Payload, der zu groß ist.</p> Signup and view all the answers

    Was ist ein Indikator für einen verwaisten Eintrag, der sich fast erfolgreich wiederherstellen lässt?

    <p>Ein mit NOT NULL definiertes Attribut hat den Wert NULL.</p> Signup and view all the answers

    Wenn ein Eintrag an einem nicht-allokierten Byte-Bereich beginnt, was ist eine mögliche Interpretation?

    <p>Der Eintrag könnte gültig sein, besonders wenn er zu erwartenden Datenmustern passt.</p> Signup and view all the answers

    Wie kann sich eine Diskrepanz zwischen einer berechneten und der eigentlichen Länge eines Datensatzes äußern?

    <p>Die Summe der Serial Types in einem Eintrag kann kleiner sein als die angegebene Länge des Datensatzes.</p> Signup and view all the answers

    Welche Auswirkung hat das Überschreiben der ersten vier Bytes eines gelöschten Eintrags in SQLite?

    <p>Der Eintrag wird zu einem partiellen Eintrag.</p> Signup and view all the answers

    Welche Informationen befinden sich im Freeblock-Header, der die ersten vier Bytes eines gelöschten SQLite Eintrags überschreibt?

    <p>Ein Pointer zum nächsten Freeblock und die Länge des aktuellen Freeblocks.</p> Signup and view all the answers

    Warum können bei partiellen Einträgen in SQLite unterschiedliche Teile überschrieben worden sein?

    <p>Wegen der Verwendung von VARINTs am Anfang eines Eintrags.</p> Signup and view all the answers

    Welche der folgenden Kombinationen von Daten können bei einem partiellen Eintrag in SQLite überschrieben sein?

    <p>Die Länge des Payloads, ROWID und weitere Daten des Headers.</p> Signup and view all the answers

    Wovon ist die Wiederherstellung von partiellen Einträgen in SQLite abhängig?

    <p>Vom Schema der Tabelle und der Anzahl der Einträge.</p> Signup and view all the answers

    In welcher Reihenfolge sind die Bestandteile eines SQLite-Eintrags typischerweise angeordnet?

    <p>Payload Len, ROWID, Record Len, Serial Types.</p> Signup and view all the answers

    Was wird durch die Serial Types in einem SQLite-Eintrag beschrieben?

    <p>Der Typ, der in der Spalte gespeichert ist (z.B. INTEGER oder TEXT).</p> Signup and view all the answers

    Wie beeinflusst das Vorhandensein von VARINTs die Struktur eines Eintrags?

    <p>VARINTs verändern die Länge und Position verschiedener Felder im Eintrag.</p> Signup and view all the answers

    Study Notes

    SQLite Einführung

    • SQLite ist eine Datenbank, die von Richard Hipp entwickelt wurde.
    • Es handelt sich um eine Client-Server-lose Datenbank.
    • Die Datenbankdaten werden als Datei auf dem Client gespeichert.

    Datenbankrelevanz

    • Mobiles Betriebssystem (Android und iOS)
    • Desktop Betriebssystem (Mac und Windows)
    • Browser (Chrome, Firefox, Safari)

    SQLite Dateiformat

    • Eine Datenbank ist eine Sammlung von Tabellen (Tables).
    • Jede Tabelle hat ein definiertes Format (Schema).
    • Tabellen können über eindeutige Schlüssel (Keys) miteinander verknüpft sein (Relational).
    • Die Datenbank ist idealerweise normalisiert, um Duplikate zu minimieren und Effizienz und Integrität zu maximieren.
    • Tabellen und Indizes werden gesammelt.
    • Die Nutzung von Binärbäumen (Binary Trees) – B-Trees – ist üblich
    • Eine SQLite-Datenbank besteht aus einer Anzahl von (meist) gleich großen Einheiten von Daten – Pages.
    • Eine Page hat eine Größe von 512 Bytes.
    • Die kleinstmögliche Datenbank hat 512 Bytes.
    • Die größte Datenbank ist bis 140 TB.
    • Es gibt verschiedene Page Typen: B-Tree, Overflow, Freelist, Pointer Map und Lock-Byte Pages.

    B-Tree Pages

    • B-Tree Pages sind die häufigste Art von Pages.
    • Es gibt zwei Arten von B-Tree-Tabellen: Table-B-Tree und Index-B-Tree
    • Jede Art hat zwei Unterarten: Interior Pages und Leaf Pages.
    • Die aktiven/vorhandenen Inhalte der Datenbank werden in Leaf Pages abgelegt.
    • Nicht-allokierte Bereiche befinden sich ebenfalls auf den Pages.

    Erste Page

    • Die Datenbank beginnt auf der ersten Page.
    • Die ersten 100 Bytes bilden den Database Header.
    • Nach dem Header befindet sich die Table B-Tree des sqlite_master-Tables.
    • Der sqlite_master Table enthält Informationen zu jeder Tabelle und jedem Index in der Datenbank.

    Database Header

    • Die ersten 100 Bytes des Headers enthalten 23 Einträge.
    • Wichtige strukturelle Daten der Datenbank werden beinhaltet.
    • Integer-Werte werden in SQLite im Big-Endian-Format gespeichert.

    B-Trees

    • Eine Datenbank besteht aus Tabellen und Indizes.
    • Jeder benötigt jeweils eine oder mehrere Seiten (Pages).
    • Eine Seite gehört nicht zu verschiedenen Tabellen oder Indizes.
    • Seiten werden mit einem B-Baum zusammengefügt.

    Tabelle: sqlite_master

    • Jede Datenbank hat eine sqlite_master-Tabelle.
    • Die Tabelle beginnt auf der ersten Seite nach dem Header und enthält Daten zu jeder Tabelle in der Datenbank.
    • Die Tabelle enthält Informationen wie Typ, Name, Bezugsname, Root Page (Anfang), SQL-Statement der Erstellung der Tabelle.

    B-Tree-Interior und Leaf Pages

    • Die Struktur eines B-Baumes wird mit Hilfe von Interior und Leaf Pages realisiert.
    • Es gibt immer nur eine Root Page am Anfang der Table.

    Interior Pages

    • Beinhalten Verweise (Pointers) auf weitere Pages.
    • Zeigen auf weitere Interior oder Leaf Pages.

    Leaf Pages

    • Behalten die eigentlichen Daten, die in der Datenbank abgelegt sind.
    • Es gibt Ausnahmen von WITHOUT_ROWID-Tabellen.

    Größere Tabellen

    • Größere Tabellen haben eine komplexere Struktur aus Interior und Leaf Pages.
    • Wenn die Datenbankdaten geändert werden, können Seiten (Pages) hinzugefügt oder gelöscht werden.
    • Einträge auf den Seiten können auch intern kopiert werden.

    Aufbau von Interior und Leaf Pages

    • Page Header
    • Cell Pointer Array
    • Zellen (Cells Header + Zellinhalt (Payload))
    • Freie Blöcke (Free Blocks)
    • Flag (1 Byte): 0x02 -> Interior Index, 0x05 -> Tabelle des Interior, 0x0A -> Leaf Index, 0x0D -> Tabellende
    • Erster freier Block (2 Bytes)
    • Anzahl der allokierten Zellen (2 Bytes)
    • Offset zum ersten Eintrag (2 Bytes)
    • Anzahl der Fragmente in Bytes (1 Byte)
    • Verweis ganz rechts (4 Bytes, nur Interior)

    Beispiel eines Headers

    • a = (0D)16 → Blatttabelle
    • b = (0000)16 = (0)10 → keine freien Blöcke
    • c = (0001)16 = (1)10 → eine belegte Zelle
    • d = (0FAC) 16 = (4012)10 → Eintrag an Offset 4012
    • e = (00)16 = (0)10 → 0 Byte Fragment

    Varints

    • Integer werden mit variabler Länge gespeichert (1 bis 9 Bytes).
    • Das Zweierkomplement-Format wird verwendet, um kleine positive Zahlen effizient darzustellen.
    • Es wird für Bytelängen, ROWIDs und verschiedene Eintragstypen verwendet.
    • Dies gibt es auch für negative Werte, aber das ist ineffizienter.

    Steuerungszeichen

    • Steuerungszeichen durch das höchstwertigste Bit
    • 1 bedeutet, dass das Bit auf weitere Bytes folgt
    • 0 bedeutet das letzte Byte

    Positiver Varint

    • Beispiel für die Darstellung positiver Zahlen in Varint-Format.

    Cell Pointer Array

    • Nach dem Header folgt der Cell Pointer Array.
    • Beinhaltet einen 2 Byte-Pointer für jede genutzte Zelle.
    • Zeigt auf Tabellenoffset auf der Seite.
    • Die Anzahl der allokierten Zellen steht im Header dieser Seite.

    Struktur eines Eintrags

    • Die Einträge im Cell Pointer Array zeigen auf Einträge innerhalb der Seite.
    • Das Layout der Einträge hängt von der Art der Seite (Interior oder Leaf) ab.
    • Interior Table, Leaf Table, Interior Index, Leaf Index.

    Aufbau der Interior und Leaf Table Records

    • Interior Record: Zeigt auf Kindsknoten (Varint), Integer-Schlüssel/ROWID (Varint).
    • Leaf Record: Länge des Payloads (Varint, inkl. Overflow), Integer-Schlüssel/ROWID (Varint), Payload (variable Länge), Pointer auf Overflow-Seite (4 Bytes, nur bei Bedarf).

    Leaf Table Record

    • Payload Length
    • ROWID
    • Record Length
    • Null
    • txt12
    • … -Payload
    • Overflow Page

    Leaf Table Aufbau

    • Länge des Payloads (Varint, inkl. Overflow)
    • Integer Key / ROWID (Varint)
    • Payload (variable Länge)
    • Pointer auf Overflow-Seite(4 Bytes, nur wenn nötig)
    • Payload besteht aus Kopf (Payload Header) und Inhalt (Payload Body)

    Attributtypen

    • Übersicht über verschiedene Attributtypen, Größe (Bytes) und Beschreibung.

    Leaf- und Interior-Tabelle

    • Leaf Tabelle: Data Layout: Payload Length, ROWID, Record Len, Serial type, Daten
    • Interior Tabelle enthält Referenzen zu anderen Pages/Kindsknoten, Key, und Position auf der linken Seite

    Record Recovery

    • Die Wiederherstellung von Daten in SQLite-Datenbanken hängt davon ab, wie viel von einem Eintrag erhalten ist.
    • Möglichkeiten:
      • Intakte Struktur
        • Leaf Page (Flag 0x0D)
        • Verwaiste Page (z. B. durch Reorganisation)
        • Cell Pointer Array intakt
      • Verwaiste Einträge
        • Vollständiger Record, aber ohne Eintrag im Cell Pointer Array
      • Partielle Einträge
        • Eintrag beginnt mit Freeblock-Header überschrieben -Es kann sein, dass der wiederhergestellte Eintrag auch „live” in der Datenbank weiter existiert.
    • Um einen Eintrag zu finden, können folgende Schritte verfolgt werden:
      • Suche nach dem ersten Eintrag im Cell Pointer Record
      • Analysiere den Record und den dazugehörigen Payload
      • Vergleiche den Eintrag mit den vorhandenen Tabellen

    Verwaiste Einträge

    • Kein Eintrag findet sich im Cell Pointer Record.
    • Finde den Record und die zugehörige Tabelle.
    • Alle nicht allokierten Bytes werden analysiert.
    • Für jedes potenzielle Startbyte wird geprüft, ob ein korrekter Record zu einer Tabelle passt.

    Serial Type Array nicht korrekt

    • Beispiel, wo ein String mit 49 Bytes ein ROWID von 26 Bytes, und einige Integer mit 8 Byte.
    • Die Serial Type Arraygröße passt nicht zu den vorhandenen Byte.

    Verwaiste Einträge – Länge des Serial Type Arrays zu groß

    • Der Anfang von dem nicht allokierten Byte
    • Länge des Payloads möglich (pos. VARINT).
    • ROWID möglich (pos. VARINT).
    • Die Anzahl der Bytes des Serial Type Arrays sollte größer als 0 sein.
    • Der Eintrag könnte richtig sein (z.B. wenn text, int, int, int in einer Tabelle definiert sind).
    • Die angegebene Größe des Payloads ist möglicherweise größer als nötig

    Verwaiste Einträge – (Fast) Korrekter Eintrag

    • Ein Eintrag kann erfolgreich wiederhergestellt werden.
    • Der Wert muss nicht NULL sein.

    Partielle Einträge

    • Überschriebene Teile eines Records können Probleme bei der Wiederherstellung verursachen.
    • Nach dem Löschen werden nur die ersten vier Bytes mit einem Freeblock-Header überschrieben.
      • Pointer zum nächsten Freeblock
      • Länge des aktuellen Freeblocks

    Partielle Einträge – Aufbau eines Eintrags

    Write-Ahead Logs (WALs)

    • Die Datenbank selbst wird in einer einzigen Datei abgelegt.
    • Weitere Dateien (z. B. Journals und Write Ahead Logs) können zur aktiven Datenbank gehören.
    • SQLite ist eine Transaktionsdatenbank.
    • Änderungen werden in Gruppen zusammengefasst.
    • Die kleinste Änderung betrifft immer mindestens eine Seite.
    • Ein Commit kann auch hunderte Pages betreffen.
    • Herausforderungen für ein System: Absturz der Software, Absturz des Betriebssystems, Stromausfall.

    Ansatz

    • Kopieren der betroffenen Seiten in das Rollback-Journal vor Ausführung einer Transaktion.
    • Modi für Journal_Mode, welche die Art der Journal-Ungültigerklärung bestimmen. (DELETE, TRUNCATE, PERSIST)

    Sequenz einer Transaktion

    • Neue oder veränderte Seiten werden geschrieben.
    • Der Journal Header wird geschrieben.
    • Seiten ohne Änderungen werden kopiert.
    • Neue Seiten werden in die Datenbank geschrieben.
    • Wenn diese Schritte erfolgreich durchgeführt wurden, markiert der Journal das als ungültig.
    • Bei Fehlern wird die gesicherte Seite in die Datenbank kopiert.

    Write-Ahead Logs (WALs)

    • Write-Ahead Logs (WAL) sind eine Methode, um Änderungen in Form eines Caches zu speichern.
    • WALs sind im Vergleich zu Rollback-Journals im Allgemeinen schneller.
    • Mehrere Transaktionen können in das WAL eingetragen werden.
    • Transaktionen werden im WAL ausgeführt.
    • Die Datenbank wird nur in sog. Checkpoints beschrieben.
    • Checkpoints können durch Nutzer ausgelöst oder nach mindestens 1000 Seiten oder nach dem Beenden der Software erfolgen.
    • WAL-Dateien – Dateiendung: -wal (z.B. test.db → testdb-wal)
    • Es gibt einen Commit-Frame zum Schluss der Transaction.

    ###Praktischer Einsatz von WALs

    • Start der Transaktion.
    • Modifizierte Pages werden in das WAL (without DB impact) geschrieben.
    • Weitere Pages werden in das WAL geschrieben.
    • Commit der Transaktion → Commit-Frame.
    • Checkpoint (> 1000 Pages or by command) Die aktuellsten Pages werden in die Datenbank geschrieben.
    • Neue Transaktionen werden am Anfang des WAL (Header aktualisiert, aber der Rest wird nicht gelöscht) geschrieben.
    • Schließen der Software → Checkpoint und Löschen der WAL-Datei.

    Studying That Suits You

    Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

    Quiz Team

    Related Documents

    Kapitel 07 - SQLite PDF

    Description

    Teste dein Wissen über die grundlegenden Datenstrukturen und Funktionen in SQLite-Datenbanken. Der Quiz umfasst Fragen zu Page-Typen, Freelist Pages und der Architektur von SQLite. Ideal für Studierende und Fachleute, die ihre Kenntnisse über SQLite vertiefen möchten.

    More Like This

    Use Quizgecko on...
    Browser
    Browser