Datenbanken Skript zur Vorlesung On-/Offline-Produktion/Netze OPN Prof. Dr. Nils Martini Hochschule für Angewandte Wissenschaften Hamburg, 12.2001 INHALTSVERZEICHNIS 1 Inhaltsverzeichnis 10 Datenbanken 10.1 Grundlagen . . . . . . . . . . . . . . . 10.2 Theorie relationaler Datenbanken . . . 10.2.1 Tabellen und ihre Beziehungen 10.2.2 Normalformen . . . . . . . . . . 10.2.3 Datenbank-Entwurf . . . . . . . 10.3 SQL . . . . . . . . . . . . . . . . . . . 10.3.1 Data Definition Language . . . 10.3.2 Data Manipulation Language . 10.3.3 Data Control Language . . . . . 10.4 Transaktionen . . . . . . . . . . . . . . 10.5 MySQL . . . . . . . . . . . . . . . . . 10.6 Datenbank-Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 3 4 4 5 5 7 9 10 11 12 10 DATENBANKEN 10 10.1 2 Datenbanken Grundlagen – Datenbanken dienen zur Verwaltung und Speicherung von Informationen in geordneten Datenstrukturen – der Datenzugriff erfolgt anwendungsunabhängig, d.h. unterschiedliche Applikationen können mittels einer standardisierten Schnittstelle auf gemeinsame Datenbestände zugreifen – Schwächen herkömmlicher (anwendungsspezifischer) Datenspeicherung sind ◦ evtl. mehrfache Speicherung derselben Information (schädliche Redundanz) ◦ inkonsistente Datensätze ◦ aufwändige Programmpflege ◦ Erweiterungen schwer realisierbar ◦ Inkonsistenzen bei zeitgleichen Datenzugriffen mehrerer Anwendungen – durch den Einsatz von Datenbanken lassen sich diese Nachteile vermeiden – Ziele von Datenbanken: ◦ Unabhängigkeit der Anwendungen von der Datenstruktur ◦ Unabhängigkeit der Anwendungsentwicklung von der Datenstruktur und den Zugriffsmethoden ◦ Erhalt der Datenkonsistenz – die Kommunikation zwischen dem Datenbestand und Anwendung wird durch das DataBase Management System (DBMS) geregelt – DBMS und Datenbestand werden als Datenbanksystem (DBS) bezeichnet – in einem DBS werden reale Objekte mittels ihrer Eigenschaften (z.B. Zahlen, Worte, Bilder, Töne) beschrieben – die Gesamtheit dieser Eigenschaften wird Tupel (Zeile, Datensatz) einer Relation genannt – die Gesamtheit aller Tupel bildet eine Relation (Tabelle) – die Menge von Tabellen bildet letztlich eine Relationale Datenbank – Hersteller u.a.: Oracle, Informix, Sybase, IBM, Microsoft, CA usw. – viele Hersteller verwenden eine Client-Server-Architektur (die idealerweise heterogene Systeme unterstützen sollte) ◦ Server: Verwaltung der Datenbank ◦ Clients: Benutzeroberfläche, Anzeige von Daten, Validierung von Eingaben usw. ◦ Clients können als Thick- oder Thin-Client ausgeführt sein – Begriffsdefinitionen (Datenbank-Theoretiker, -Analytiker und -Entwickler benutzen unterschiedliche Begriffe für die wesentlichen Elemente einer Datenbank): 10 DATENBANKEN 3 ◦ Relation = Entität = Tabelle ◦ Attribut = Spalte ◦ Tupel = Zeile = Datensatz 10.2 Theorie relationaler Datenbanken 10.2.1 Tabellen und ihre Beziehungen – Eine Tabelle besteht aus Zeilen und Spalten: ◦ eine Zeile enthält eine Gruppe von Tabellenattributen ◦ eine Spalte enthält eine Sorte“ von Attributen ” ◦ die Reihenfolge der Zeilen und Spalten ist beliebig (Vorteil: Anwendungen müssen nicht auf starre Datenstrukturen zugreifen) – für die Datenintegrität ist es wichtig, dass keine Zeile in einer Tabelle mehrfach vorhanden ist (sie wird eindeutig durch einen so genannten Primärschlüssel identifiziert) – Primärschlüssel (Primary Key, PK): eine Tabelle verfügt über ein oder mehrere Attribute, die einen Datensatz eindeutig definieren – Fremdschlüssel (Foreign Key): hierbei handelt es sich um eine oder mehrere Spalten, die mit bestimmten Attributen (Primärschlüssel) anderer Tabellen zusammengehören – zwei Tabellen können über Beziehungen miteinander verbunden sein – Merkmale von Tabellen-Beziehungen: ◦ identifizierend: der PK der übergeordneten Tabelle ist ein Teil des PK der untergeordneten Tabelle ◦ nicht-identifizierend ◦ Kardinalität: Anzahl der Zeilen in der untergeordneten Tabelle, über die die übergeordnete verfügen muss ◦ optional oder erforderlich: eine Zeile kann ohne die Informationen der untergeordneten Tabelle auskommen oder nicht ◦ Integritätsregeln: damit wird definiert was geschehen soll, wenn eine Zeile in der über - bzw. untergeordneten Tabelle gelöscht wird – Nullwert: für jede Spalte wird festgelegt, ob ein Wert vorhanden sein muss oder nicht – Lösch- und Update-Regeln: ◦ bedingtes Löschen: nur Löschen, wenn keine Fremdschlüssel existieren ◦ kaskadierendes Löschen: es werden nicht nur die Datensätze in der ZielTabelle gelöscht, sondern auch alle Beziehungen ◦ Löschen mit NULL-Setzung 10 DATENBANKEN 10.2.2 4 Normalformen – die Normalisierungstheorie definiert Kriterien, denen eine Datenbank entsprechen muss, um unnötige Redundanzen oder Widersprüche zu vermeiden – entsprechen die Tabellen einer Datenbank nicht den Normalformen, so können Anomalien entstehen, die die Integrität der Daten gefährden – Anomalien: ◦ Einfüge-Anomalie ◦ Lösch-Anomalie ◦ Update-Anomalie – zum Verständnis der Normalformen sind die folgenden Abhängigkeiten von Attributen wichtig: ◦ funktionale Abhängigkeit: Attribut 2 in einer Tabelle T(1,2) ist von Attribut 1 funktional abhängig, wenn zu jedem Wert von 1 genau ein Wert von 2 gehört ◦ volle funktionale Abhängigkeit: Attribut 3 ist von den Attributen 1 und 2 in T(1,2,3) voll funktional abhängig, wenn 3 von den zusammengesetzten Attributen 1 und 2 abhängig ist, nicht aber von den einzelnen Attributen ◦ transitive Abhängigkeit: in T(1,2,3) ist 3 von 1 transitiv abhängig, wenn 2 von 1 funktional abhängig ist, 1 aber nicht von 2 und 3 von 2 funktional abhängig ist ◦ mehrwertige Abhängigkeit (in der Praxis von untergeordneter Bedeutung): in T(1,2,3) ist 3 von 1 mehrwertig abhängig, wenn zu jedem 1-Wert für jede Kombination dieses 1-Wertes mit einem 2-Wert, eine identische Menge von 3-Werten gehört – erste Normalform (1NF): eine Tabelle befindet sich in 1NF, wenn alle Attribute atomare Werte (Einzelwerte) enthalten – zweite Normalform (2NF): eine Tabelle befindet sich in 2NF, wenn sie sich in 1NF befindet und jedes Nicht-Schlüssel-Attribut voll funktional abhängig ist vom Schlüssel – dritte Normalform (3NF): eine Tabelle befindet sich in 3NF, wenn sie sich in 1NF und 2NF befindet und sie keine transitiven Abhängigkeiten enthält – für einen praxisgerechten DB-Entwurf ist die 3NF ausreichend – in der Theorie existieren zusätzlich: 4NF, 5NF, Boyce/Codd NF 10.2.3 Datenbank-Entwurf – zur Entwicklung eines Datenbank-Modells müssen die Beziehungen der Attribute bekannt sein – diese Bestandsaufnahme sollte sehr sorgfältig durchgeführt werden, da nachträgliche Änderungen am Modell mit einem hohen Aufwand verbunden sind 10 DATENBANKEN 5 – da diese Beziehungen bei einer großen Anzahl von Attributen sehr komplex sein können, stellen professionelle Datenbank-Systeme hierfür grafische EntwicklungsTools bereit – Schritte zu einem logischen Datenbank-Modell: ◦ 1.Schritt: Aufnahme aller Anforderungen ◦ 2.Schritt: Formalisierung (Objektklassen, Eigenschaften, Beziehungen) und Strukturierung eines Entwurfs (Entity Relationship Diagram) ◦ 3.Schritt: Normalisierung ◦ 4.Schritt: Erstellen der Tabellen – auch für das Erstellen der Tabellen stellen Datenbanksysteme oft (grafische) Hilfswerkzeuge zur Verfügung, deren Grundlage jedoch immer eine standardisierte Datenbank-Beschreibungssprache ist: SQL 10.3 SQL – bei der Structured Query Language (SQL) handelt es sich um eine DatenbankBeschreibungssprache – SQL beschreibt die logischen Zusammenhänge in einer DB – Bestandteile von SQL sind ◦ Data Definition Language DDL ◦ Data Manipulation Language DML ◦ Data Control Language DCL 10.3.1 Data Definition Language – Erstellen einer Tabelle mit DDL-Kommandos: CREATE TABLE name ( spaltenname1 datentyp [NOT NULL], spaltenname2 datentyp [NULL], .... [Tabelleneinschränkungen]) ; ◦ der Tabellenname muss eindeutig sein (max. 30 Zeichen, darf kein SQLWort enthalten) ◦ SQL ist case-insensitive“ ” ◦ Spaltennamen in einer Tabelle müssen eindeutig sein ◦ es sind (abhängig vom Datenbank-Typ) bis zu 254 Spalten pro Tabelle erlaubt – ähnlich wie jede Programmiersprache kennt auch SQL unterschiedliche Datentypen: ◦ INT positive oder negative Ganzzahl ◦ SMALLINT ◦ DEC[p,q] Dezimalzahl (optional: mit p Stellen, davon q Nachkommastellen) 10 DATENBANKEN 6 ◦ FLOAT, REAL Gleitkommazahl ◦ DOUBLE PRECISION höhere Genauigkeit ◦ CHARACTER[(n)] Zeichenkette (optional: Länge n) ◦ VARCHAR(n) Zeichenkette mit variabler Länge ◦ DATE, TIME Datum-/Zeitangaben ◦ spezielle Datentypen z.T. herstellerabhängig (VARCHAR2, RAW, LONG) – Operatoren für numerische Daten: +, -, *, /, ** – Einschränkungen (Constraints) für Tabellen (bzw. Spalten): ◦ PRIMARY KEY Spalte, die den Primärschlüssel bildet ◦ UNIQUE Nicht-Wiederholbarkeit von Werten in einer Spalte ◦ FOREIGN KEY Referenz auf Spalten einer anderen Tabelle (nicht bei allen DB möglich) – Beispiel (Groß-/Kleinschreibung hier nur zur deutlicheren Unterscheidung von Werten und SQL-Kommandos): CREATE TABLE student ( Stud ID VARCHAR(5) NOT NULL, Nachname VARCHAR(30) NOT NULL, Vorname VARCHAR(25) NOT NULL, Geburtstag DATE NULL , Ort VARCHAR(30) NULL, plz INT(5) NULL ); – mit dem Kommando DESCRIBE student; wird die Tabellenstruktur angezeigt – Festlegen des Primärschlüssels einer Tabelle ◦ der Primärschlüssel einer Tabelle kann aus einer oder mehreren Spalten bestehen: Primary Key (spaltenname1, spaltenname2,...) ◦ Beispiel: CREATE TABLE abteilung ( abt nr VARCHAR(5) NOT NULL, abt name VARCHAR(30) NOT NULL, PRIMARY KEY (abt nr)); ◦ maximale Anzahl von Spalten im PK: 16 ◦ mindestens eine Spalte im PK darf keinen NULL-Wert haben ◦ LONG- oder RAW-Spalten können nicht Teil eines PK sein – Festlegen von Fremdschlüsseln FOREIGN KEY (spaltenname F1, ...) ...) REFERENCES tabellenname (spaltenname P1, – CHECK-Bedingung: Festlegen zusätzlicher Integritätsbedingungen CREATE TABLE lehrende ( Name VARCHAR(30) NOT NULL, 10 DATENBANKEN 7 position VARCHAR(25) NOT NULL, CHECK (position IN(’professor’,’lehrbeauftragter’)) ; – Angabe eines Standardwertes (Default) ort VARCHAR(35) DEFAULT ’hamburg’ 10.3.2 Data Manipulation Language – mit DML-Kommandos lassen sich vorhandene Datensätze lesen und verändern – die SELECT-Anweisung enthält hierzu zwei Elemente: ◦ die Liste der abzurufenden Daten ◦ die Tabelle, aus der Daten abgefragt werden – Beispiel: SELECT nachname, vorname FROM student; – es sind auch Wildcards (*) zulässig oder die mehrfache Abfrage desselben Attributs – arithmetische und logische Ausdrücke in select-Listen: SELECT produkt nr, preis * 1,16 FROM produkte; – Verkettung mit Zeichenfolgen mit || oder Komma: SELECT nachname, ’:’ , tel nr FROM mitarbeiter; – Festlegen von Suchkriterien mit WHERE: SELECT nachname, vorname FROM student WHERE ort=’hamburg’; – Kombinieren von Kriterien mit AND und OR: SELECT kunden nr FROM kunden WHERE produkt=’monitor’ AND preis>500 ; – Suchen von Teilzeichenketten mit LIKE: SELECT plz FROM kunden WHERE plz LIKE ’2%’ ; SELECT preis, prodname FROM produkte WHERE preis BETWEEN ’1000’ AND ’2000’; SELECT vorlesungsname, lehrender FROM vorlesungen WHERE UPPER(beschreibung) LIKE ’%VIDEO%’; – Daten sortieren mit ORDER BY – Anzahl der Zeilen in einer Tabelle: COUNT – Zeilen mit Spaltenwert null: SELECT nachname FROM mitarbeiter WHERE fax nr IS NOT NULL; – Mittelwert von Spalten AVG(): SELECT AVG(alter) FROM student; – das Verschachteln mehrerer SELECT-Anweisungen ist möglich – Vergleich eines Spaltenwertes mit vorgegebenen Werten mit IN bzw. NOT IN: SELECT name FROM student WHERE pruefung IN (’opn’,’avpk’,’pc’); – die Lesekonsistenz bei SELECT-Anweisungen ist gewährleistet – neue Datensätze in vorhandene Tabellen einfügen: INSERT INSERT INTO mitarbeiter (abt nr,vorname,nachname) 10 DATENBANKEN 8 VALUES (’3’,’herbert’,’schulz’); – vorhandene Datensätze ändern: UPDATE UPDATE mitarbeiter SET gehalt=gehalt+100 WHERE gehalt<5000; – Datensätze löschen: DELETE DELETE FROM student WHERE matrikel nr=’1234567’; – SQL enthält viele Funktionen zur Bearbeitung von Zeichenketten ◦ LENGTH Länge einer Zeichenkette SELECT vorname, LENGTH(vorname) ... ◦ SUBSTR(String, Start, Anzahl) Teilkette SELECT name, SUBSTR(name,1,3) FROM ... ◦ Mustersuche mit dem LIKE-Operator ◦ REPLACE(Tabelle, suche, ersetze) ◦ LTRIM und RTRIM Entfernen von Leerzeichen UPDATE student SET vorname=RTRIM(vorname); ◦ LPAD und RPAD Auffüllen einer Zeichenfolge ◦ LOWER und UPPER Ändern der Groß- bzw. Kleinschreibung ◦ DECODE Umwandeln z.B. von kryptischen Codes in lesbarere Zeichen ◦ ASCII Ausgabe des ascii-Wertes – Join-Operator ◦ oftmals sollen Informationen aus mehreren Tabellen verknüpft werden ◦ dies ist mit dem join-Operator möglich ◦ Beispiel: SELECT spalte1,spalte2 FROM tabelle1,tabelle2 WHERE tabelle1.spalteN = tabelle2.spalteM ; – Mengen-Operatoren ◦ INTERSECT gibt Zeilen aus, die zwei Tabellen gemeinsam haben SELECT name FROM student INTERSECT SELECT name FROM vordiplom; ◦ UNION Kombination von Spalten SELECT name FROM student UNION SELECT name FROM prof; ◦ MINUS Verneinung von intersect ◦ Erstellen einer Tabelle aus einer anderen CREATE TABLE xyz AS SELECT * FROM abc WHERE zahl=’123’; – Datensicht (View) ◦ eine Datensicht ist eine gespeicherte Abfrage von einer oder mehreren Tabellen ◦ eine Datensicht ist eine virtuelle Tabelle“, die eine ausgewählte Sicht auf ” den Datenbestand bietet ◦ reale Tabellen werden nicht verändert ◦ eine Datensicht ist nur eine Berechnungsregel zur Darstellung bestimmter 10 DATENBANKEN 9 Daten ◦ Vorteile: ∗ jeder Benutzer erhält nur die für ihn relevanten Daten ∗ interne Zusammenhänge bzw. komplexe Datenstrukturen werden verborgen ∗ sensible Informationen werden nur bestimmten Benutzern zugänglich gemacht ◦ jede Änderung an Views wirkt sich auch auf die realen Tabellen aus ◦ Tabellenänderungen durch Views sind nur unter bestimmten Bedingungen möglich ◦ Views können wie normale Tabellen abgefragt werden ◦ Views werden nicht von allen Datenbanken unterstützt 10.3.3 Data Control Language – es lassen sich für Datenbanken bzw. Tabellen differenzierte Zugriffsmöglichkeiten einrichten, um unterschiedlichen Benutzern verschiedene Rechte zuzuordnen – Rechte sind einstellbar mit den Kommandos der Data Control Language (DCL) – Benutzerrechte in Tabellen ◦ die höchsten Rechte hat der Ersteller ◦ alle Rechte hat der DB-Administrator (DBA) ◦ Benutzer-Rechte werden vom DBA festgelegt – Benutzerrechte (Privilegien) auf drei Ebenen: ◦ Systemebene (z.B. Erzeugen ganzer DB) ◦ Datenbankebene (Anlegen von Tabellen) ◦ Tabellenebene (DML-Operationen) – Tabellenrechte werden mit der GRANT-Anweisung gesetzt: GRANT <operation> ON <tabelle> TO <benutzer> – wobei die Operation z.B. folgende Befehle umfassen kann: SELECT, INSERT, DELETE, UPDATE – Beispiele: GRANT ALL ON tabelle TO PUBLIC; GRANT SELECT,INSERT ON mitarbeiter TO claudia,heinz; – Nicht-Ersteller-Benutzer können Rechte nur eingeschränkt weitergeben – Benutzer können keine Rechte weitergeben, über die sie nicht selbst verfügen – Ersteller-Benutzer haben alle Rechte an einer Tabelle – Entziehen von Rechten mit REVOKE – GRANT und REVOKE beziehen sich immer auf alle Spalten und Zeilen einer Tabelle – eine differenziertere Rechtevergabe ist nur mittels Views zu erreichen 10 DATENBANKEN 10.4 10 Transaktionen – Ein fehlerfreier Betrieb einer Datenbank ist nur dann möglich, wenn parallele Zugriffe verschiedenener Anwendungen auf denselben Datensatz vom DBMS erkannt und geregelt werden – insbesondere ist auf den Erhalt der Datenkonsistenz bei gleichzeitigen UpdateAktionen zu achten – Lese- und Schreiboperationen sollten nach dem Alles-oder-Nichts-Prinzip durchgeführt werden, d.h. eine Aktion wird entweder vollständig oder gar nicht durchgeführt – die Transaktionsverwaltung ermöglicht einen Mehrbenutzerbetrieb ohne Gefährdung der Datenkonsistenz – nach Fehlern oder Unterbrechungen muss der ursprüngliche Zustand wiederherstellbar sein – eine Voraussetzung hierfür ist die ausführliche Protokollierung von Änderungen (Logging), einschließlich Zeitpunkt, Benutzername und Datensatz – eine Transaktion ist eine Einheit von Datenbank-Änderungen, die nur komplett oder gar nicht in die DB übernommen werden darf – bei Störungen muss die DB auf den Stand vor der Änderung zurückzusetzen sein (COMMIT, ROLLBACK) – nach einem Transaktionsstart sind alle Anweisungen nur vorläufig und werden erst beim Transaktionsende dauerhaft in die Datenbank eingetragen – das Transaktionsende wird gekennzeichnet durch: ◦ die explizite Anweisung COMMIT ◦ das reguläre Beenden einer Anwendung ◦ das Beenden einer DB-Sitzung – Ursachen für einen Transaktionsabbruch können sein: ◦ Systemfehler (Hardware, Platten-Crash, Stromausfall usw.) ◦ Programmfehler (Arithmetik, Programmabbruch, Deadlock, Laufzeitfehler usw.) ◦ die explizite Anweisung ROLLBACK (Rückwärts-Lesen der LOG-Datei) – die Transaktionsverwaltung garantiert jedoch nur die korrekte Ausführung einzelner Aktionen, parallel verarbeitete Transaktionen können sich trotzdem überlagern – gleichzeitig ausgeführte Updates können sich gegenseitig überschreiben ( verlo” rene Updates“) und führen somit zum Datenverlust – die Sicherheit von Transaktionen wird durch Synchronisation erreicht, d.h. jede Transaktion muss einen Datensatz für andere Transaktionen sperren: LOCK – das Sperren (Locking) kann auf unterschiedlichen Ebenen erfolgen ◦ sperren der gesamten Datenbank 10 DATENBANKEN 11 ◦ sperren einer Tabelle ◦ sperren einer Spalte/Zeile ◦ sperren eines Feldes – die Verwaltung übernimmt ein Lock-Manager, der einen gesperrten Datensatz erst nach einem COMMIT oder ROLLBACK der aktuellen Transaktion freigibt 10.5 MySQL – Datenbanken wurden bis vor einigen Jahren fast ausschließlich im kommerziellen Umfeld für die Speicherung und Verwaltung sehr großer Datenmengen eingesetzt – in Projekten mit kleineren Datenmengen wurden meistens proprietäre oder software-spezifische Speicherformate verwendet – durch die Verbreitung von OpenSource-Software und -Betriebssystemen wurden auch nicht-kommerzielle Datenbanksysteme entwickelt – diese Datenbanken können im Rahmen der Public Licenses im nicht-kommerziellen Umfeld frei betrieben werden – vor allem im Bereich von Web-Diensten können solche Datenbanken für die immer weiter anwachsenden Datenbestände sinnvoll eingesetzt werden – eine verbreitete Datenbank ist MySQL“ ” – MySQL bietet eine hohe Konformität zu SQL und ist ein schneller DatenbankServer, da viele (wenig benutzte) Spezialfunktionen kommerzieller Produkte fehlen – da die Programmierung eines Datenbanksystems eine aufwändige, lang andauernde Entwicklung darstellt, gelten zum gegenwärtigen Zeitpunkt einige Einschränkungen: ◦ es sind keine sicheren Transaktionen gewährleistet (in der Praxis ist das aber nur bei hoch belasteten Systemen problematisch, zudem lassen sich sicherere Transaktionen in SQL-Kommandos hineinprogrammieren“) ” ◦ Locks einzelner Datensätze sind nicht möglich (nur ganze Tabellen) ◦ es gibt keine Views ◦ keine Fremdschlüssel ◦ keine referentielle Integrität (automatisches Löschen verbundener redundater Datensätze) – weitere Vorteile von MySQL sind u.a.: ◦ einfache Realisierung von Anbindungen an z.B. Perl, PHP, C, C++, JDBC (Java) ◦ Unterstützung diverser Datentypen (auch Binärdaten) ◦ zusätzliche Abfragekriterien (außer LIKE) ◦ schneller Datenzugriff 10 DATENBANKEN 10.6 12 Datenbank-Backup – für den Betrieb einer Datenbank ist die Sicherung (Backup) der Daten unerlässlich – beliebige Fehler im Gesamtsystem können bis zum Totalverlust der Daten führen, mit schwerwiegenden Folgen für ein Projekt oder ein ganzes Unternehmen – oftmals sind die Daten einer Datenbank nur mit hohem Aufwand oder im ungünstigsten Fall gar nicht mehr rekonstruierbar – Warum Sicherung einer Datenbank? ◦ SQL-Fehler ◦ Prozess-Fehler ◦ Tabellen-Fehler ◦ Benutzer-Fehler ◦ System- und Hardware-Fehler – da es sich bei einer Datenbank um ein komplexes System handelt, genügt es nicht, lediglich die Datenfiles oder Tabellen auf ein Backup-Medium zu kopieren – die physikalische Struktur einer Datenbank (am Beispiel Oracle) enthält folgende für eine Wiederherstellung wichtige Komponenten: ◦ Datenfiles (Tabellen) ◦ Transaction-Logs (Online-Redo-Logs) ◦ Archive-Logs (zur Wiederherstellung älterer Zustände) ◦ Control-File (enthält z.B. die Verzeichnis-Struktur) ◦ Rollback-Segmente – die Offline-Sicherung: ◦ Datenbank-Prozesse herunterfahren ◦ Datenfiles einschließlich der Verzeichnis-Struktur sichern ◦ die Offline-Sicherung ist nur dann möglich, wenn kein 7×24-Betrieb erforderlich ist – die Online-Sicherung: ◦ die Datenbank bleibt während der Sicherung in Betrieb ◦ sehr wichtig ist die Sicherung des Control-Files, ohne das die Datenbank nicht wiederherstellbar ist ◦ das Backup der Transaction-Logs ist wenig sinnvoll, da es sich hierbei um ständig geöffnete Dateien handelt, die nicht konsistent zu sichern sind ◦ aber: Transaction-Logs sind zwingend für die Wiederherstellung des aktuellen Status erforderlich und sollten daher gemultiplexed werden ◦ Archive-Logs (geschlossene Transaction-Logs) müssen erstellt und gesichert werden, da nur so im Fall eines Recoverys eine Verbindung“ zum letzten ” Backup hergestellt werden kann ◦ läuft eine Datenbank im NOARCHIVELOG-Modus ist nur ein Offline-Backup 10 DATENBANKEN 13 möglich ◦ letztlich sind natürlich auch die Datenfiles zu sichern, wobei beim OnlineBackup zu berücksichtigen ist, dass es sich um ein nicht-konsistentes Backup handelt, das alleine ohne Archive- und Online-Redo-Logs nicht brauchbar ist – Typen von Datenbank-Backups: ◦ konsistentes Backup der gesamten DB ◦ inkonsistentes Backup der gesamten DB ◦ Sicherung einer Tabelle ◦ Sicherung eines Datenfiles ◦ Archive-Log Backups Index Database Management System, 2 Datenbank-System, 2 Datenbanken, 2 Backup, 12 Locking, 10 Offline-Sicherung, 12 Online-Sicherung, 12 Transaction-Logs, 12 Transaktionen, 10 DBMS, siehe Database Management System DBS, siehe Datenbank-System Entitat, siehe Relation MySQL, 11 Normalformen, 4 Primarschlussel, 3 Primary Key, siehe Primarschlussel Redundanz, schadliche, 2 Relation, 3 Tupel, 2, 3 14