Datenbank- und Informationssysteme Datenbankfunktionen 33 Datenbankfunktionen Datenbankfunktionen u Datenverwaltung u u Datenmanipulation u u Änderungen, Abfragen (query) Erhaltung der Integrität u u Schema, Benutzer -> Datenkatalog (data dictionary) Datenkonsistenz, -sicherheit, -schutz Anwendungsunterstützung u Programm- und Datendefinitionsgenerator u Werkzeuge zur Leistungsanalyse Bild 3. -1 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux In diesem Kapitel wenden wir uns einem anderen Datenbankaspekt zu. Aus Sicht des ANSI/SPARC Modells bewegen wir uns von der konzeptionellen Ebene des vorherigen Kapitels zur internen Ebene, zu den Funktionen einer Datenbank. Wir unterteilen die Datenbankfunktionen in vier Kategorien. Die ersten drei werden in der Literatur intensiv behandelt, da sie für die Funktionalität einer Datenbank essentiell sind. Der letzte Punkt wird häufig als Bestandteil der Softwareentwicklung und nicht als Datenbankfunktion behandelt. Dies ist allerdings nicht ganz einsichtig, da diese Funktionalität vom Datenbankmanagementsystem erbracht werden muß und einen wesentlichen Einfluß auf die Brauchbarkeit (Usability) einer Datenbank hat. Die Unterstützung ist abhängig vom Datenbanksystem und Interface, kann also nur an konkreten Produkten detailliert untersucht werden (vgl. Stürner, Oracle System Tuning). Aus diesem Grund werden mit dem Datenbanksystem auch Modellierungs- und Tuningwerkzeuge vom Datenbankhersteller angeboten (z.B. GemBuilder, Oracle CASE, Access Wizards, etc.) Wir werden diese Produkte im Praktikum und der Softwareentwicklung kennenlernen; im Rahmen der Vorlesung wird nur ihre Funktionalität skizziert. Die grundlegenden Funktionen einer Datenbank werden auf den folgenden Seiten genauer vorgestellt. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-1 Datenbank- und Informationssysteme Datenbankfunktionen 3.1 3.1 Datenbanksprachen Datenbanksprachen u Klassifizierung : eingebettet eigenständig prozedural CODASYL-DML relationale Algebra deskriptiv embedded SQL SQL, OQL graphisch u QBE, Access Abfragetypen u freie Suche (ad hoc) u vordefinierte Suche Bild 3. -2 ⇒ für Informatikexperten (Informationssysteme) ⇒ für Sachbearbeiter (Informatiklaien) (operationale Systeme) Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Es sind eine ganze Reihe von Klassifikationen für die Datenmanipulation möglich. Wir zeigen hier nur zwei in der Literatur weitverbreitete Einteilungen für Datenbanksprachen nach dem Grad der Abstraktion bzw. der Autonomie der Sprache. Bei den Abfragetypen werden zwei Gruppen unterschieden: • Frei formulierte Abfragen erfordern die genaue Kenntnis der Datenbankstruktur. Moderne Systeme bieten dazu Hilfestellung, indem sie Informationen des Data Dictionaries dem Benutzer in Form von Auswahllisten zur Verfügung stellen. • Vordefinierte Abfragen hingegen können ohne Vorkenntnisse verwendet werden. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-2 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.1 3.1.1 SQL SQL (structured (structured query query language) language) deskriptive deskriptiveSprache Sprachezur zurDefinition Definitionund undManipulation Manipulationrelationaler relationalerDatenbanken Datenbanken u 3 Sprachgruppen : u DDL : (data definition lang.) u DML : (data manip. lang.) u embedded SQL u ML : (modul language) Bild 3. -3 CREATE SCHEMA | TABLE | INDEX | VIEW <s/t/i/v-name>; GRANT <privileges> ; INSERT INTO | UPDATE | DELETE FROM <tname>; SELECT <c-list> [INTO <params>] FROM <t-list>; COMMIT | ROLLBACK WORK; DECLARE <c-name> CURSOR FOR <SQL-query>; CLOSE | OPEN <cursor>; FETCH <c-name> INTO <params>; MODUL <m-name> LANGUAGE <l-name> SCHEMA <sch-name> DECLARE <...> CURSOR FOR PROCEDURE <p-name> <params><SQL-statement>; Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux SQL (Structured Query Language, im Englischen als "Siekl" ausgesprochen) ist mit Abstand die bekannteste und wichtigste Sprache für relationale Datenbanken. Für objektorientierte Datenbanken ist OQL (Object Query Language) gerade dabei, sich als Standard der OMG (Object Management Group) zu etablieren (siehe URL: http://www.odmg.org/, Stand 1998). SQL gliedert sich in drei Sprachgruppen: • Die Datendefinitionssprache DDL dient zur Definition von Datenbankobjekten (Tabellen, Indizes, Benutzersichten und -rechte. • Zur Datenmanipulation (DML) (Einfügen, Ändern, Löschen und Anzeigen) werden SQL-Befehle direkt mit Hilfe eines Interpreters oder als embedded SQL aus einer Programmiersprache (host language) heraus ausgeführt. Zur Anpassung der SQL Ergebnismengen (Datentyp Tabelle) sind Zeiger (cursors) zu definieren, die auf einen Datensatz zeigen, der dann mit Hilfe eines FETCH-Befehls in die Variablen der Host-Language übertragen werden kann. • Weniger bekannt ist, daß in SQL auch Prozeduren (stored procedures) und Module aus SQLStatements geformt werden können (Modulsprache, ML, bei SQL als Persistent Stored Modules, PSM, bekannt). Diese können in der Datenbank gespeichert werden und über einen Modul- oder Prozedurnamen aufgerufen und ausgeführt werden. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-3 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.1 3.1.1 SQL-Syntax SQL-Syntax (DDL) (DDL) u CREATE VIEW <view> (<alias1>, <alias2>, ...)AS SELECT col1, col2,...FROM <table1>, ... [WHERE <cond>] u CREATE TABLE <table> (<col1> <typ1> <kb1>, <col2> <typ2> <kb2>,...) u CREATE VIEW Abt_NY (ENo, ENom, Dept )AS SELECT PNr, PName, AbtName FROM Pers, Abt WHERE Pers.AbtNr = Abt.Anr AND Abt.AbtName = 'New York'; u CREATE TABLE Pers (PNr int primary key, PName char(20), AbtNr int references Abt, ...); CREATE TABLE Abt (ANr int primary key, AbtName char(20), ...); u u CREATE INDEX <idx> ON <table> (<col1>,< col2>, ...) oo oo u o Bild 3. -4 Datenbank- und Informationssysteme CREATE INDEX pers_idx ON pers (PName); (c) Sep-02 Prof. Dr. F. Laux Auf dieser und den folgenden Folien wird links die Syntax vorgestellt und rechts dazu jeweils ein Beispiel angegeben. Mit dem Befehl CREATE TABLE wird eine Tabelle definiert und angelegt. Für jede Spalte wird ein Attributname <colx>, ein Datentyp <typx> und optional eine Konsistenzbedingung <kbx> angegeben. Benutzersichten (virtuelle Tabellen) werden mit dem Schlüsselwort VIEW deklariert. Sie werden nur scheinbar (virtuell) erzeugt; in Wirklichkeit wird auf einem Teil der vorhandenen Tabellen gearbeitet. Die Spalten der Views erhalten nur Namen <alias> aber keine Datentypen, da diese durch die Spalten <colx> einer realen Tabelle <table1> schon festgelegt sind. Jedes beliebige Attribut <colx> einer Tabelle <table> kann mit dem Befehl CREATE INDEX jederzeit mit einem Index <idx> versehen werden. Indizes beeinflussen die logische Struktur einer Datenbank nicht, sie haben nur Einfluß auf die Arbeitsgeschwindigkeit der Datenbank. Je mehr Indizes definiert werden, desto länger dauert eine Einfügeoperation. Abfragen auf ein indiziertes Attribut werden jedoch wesentlich schneller durchgeführt. CREATE VIEW ist nicht Teil des SQL-Standards, da dieser Befehl als nicht konzeptuell sondern auf der interne Realisierungsaspekt (z.B. als Zugriffshilfe) betrachtet wird. Allerdings wird er von fast allen Produkten unterstützt, und das X/Open Gremium hat daher diesen Befehl in seine Empfehlung aufgenommen © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-4 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.1 3.1.1 SQL-Syntax SQL-Syntax (DML) (DML) u u u u INSERT INTO <table> VALUES (<val11>, <val2>,...) INSERT INTO <table> SELECT <col1>, <col2>, ... FROM <source-tab> [WHERE <condition>] UPDATE <table> SET <col1> = <val1>, <col2> = <val2>, ... [WHERE <condition>] DELETE FROM <table> [WHERE <condition>] Bild 3. -5 u u INSERT INTO Pers VALUES ( 007, 'Bond James', 5, ...); INSERT INTO Pers SELECT Nr, Name, ANr FROM old_Pers WHERE Einstelldat < '01-JUN-90'; u UPDATE Pers SET PName = 'Banks Gordon', AbtNr = 6); u DELETE FROM Pers WHERE AbtNr = 9; Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Mit INSERT INTO wird ein Datensatz mit den Werten <valx> in die Tabelle <table> eingetragen. Wenn einige Werte frei bleiben sollen (NULL-Values), dann ist NULL oder kein Wert (,,) anzugeben. Es ist auch möglich, mit einem Befehl mehrere Sätze einzutragen, wobei die Datenquelle wiederum eine Tabelle <source-tab> sein muß. Änderungs- und Löschoperationen wirken auf alle Datensätze, welche die WHERE-Bedingung erfüllen. Fehlt die Klausel, dann werden alle Sätze einer Tabelle bearbeitet. Eine WHERE-Bedingung wird als logischer Ausdruck <condition> formuliert, der für jeden Datensatz zu TRUE oder FALSE evaluiert wird. Ist die Bedingung erfüllt (TRUE), wird der Datensatz bearbeitet, andernfalls wird er nicht bearbeitet. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-5 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.1 3.1.1 SQL-Syntax SQL-Syntax (Abfrage) (Abfrage) u u SELECT <col1>, <col2>, ... FROM <table> [WHERE <condition>] } 12 12 12 u SELECT <col1>, <col2>, ... FROM <table> [WHERE <condition>] [[GROUP BY <colx>, <coly>,...] HAVING <grp-cond>] Bild 3. -6 FROM Pers WHERE AbtNr = 12; u PNr SELECT PNr, PName, AbtNr Budget } } } SELECT AbtNr, count(*), sum(Budget) FROM Pers WHERE PNr <= 10 GROUP BY AbtNr HAVING count(*) >= 2; Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Die Selektion ist die komplexeste SQL-Phrase. Zunächst wird nur eine einfache Form vorgestellt. Mit SELECT <col> werden die Spalten ausgewählt, mit FROM <table> wird die Tabelle festgelegt und mit WHERE werden die Sätze selektiert, welche ausgegeben werden sollen. Mit dem SELECT-Befehl lassen sich auch Gruppierungen durchführen. Dazu wird an eine einfache Selektion ein GROUP BY <col> angefügt, um die Spalte anzugeben, nach der gruppiert werden soll. Wenn für eine Gruppierung ein Selektionskriterium gelten soll, so ist dies durch HAVING <grp-cond> anzugeben. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-6 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.1 3.1.1 SQL-Syntax SQL-Syntax (Verbund) (Verbund) SELECT PNr, PName, AbtName, ... FROM Pers, Abt WHERE Pers.AbtNr = Abt.ANr; SELECT <col1>,<col2>, ... FROM <tab1>, <tab2> WHERE x=z AND y > 0; f: Tab1 X Tab2 --> Tab3 Tab1 X Tab3 Tab2 Bei der Selektion über mehrere Tabellen wird zuerst das Kartesische Produkt gebildet, dann werden die Tupel, welche die WHERE-Bedingung erfüllen, ausgewählt. Eine Selektionsbedingung, welche nur die Zeilen mit korrespondierenden Attributen auswählt und dieses nur einmal aufführt (tab1.attribx = tab2.attribx), heißt 'Natürlicher Verbund'. Bild 3. -7 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Die Mächtigkeit von SQL resultiert aus der Verbundoperation (Join) zweier (oder mehrerer) Tabellen. Dadurch wird es möglich, die Sätze verschiedener Tabellen miteinander zu verknüpfen und dadurch neue Ergebnistabellen zu erstellen. Diese Ergebnisse stellen immer Teilmengen des kartesischen Produkts zweier Tabellen dar. Mit der Join-Operation werden Beziehungen zwischen Tabellen (temporär) erstellt. Eine spezielle Verknüpfung ist der natürliche Verbund. Als Bedingung für das Zusammenfügen der Tabellen wird von allen gemeinsamen Attributen die gleichen Werte verlangt, d.h. tab1.attribx = tab2.attribx. Im Ergebnis wird nur eine der Join-Spalten aufgeführt, da ja ihre Werte identisch sind. Besteht zwischen den beiden Tabellen eine Fremdschlüsselbeziehung, so wird diese durch den natürlichen Verbund realisiert. Seit SQL:92 gibt es eine neue Syntax für die Verbundoperationen: SELECT <select-list> FROM <joined-table> <joined-table> ::= <cross-join> | <qualified-join> | (<joined-table>) <cross-join> ::= <table> CROSS JOIN <table> <qualified-join> ::= <table> [ NATURAL ] [ <join-type> ] JOIN <table> [ <join-spec> ] <join-type> ::= INNER | UNION | {LEFT | RIGHT | FULL} [OUTER] <join-spec> ::= ON <search-condition> | USING ( <join-column-list>) Beispiele: select * from bestellkopf natural join bestellpos; -- listet alle Bestellungen mit Positionen select * from bestellkopf join bestellpos using (bestellnr); -- Ergebnis wie oben select * from bestellkopf left outer join bestellpos; -- listet auch Bestellköpfe ohne Positionen select * from bestellkopf join kunden on (bestellkopf.kNr = kunden.nr) © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-7 Datenbank- und Informationssysteme Datenbankfunktionen ODMG ODMG Object Object Query Query Language Language (OQL) (OQL) u Designkonzepte u u u u u u u Basiert auf dem ODMG Objektmodell Interaktiv und eingebettete Sprache Syntax ist an SQL angelehnt (deskriptive Sprache) Abfrageresultat ist Element des Objektmodells ‚Orthogonale‘ Sprache Keine Änderungsoperatoren -> Änderungen nur über Methoden Beispiele u u u u Bild 3. -8 Define extent Veranstaltungen for Veranstaltung Select x.age from PersonExtent as x where x.name = ? Laux ? Select * from Veranstaltungen as v where v.lnkDozent = <OID> Select v from Veranstaltungen as v where v.lnkSemester.lnkStudGang.name = ?WI ? Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Die Object Query Language (OQL) ist die Abfragesprache für objektorientierte Datenbanken nach dem Objektmodell der ODMG. Sie kann interaktiv benutzt oder in einer Programmiersprache (eingebettet) verwendet werden. Die Syntax ist der von SQL ähnlich, d.h. sie ist deskriptiv (Sprache der 4. Generation). Das Ergebnis einer Abfrage kann wiederum abgefragt werden, da es Element des Objektmodells ist. Diese Eigenschaft wird als „Abgeschlossenheit“ bezeichnet. An jeder Stelle einer Abfrage ist ein beliebiger Ausdruck erlaubt, sofern sein Wert vom Typ her zulässig ist. Z.B. kann anstelle eines Extents (Menge von Objekten des gleichen Typs) wieder eine Abfrage stehen, da diese ebenfalls eine Objektmenge eines bestimmten Objekttyps liefert. Diese schöne und sehr flexible Eigenschaft nennt man „Orthogonalität“ weil ein Query-Ausdruck nicht von einem anderen abhängig ist. Das ist bei SQL nicht so, deshalb ist deren Definition auch viel umfangreicher - ca. 2000 Seiten gegenüber 40 Seiten bei OQL, wobei die formale Definition in EBNF nur 6 Seiten umfasst. OQL ist im Gegensatz zu SQL eine reine Abfragesprache. Änderungsoperationen können nur indirekt über Methoden durchgeführt werden. Dies hat den Vorteil, dass die Sprache einfach bleibt und die Konsistenzbedingungen in dem Methoden und nicht in der Sprachdefinition berücksichtigt werden müssen. Wenn die Objektidentität (OID) eines Objektes bekannt ist, kann Sie zur Selektion genau dieses Objektes verwendet werden. Die externe Darstellung dieser OID ist allerdings implementierungsabhängig. Für die Poet Datenbanken hat diese die externe Form (n:m-x#y, z), wobei n die Datenbanknummer darstellt, m-x ist die Identifikation (2x32bit), y ist die Blockadresse in der Datenbank und z die Identifikationsnummer für die Klasse zu der das Objekt gehört. Die Identifikation m-x eines Objektes ändert sich nie und wird auch nach dem Löschen des Objektes nicht wieder verwendet. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-8 Datenbank- und Informationssysteme Datenbankfunktionen OQL OQL Navigation Navigation u Pfadausdrücke u u u Undefinierte Werte u u u Eine Eigenschaft des NIL-Objektes hat immer den Wert UNDEFINED Wenn ein Ausdruck den Wert UNDEFINED in einer where-Klausel liefert, wird er wie FALSE behandelt. Methodenaufruf u u u N-1-Beziehungen können mit der Punkt-Notation navigiert werden. Bsp.: Vorlesung.lnkSemester.lnkStudGang.name N-M Beziehungen werden durch eine select-from-where Phrase abgefragt. Bsp.: select v.name from DozentExtent p, p.vlnkVeranstaltungen v where p.name = ? Laux ? Methoden können wie Eigenschaften behandelt werden (Ausnahme bei Namenskonflikt) Bsp.: Select p.age() from PersonExtent p Benannte Query u Bsp.: Define age(string x) as select p.age from Persons p where p.name = x; Bild 3. -9 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Ein wichtiger Unterschied zum Relationalen Modell sind die in der Datenbank gespeicherten Beziehungen. Damit kann man ohne Abfrage, quasi durch „Verfolgen“ eines Links von einem Objekt zum andern gelangen. Diese Navigation erfolgt in Form einer Punkt-Notation, wenn es sich um „zu-1“-Verbindungen handelt. Die Darstellung <Object>.<Object_ref> bedeutet, dass man ausgehend vom aktuellen <Object> sich über den Link <Object_ref> zum in Beziehung stehenden Objekt bewegt. Das ist möglich, da es sich um genau ein Objekt (evtl. das NIL-Objekt) handelt. Beispiel: 1..n 1 1..n 1 Veranstaltung Semester Studiengang lnkSemester lnkStudGang Name=„WI“ select v from VeranstaltungExtent v where v.lnkSemester.lnkStudgang.name = ? WI? Komplexe (N:M) Beziehungen können so nicht aufgelöst werden, da eine Auswahl aus mehren möglichen Verbindungen vorzunehmen ist. Die Beziehungsvariable kann wie ein Extent verwendet werden und die Auswahl erfolgt durch eine WHERE-Bedingung in der Abfrage. Damit können ein oder mehrere Objekte ausgewählt werden. 1..n 1 Beispiel: Dozent Veranstaltung vlnkVeranstaltungen name name =„Laux“ Select v.name from DozentExtent p, p.vlnkVeranstaltungen v where p.name = ? Laux? Parameterlose Methoden können syntaktisch wie Eigenschaften behandelt werden. Bei Namensgleichheit sind die Parameterklammern hinzuzufügen. Beispiele: select p.oldest_child.address.street from Persons p where p.lives_in(„Paris“); Hier sei oldest_child eine Methode ohne Parameter und lives_in eine Methode mit einem Parameter. Für jede Person p, welche in Paris wohnt, wird zum ältesten Kind navigiert und dessen Straße aus dem Adressfeld ermittelt. Falls die Objekte der Klasse Person ein Attribut namens oldest_child hätten, müsste die Methode als oldest_child() geschrieben werden, um eindeutig zu sein. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-9 Datenbank- und Informationssysteme Datenbankfunktionen OQL OQL Select-Expession Select-Expession (vereinfacht) (vereinfacht) u Select-From-Where u u u u u u u u Group-By u u u u Select [distinct] { * | set-variable | <path-expr> } from {<set-def>} [where <expression>] <path-expr> ::= name{.name} <set-def> ::= extent [as set-variable] | (<query>) <expression> ::= <predicate> [ {and|or} <predicate> ] <predicate> ::= <path-expr> { = | <> | < | … |[not] like } {literal | aggregate-funct | exists (query) | <prim-expr> } <prim-expr> ::= Elementarausdruck Bsp: select d.name from DozentExtent as d where d.fb = ? WI? <select-from-where-query> [group by <partition-list> [having <predicate>]] <partition-list> ::= {name:<expression>} Bsp: select dept, avg_sal: avg(select x.e.salary from partition x) from Persons e group by dept: e.deptno having avg_sal > 100000; Order-By u u Bild 3. -10 <select-from-where-query> [order by {path-expr} [ asc | desc ]] Bsp: select p from Persons order by p.age, p.name Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Eine OQL-Query ist optisch einer SQL-Query ähnlich. Eine Query hat daher die Form einer selectfrom-where Phrase, wobei die where-Klausel optional ist. Ebenfalls optional ist das Sortierkriterium. Die Semantik der OQL-Phrase deckt sich weitgehend mit SQL. Allerdings sind Join-Bedingungen für <set-def> mit Beziehungen zwischen den Extents überflüssig (siehe Beispiel auf der vorherigen Seite). Wenn Aggregate wie Mittelwert (avg()), Summe (sum()) oder Maximum (max()) gebildet werden, ist ein Gruppierungskriterium durch eine group-by-Liste anzugeben. Das Ergebnis einer Gruppierung kann mit einer having-Klausel weiter eingeschränkt werden. Beispiele: Select count(*) from VeranstaltungsExtent v where v.lnkDozent = PtRef (?(0:0-1601#4184, 101) ?); //Poet‘s <OID> Select d.age, count(*) from DozentExtent d group by v.age order by v.age; Die auf der Folie wiedergegebene Syntax ist vereinfacht und entspricht nahezu der OQLImplementierung von Poet. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-10 Datenbank- und Informationssysteme Datenbankfunktionen OQL OQL Sprachdefinition Sprachdefinition u Elementare Ausdrücke u u u u u Konstruktor-Ausdrücke u u u u Vordefinierte Datentypen, Konstante Benannte Objekte Iterator Variable z.B. Personen as Individuum Benannte Query z.B. age(? Laux ?) Person(name: ? Laux ?, age: 52) Struct (name: ? Laux ?, age: 52) Set (2, 3, 5, 7), list (2..7), bag(2,2,3,3,3) Operanden u u u Bild 3. -11 Unäre: +, -, abs, not Binäre: +, -, *, /, mod, =, <, <=, …, and, or String: + (Reihung), ? (belieb. Zeichen), * (belieb. String), like Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Untersuchen wir nun die Sprachdefinition von OQL etwas systematischer: Ein Query wird durch Ausdrücke (Pfad-, Mengen- und Prädikatenausdrücke siehe vorherige Seite) formuliert, welche die gesuchten Objekte beschreiben. Die Ausdrücke können rekursiv mit Operanden und Operatoren gebildet werden. OQL ist eine sogenannte „getypte“Sprache (typed language), d.h. die Ausdrücke und alle (Zwischen)Ergebnisse haben einen Typ. <operand> ::= [<unary_operator>] <operand> | <operand> <binary_operator> <operand> | <string_expression> <operand> ::= <elementary_expression> | <constructor_expression> //siehe Folie <string_expression> ::= <string_expression> {?|*|+} <string_expression> | <string> Elementare Ausdücke, aus denen Operanden gebildet werden können, sind Konstante, vordefinierte Datentypen, benannte Objekte oder Queries und Iteratorvariablen. Für die where-Klausel sind Konstruktor-Ausdrücke nützlich, um Vergleichsobjekte aufzubauen. Beispiel: select d from DozentExtent d where d = Dozent(age:50); © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-11 Datenbank- und Informationssysteme Datenbankfunktionen OQL OQL Operationen Operationen auf auf Kollektionen Kollektionen u Iteration in Kollektionen u u u u u Mengenoperationen u u u Das i-te Element extrahieren: list ( a, b, c, d) [2] (= c) Subkollektion extrahieren: list ( a, b, c, d) [1:3] (= list (b, c, d) ) Erstes oder letztes Element extrahieren: {first | last} (select-expression) Dictionary: aDict( {?Laux ?, 52}, {?Frick ?, 60}, …) aDict(? Laux ?) (= 52) Union, intersect, except (Differenz) Inklusion: <, <=, >, >= Konversion u u u u Bild 3. -12 Objekt aus Kollektion extrahieren element(select p from Persons p where p.name = ?Laux ?) Liste in Menge umwandeln: listtoset (list(1,2,3,2) (= set(1,2,3) Kollectionen reduzieren flatten(list(set(1,2,3), set(3,4), set(5))) (=set(1,2,3,4,5) Typumwandlung: (Person) dozent Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Die Ergebnisse einer Query sind Kollektionen von Objekten. Extents sind ebenfalls Kollektionen. Daneben gibt es Konstruktoren für Kollektionen. Um diese Kollektion zu durchlaufen oder einzelne Objekte darin zu lokalisieren, werden Iteratoren verwendet. Beispiele: first (select v from VeranstaltungExtent v where v.name =?Mathe?); liefert die erste Veranstaltung mit dem Namen „Mathe“ im Extent Veranstaltung element( select v from VeranstaltungExtent v where v.name = ?Mathe III?).noten[0]; liefert die erste Note (Index 0) für die Veranstaltung mit Namen „Mathe III“ (Singelton), wenn es genau eine gibt. Sei vorlesDict( {?WI124?,?Mathe I?}, {?WI456?,?Datenbanken?}, …) ein Dictionary mit Vorlesungsnummer-Vorlesungsnamen-Paaren. select v from VeranstaltungExtent v where v.name = vorlesDict[?WI124?]; liefert eine Kollektion von Veranstaltungen mit dem Namen „Mathe I“ Define praktika as select * from VeranstaltungExtent p where p.typ = ?Praktikum?; list (select * from (VeranstaltungExtent except praktika) as v)[0:9]; liefert die ersten zehn Veranstaltungen, die keine Praktika sind. Select (Person)* from DozentExtent d where d.age > 50; lieferst alle Dozenten, die älter als 50 sind als Personenobjekte. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-12 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.2 3.1.2 Graphische Graphische DB-Werkzeuge DB-Werkzeuge u zur Datenmanipulation graphische Gestaltung von u Eingabeformularen u Abfragen durch Beispiele (QBE, Query by Example) u Auswertungen (graphische Darstellung) u Listengestaltung u zur Datendefinition graphische Definition von u Datenobjekten (mit Hilfe von Entwurfsassistenten) u Datentypen über Auswahllisten u Beziehungen Bild 3. -13 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Besonders beliebt sind Anwenderwerkzeuge (end user tools) zur Gestaltung von einfachen Eingabemasken und zur Durchführung von Abfragen. Bei diesen Werkzeugen wird dem Benutzer eine Auswahl von Tabellen angeboten, für die er eine Maske gestalten oder eine Abfrage generieren kann. Numerische Ergebnisse können für die Anzeige graphisch aufbereitet werden. Für die Definition von Datenbankobjekten bieten sogenannte Assistenten Standardvorschläge an, die der Benutzer für seine Bedürfnisse anpassen kann. Andere Produkte listen alle verfügbaren Datentypen auf. Die Datenbankstruktur lässt sich dann aus diesen mittels Drag-and-Drop zusammensetzen. Die Beziehungen zwischen den Objekten können mit der Maus "gezeichnet" werden. Die folgende Folie zeigt das Ergebnis einer solchen graphischen Datenbankdefinition. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-13 Datenbank- und Informationssysteme Datenbankfunktionen 3.1.2 3.1.2 Beispiel: Beispiel: MS MS Access Access 7.0 7.0 u graphischer Datenbankentwurf (Bachman Diagramm) Bild 3. -14 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Dieses Relationendiagramm (Bachman Diagramm) zeigt die Datenbankstruktur für unser Beispiel Projektverwaltung aus Kap. 2.4. Zu erkennen sind an der linken und rechten Seite die Tabellen für die Mitarbeiter und die Projekte. In der Tabelle in der Mitte werden die Stunden erfaßt. Über die Fremdschlüssel PersNr und ProjNr der Tabelle Stunden werden die Beziehungen zu Mitarbeiter und Projekte hergestellt. Die Beziehungen zeigen, daß ein Stundeneintrag sich auf genau einen Mitarbeiter und ein Projekt bezieht. Ohne Eintrag in die Tabelle Stunden ist keine Projektzuordung von Mitarbeitern möglich. Wir können in diesem Modell eine Zuordnung hilfsweise so darstellen, daß ein Eintrag mit 0 Stunden gemacht wird. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-14 Datenbank- und Informationssysteme 3.1.3 3.1.3 Datenbankfunktionen Data Data Dictionary Dictionary u Metadatenbank (Informationen über die gespeicherten Daten und ihre Struktur). u Tools für die verschiedenen Benutzerklassen. Controller Controller Ta sks are tw Sof Sch em ata Daten en tur uk Str DB-Administrator DB-Administrator Projektleiter Projektleiter Datenkatalog (DD) Analytiker Analytiker Bild 3. -15 Benutzer Datenbank- und Informationssysteme Programmierer Programmierer (c) Sep-02 Prof. Dr. F. Laux Ein Data Dictionary (Datenkatalog ) beschreibt Informationen über Objekte (Daten, Datenbankprogramme, Benutzer, Jobs) eines Datenbanksystems. Es enthält also Metainformationen, d.h. 'Daten über Daten'. Aus Sicht eines Datenbanksystems stellt der Datenkatalog (D.) eine Metadatenbank dar, in der die Schemata des Datenbanksystems verwaltet werden und diese Information den Benutzern zur Verfügung gestellt wird. Dient er nur der Beschreibung oder Dokumentation von Objekten, wird er als 'passiv' bezeichnet. Wenn daraus auch Dateien, Datenstrukturen, Programme (z.B. Abfragen) oder Jobs generiert werden, spricht man von einem 'aktiven' D. Ein Datenkatalog kann als eigenständiges Softwaresystem realisiert sein. In diesem Fall enthält er häufig Informationen über mehrere Datenbanksysteme, Dateien, Programme und Hardwarekomponenten eines Computernetzwerks. Die Begriffe Repository, Directory System (Verzeichnissystem) werden verwendet, wenn der D. eine Komponente besitzt, in welchem die Speicherorte und Zugriffspfade der Objekte (Daten, Programme, Benutzer, Jobs) abgelegt sind. Der D. stellt ein nützliches, zentral verwaltetes Hilfsmittel für Datenbankadministratoren, Projektleiter, Systemanalytiker, Programmierer, EDV-Controller und andere Benutzer dar. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-15 Datenbank- und Informationssysteme 3.2.1 3.2.1 Datenbankfunktionen Datenintegrität Datenintegrität Unter Datenintegrität versteht man alle Maßnahmen, welche die Korrektheit und Aktualität der Daten gewährleisten. Eingabe DB-System Konsistenz Ausgabe Datenschutz Datensicherheit u Die Datenintegrität beinhaltet 3 Aspekte: u u u Bild 3. -16 Datenkonsistenz: Maßnahmen zur Kontrolle der Dateneingaben Datensicherheit: Maßnahmen zur Sicherstellung des Dauerbetriebs Datenschutz: Maßnahmen zum Schutz der Datenverwendung Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Unter Datenintegrität versteht man die ständige Aktualität, Korrektheit, Verfügbarkeit und kontrollierte Verwendung des Datenbestandes eines Datenbanksystems. Sie beinhaltet alle Maßnahmen zur Sicherstellung von Datenkonsistenz, Datensicherheit und Datenschutz. Diese Aufgaben werden durch das Datenbankverwaltungssystem wahrgenommen. Die Konsistenz der Daten wird mit Hilfe von Konsistenzbedingungen (KB) definiert. Sie werden als logische Aussagen formuliert, die in bestimmten Situationen erfüllt sein müssen (z.B. zum Transaktionsende). Die Festlegung, was sachlich und logisch richtig ist, wird bei der Definition einer Datenbank von Datenbankverwalter festgelegt. Wir unterscheiden zwei Arten von Konsistenzbedingungen: • primäre KB sind bei jeder Elementaroperation (Einfügen, Löschen, Ändern) einzuhalten • sekundäre KB müssen zum Abschluß einer Transaktion (siehe 3.2.2) erfüllt sein Beispiele : primäre KB: die Matrikelnummer identifiziert einen Studenten eindeutig, das Gehalt muß größer null (> 0) sein, der Status einer Heizung kann 'in Betrieb', 'ausgeschaltet' oder 'Störung' sein sekundäre KB: die Summe der Beträge einer Buchhaltungstransaktion ist null (= 0), ein Auftrag umfaßt mindestens eine Position, der Bestellwert muß mindestens 100 DM betragen Datensicherheit ist das Ziel aller Maßnahmen gegen den Verlust oder die Verfälschung von Daten. Datenbanksysteme enthalten deshalb Komponenten zur Datensicherung und Wiederherstellung (Recovery) von Daten. Wird die Datensicherheit verletzt, so zieht dies neben dem realen Schaden (Verlust der Daten) in der Regel weiteren wirtschaftlichen Schaden (Kosten, Ertragsausfall) nach sich. Die Datenschutzgesetze regeln die Verwendung und Weitergabe von personenbezogenen Daten. Sie werden durch das Datenbanksystem auf technischer Ebene durch eine Identifizierung der Benutzer, durch Zugriffsbeschränkungen und durch Zugriffsprotokolle unterstützt. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-16 Datenbank- und Informationssysteme Datenbankfunktionen 3.2.2 3.2.2 Transaktion Transaktion u Eine Folge von Elementaroperationen, welche als Einheit behandelt wird, heißt Transaktion (TA), wenn dabei die Konsistenz der DB erhalten bleibt. u Elementaroperationen: Einfügen, Ändern, Löschen, Lesen u Folgerungen: eine TA besitzt die ACID-Eigenschaften (atomar, konsistent, isoliert, dauerhaft) Elementaroperationen festgeschriebene TA (commit) verboten abgebrochene TA (rollback) Zeit Bild 3. -17 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Eine TA wird durch 4 Transaktionsregeln (ACID = atomic, consistent, isolated, durable) hinreichend beschrieben: sie muß 1. als eine Einheit durchgeführt werden, d.h. unteilbar (atomic) sein (Alles-oder-nichts Prinzip), 2. alle Konsistenzbedingungen einhalten (consistent), 3. während der Durchführung gegenüber anderen Transaktionen/Benutzern abgeschirmt (isolated) werden, damit keine Seiteneffekte auftreten (d.h. serialisierbar sein (3.3.2)) und 4. sie muß dauerhaft (durable) gespeichert werden, auch im Falle eines Fehlers. Aus den Transaktionseigenschaften folgt: Eine TA überführt eine vorher konsistente DB in einen neuen konsistenten Zustand. Beispiel: Betrachten wir die Transaktion Auftrag erfassen einer relationalen Datenbank mit den Tabellen Auftr_kopf, Auftr_Pos, Artikel und Kunde. Folgende KB sind dabei einzuhalten: 1. Für den Preis eines Artikels in einem Auftrag kann max. 10% Nachlaß gegenüber dem Listenpreis in Tabelle Artikel gewährt werden. 2. Die Auftragsmenge einer Positionen muß > 0 sein. 3. Eine Auftragsnummer ist eindeutig, d.h. identifiziert einen Auftrag. 4. Es können nur Artikel aus dem Artikelstamm (Tabelle Artikel) bestellt werden. 5. Der Kunde eines Auftrags muß im Kundenstamm (Tabelle Kunde) existieren. 6. Ein Auftrag umfaßt mindestens eine Auftragsposition. ÜA: Welche KB in o.g. Beispiel sind primär und welche sekundär ? © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-17 Datenbank- und Informationssysteme Datenbankfunktionen 3.2.3 3.2.3 Der Der Transaktionsmechanismus Transaktionsmechanismus u Um das TA-Konzept zu verwirklichen, muß u eine explizite Bestätigung (commit) oder u eine vollständige Annulation (rollback) durchgeführt werden u Die Mechanismen, welche im Fehlerfall angewandt werden, sind: u REDO : Operation wiederholen u UNDO : Operation rückgängig machen u Beide Funktionen sind idempotent, d.h. REDO(x) = REDO(REDO(x)) bzw. UNDO(x) = UNDO(UNDO(x)) Bild 3. -18 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Der Transaktionsmechanismus hat die Aufgabe, die Transaktionsregeln (ACID) in jeder Situation zu erfüllen. Dadurch wird sichergestellt, daß die Datenbasis nur konsistente Zustände annimmt. Damit eine TA als Einheit behandelt werden kann, muß die Anwendung oder der Benutzer das Ende der TA explizit markieren. Dies geschieht durch eine Bestätigung (commit) mit der die Änderungen festgeschrieben werden. Im Fehlerfall wird eine vollständige Rücknahme aller Änderungen durchgeführt (rollback). Dies kann auf Grund einer Konsistenzverletzung durch das DB-Management selbst erfolgen (backout) oder durch den Anwender absichtlich herbeigeführt werden (abort).Wenn ein Systemfehler auftritt, ist nicht sicher, welche Operationen noch durchgeführt werden konnten und welche nicht. Um diese Unsicherheit zu beheben, sind zwei Grundfunktionen (primitives) notwendig: UNDO und REDO. Damit kann ohne Seiteneffekt eine Operation wiederholt oder rückgängig gemacht werden. Hinweis: UNDO und REDO weichen in ihrer Funktionsweise von den entsprechenden Funktionen eines Texteditors ab. Das Transaktionsmanagement hat über den Transaktionsmechanismus hinaus insgesamt folgende Aufgaben: 1. die Verwaltung der Arbeits- und Massenspeicher, 2. die Protokollierung (Transaktionslog), 3. die Synchronisation paralleler Transaktionen (siehe 3.3), 4. die Behandlung von Verklemmungen, 5. die Überprüfung der Konsistenzbedingungen (KB) und 6. gegebenenfalls eine Fehlerbehandlung vorzunehmen. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-18 Datenbank- und Informationssysteme Datenbankfunktionen 3.2.4 3.2.4 Zwei-Phasen Zwei-Phasen Commitment Commitment (2PC) (2PC) u Für ein verteiltes Datenbanksystem oder ein System mit mehreren Prozessen ist es notwendig, daß alle Prozesse die gleiche Entscheidung über die TA treffen. Das 2PC-Protokoll stellt eine einheitliche Entscheidung sicher. w(prepare) Koordinator w(global-decision) prepare (andere Teiln.) w(complete) globalcommit/ abort ack ready/ abort Teilnehmer w(x) = schreibe x ins Journal Bild 3. -19 w(ready/abort) 1. Phase (vote) Datenbank- und Informationssysteme w(global-commit/abort) 2. Phase (decision) (c) Sep-02 Prof. Dr. F. Laux Das erfolgreiche Ende einer Transaktion wird durch eine Festschreibephase (Commitment = Verpflichtung) markiert. In dieser Phase wird eine bestimmte Folge von Nachrichten an die beteiligten Prozesse verschickt (Protokoll), um sicherzustellen, daß alle die gleiche Entscheidung treffen, damit die Transaktion entweder vollständig oder überhaupt nicht durchgeführt wird. Ein bekanntes Protokoll ist das Zwei-Phasen-Freigabeprotokoll (2-Phase-Commitment Protocol, 2PC). In der ersten Phase (Abstimmung) werden alle beteiligten Prozesse abgefragt, ob sie die Transaktion erfolgreich abschließen können. Wenn dies für alle Prozesse der Fall ist, wird in der zweiten Phase (Entscheidung) die Transaktion festgeschrieben. Der Ablauf des 2PC wird protokolliert, so daß im Fehlerfall der Ablauf rekonstruiert und nach der Behebung des Fehlers die TA zum Abschluß (commit oder abort) geführt werden kann. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-19 Datenbank- und Informationssysteme 3.3.1 3.3.1 u Datenbankfunktionen Parallele Parallele Datenzugriffe Datenzugriffe Serialisierungstechniken u Sperre (Zwei-Phasen, Prädikate) u Zeitstempel u optimistische Verfahren Transaktion 1 Transaktion 2 paralleler Zugriff Bild 3. -20 Datenbank- und Informationssysteme Zeit (c) Sep-02 Prof. Dr. F. Laux Die Steuerung paralleler Datenzugriffe ist ein wichtiger Aspekt eines Datenbanksystems, damit viele Benutzer gleichzeitig und verzögerungsfrei mit den Daten arbeiten können. Parallelität ist dann möglich, wenn die Transaktionen serialisierbar (Def. siehe 3.3.2) sind. Sperrverfahren werden bei zentralen DBS am häufigsten eingesetzt. Dabei werden konfliktbehaftete TA nacheinander ausgeführt. Dadurch wird vermieden, daß inkonsistente Zwischenzustände von anderen Transaktionen gesehen werden oder nicht serialisierbare Ergebnisse erzeugt werden. Beispiel: Zwei Transaktionen, T1 und T2 wollen den Preis eines Artikels um 10% bzw. 20% erhöhen. Dies ist nicht gleichzeitig möglich, da beide TAs den gleichen Ausgangspreis lesen. Ohne Serialisierung geht eine Transaktion verloren. (welche?) Ein geeignetes Sperrverfahren (z.B. 2PL, Kap. 3.3.3) stellt sicher, daß die Transaktionen serialisierbar sind. Der Nachteil dabei ist, daß Verklemmungen (Deadlocks, vgl. Kap. 4.3.4) auftreten können, die zum Rollback einer der beteiligten TA führen muß, obwohl sonst keine Fehlersituation vorliegt. Zeitstempel und optimistische Verfahren vermeiden Verklemmungen und sind deshalb besonders für verteilte Datenbanken geeignet (vgl. Kap. 4.3.5). Die geringe Verbreitung dieser Verfahren ist darauf zurückzuführen, daß die Behandlung von Konfliktsituationen schwieriger ist und das System bei zu vielen Konflikten zur Instabilität neigt. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-20 Datenbank- und Informationssysteme 3.3.2 3.3.2 Datenbankfunktionen serialisierbare serialisierbare Zugriffe Zugriffe u Def: Seien {T1, T2, Tn} n TAs, welche simultan ausgeführt werden. Die Ausführung heißt genau dann 'serialisierbar', wenn es eine Folge der TAs gibt, welche das gleiche Ergebnis liefert. u Ti gleichzeitig ausgeführt Transaktion 1 T1 T2 T3 T1 Transaktion 2 T1 T2 T2 T3 Transaktion 3 Transaktion n Tn Ti nacheinander ausgeführt T3 .... Tn Tn Datenbank- und Informationssysteme Bild 3. -21 (c) Sep-02 Prof. Dr. F. Laux Zur Illustration der Definition seien folgende Transaktionen gegeben: T1: liest den Preis von Artikel Nr. 12345. T2: ändert den Preis von Artikel Nr. 12345. T3: Summiert die Preise aller Artikel. Beispiel einer serialisierbaren Ausführung (Schedule) : Die zeitgleiche Ausführung der Transaktionen ist serialisierbar, wenn alle TAs erfolgreich sind und sie eines der folgenden Resultate liefern: (Notation: T1,T2,T3 = auf T1 folgt T2 und dann T3) T1, T3, T2, oder T2, T1, T3, oder T1, T2, T3, oder T3, T2, T1. Die restlichen 2 Möglichkeiten sind mit einer der vorgenannten äquivalent. Beispiel einer nicht serialisierbaren Ausführung (Schedule) : Wenn T1 den durch T2 geänderten Artikel 12345 liest und T2 danach annulliert wird. T1 liefert in diesem Fall ein falsches Ergebnis (das nie existiert hat). ÜA: Ist die folgende Situation serialisierbar? T3 liest den Preis, bevor T2 ihn ändert, beendet aber erst nach Abschluß von T2 die Summation. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-21 Datenbank- und Informationssysteme Datenbankfunktionen 3.3.3 3.3.3 Zwei-Phasen Zwei-Phasen Sperrverfahren Sperrverfahren (2PL) (2PL) u u u u u Eine Sperre dient dazu, Konfliktsituationen zu vermeiden Nur konfliktfreie Operationen dürfen gleichzeitig ausgeführt werden Das 2PL garantiert die Serialisierbarkeit von Transaktionen Phase 1 (Wachstum): Sperren besorgen (LOCK); Phase 2 (Schrumpfung): Sperren freigeben (UNLOCK) Um sicherzustellen, daß 'COMMIT' oder 'ROLLBACK' jederzeit möglich ist, müssen die Sperren bis zum Schluß beibehalten werden. Verträglichkeit von DB-Operationen T1\T2 READ WRITE READ P O WRITE O O Verlauf einer 2-Phasen-Sperre rollback evtl. nicht möglich commit/ Anzahl der ge- rollback sperrten Elemente 1. Phase (Wachstum) Bild 3. -22 Datenbank- und Informationssysteme 2. Phase (Schrumpfung) (c) Sep-02 Prof. Dr. F. Laux Eine Möglichkeit zur Synchronisation paralleler Transaktionen sind Sperrverfahren. Die Serialisierbarkeit wird durch das Zwei-Phasen-Sperrprotokoll (two phase locking, 2PL) gewährleistet, welches besagt, daß innerhalb einer Transaktion (TA) nach Freigabe einer Sperre keine neue mehr angefordert werden darf. Werden alle Sperren bis zum Abschluß gehalten, so kann die TA jederzeit zurückgesetzt werden. Wenn alle Sperren schon zu Beginn besorgt werden (preclaiming), kann es keine Verklemmung geben. Allerdings ist zu Transaktionsbeginn oft nicht klar, welche Sätze gesperrt werden müssen. Sperrbereiche können durch die Angabe einer Adresse, des Identschlüssels, einer Tabelle, etc. oder durch Prädikate (logische Aussage mit Parametern) festgelegt werden, z.B. alle Sätze, für die das Prädikat Kunde = "Maier" den Wert TRUE hat. Durch die Sperre eines Datenbereiches werden andere TA davon abgehalten, diesen zu benutzen oder gar zu verändern. Je kleiner der gesperrte Bereich (Sperrgranularität) ist, desto größer ist die Wahrscheinlichkeit, daß andere TA unbehindert durchgeführt werden können. Übliche Sperreinheiten sind Datensätze, Tupel, Dateien, Relationen oder die ganze Datenbasis. Im letzteren Fall hat nur eine TA Zugriff auf die Datenbank (z.B. für die Wiederherstellung (Kap. 3.4.3) oder zur Restrukturierung der Datenbank). Datenbereiche können exklusiv (Lese- und Schreibsperre) oder nur zum Lesen (shared, Lesesperre) gesperrt werden. Nur Lesesperren sind miteinander verträglich. Sperren müssen explizit vom Datenbankmanagementsystem angefordert werden, da der Sperrtyp von der beabsichtigten Folge von DB-Operationen abhängt. Es gibt sogar Fälle bei denen Daten gesperrt werden müssen, die von der Transaktion weder gelesen noch geschrieben werden. Beispiel: Während einer Auftragserfassung muß sichergestellt werden, daß der Artikelstamm sich nicht ändert. Insbesondere dürfen keine Artikel gelöscht werden. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-22 Datenbank- und Informationssysteme Datenbankfunktionen SQL SQL Transaktionsmanagement Transaktionsmanagement u Transaktionsbefehle u u u u { start|set } transaction {isolation level <isolation level> | <access mode> | diagnostic size <aValue> } [ savepoint <aName> ; [ release savepoint <aName> ]] { commit | rollback } [work] Transaktionsmodi u Isolation level u u Access mode u u Read uncommitted | read committed | repeatable read | serializable Read only | read write Transaktionen und Konsistenzbedingungen u u Primäre KB : set constraints <constraint-list> immediate Sekundäre KB: set constraints <constraint-list> deferred Bild 3. -23 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Die Konsistenzstufen sind bei SQL durch bestimmte unerwünschte Erscheinungen definiert. Ein ‚dirty read‘ bezeichnet eine Situation, bei der eine TA1 einen Wert liest, der von einer TA2 geschrieben, aber nicht festgeschrieben (committed) wurde. Das bedeutet, dass evtl. ein inkonsistenter Wert gelesen und verwendet wird. Als ‚nonrepeatable read‘ bezeichnet eine Situation, in der eine TA1 einen Wert liest, der während des TA1-Verlaufes geändert wird, so dass bei einem wiederholten Lesen, der Wert nicht mehr derselbe ist. Ein ‚phantom read‘ Phänomen tritt auf, wenn eine TA1 eine Query ausführt der bei seiner Wiederholung andere Zeilen und damit eine andere Wertemenge liefert. Die folgende Tabelle zeigt die Konsistenzstufen (Isolation levels) und die sie definierenden Phänomene: Level Dirty read Nonrepeatable read phantom Read uncommitted Möglich Möglich Möglich Read committed Unmöglich Möglich Möglich Repeatable read Unmöglich Unmöglich Möglich serializable Unmöglich Unmöglich Unmöglich Hinweis: Die verwendeten Schlüsselwörter für die Konsistenzstufen sind teilweise irreführend, da sie die Situation nicht korrekt charakterisieren. Z.B. repeatable read heisst nicht, dass eine Query innerhalb einer TA immer das selbe Ergebnis liefern muss. Wenn neue Sätze eingefügt oder Daten so geändert werden, dass sie das Selektionskriterium nicht mehr erfüllen, kann eine Wiederholung der Query ein anderes Ergebnis liefern. Der von der Query gelesene Wert einer Zeile bleibt jedoch unverändert. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-23 Datenbank- und Informationssysteme Datenbankfunktionen 3.4.1 3.4.1 Typisierung Typisierung der der DB-Fehler DB-Fehler u Welche Fehlertypen bedrohen den Betrieb und die Verwaltung einer Datenbank? Applikation u Zugriffsfehler DBMS -> Reaktion d. Appl.: Abort u Transaktionsfehler Betriebssystem -> Reakt. d. DBS: Backout u Systemfehler DB -> R. DBA/DBS: Rollback u Speicherfehler -> Reakt. d. DBA/DBS: Roll Forward Bild 3. -24 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Beim Betrieb eines Datenbanksystems können Fehler auftreten, welche die Datenkonsistenz und die Dauerhaftigkeit von Transaktionen verletzen. Geben wir für jeden Fehlertyp ein Beispiel: Zugriffsfehler: fehlende Daten, fehlerhafte Operation Lösung: fehlende Daten eingeben, Operation wiederholen oder TA durch die Applikation zurücksetzen (abort) Transaktionsfehler: Programmierfehler, Verklemmung (Deadlock) Lösung: TA durch DBMS zurücksetzen (backout) Systemfehler: Datenbank- oder Betriebssystemfehler, Stromausfall (ohne Speicherfehler) Lösung: Neustart des Systems mit Zurücksetzen (rollback) aller nicht beendeten TAs (automat. Wiederherstellung durch das DBMS) Speicherfehler: Systemfehler mit Schreibfehler auf dem Massenspeicher, Beschädigung der Festplatte (z.B. head crash) Lösung: Speicher reparieren, konsistenten Datenbestand restaurieren (mit Hilfe einer Datensicherung), Wiederherstellung aller TAs seit der letzten Datensicherung mit Hilfe des TA-Protokolls (roll forward) Alle Transaktionen, die zum Fehlerzeitpunkt nicht festgeschrieben (commited) waren, müssen neu eingegeben werden. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-24 Datenbank- und Informationssysteme 3.4.2 3.4.2 u u Datenbankfunktionen Datensicherheit Datensicherheit Wie kann die Datensicherheit erhöht werden? Lösung: redundante Datenhaltung durch u Datensicherung : u Journal : ständig (Plattenspiegelung) in Intervallen (Kopie der Daten) Protokoll der Transaktionen vor (before image) und nach (after image) einer Modifikation T1 T2 ... Journal Datensicherung T1, T2, ... automatische Recovery Bild 3. -25 Tn DB Manuelle Recovery Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Datensicherheit (D.) ist das Ziel aller Maßnahmen gegen den Verlust oder die Verfälschung von Daten. Datenbanksysteme enthalten deshalb Komponenten zur Wiederherstellung (Recovery) von Daten. Wird die D. verletzt, so zieht dies neben dem realen Schaden (Verlust der Daten) in der Regel weitere wirtschaftliche Konsequenzen (Kosten, Ertragsausfall) nach sich. Ein Datenverlust entsteht als Ergebnis einer Beschädigung des Datenträgers (Hardwarefehler) oder eines ungewollten bzw. unberechtigten Löschvorgangs. Datenverfälschungen können durch unberechtigte Verarbeitung, konkurrierende Zugriffe oder Programm- und Systemfehler zustande kommen. Da reale Systeme nicht absolut zuverlässig sind, versucht man durch 1. Datenredundanz, 2. organisatorische Maßnahmen und 3. gebäude- und gerätetechnische Maßnahmen die Wahrscheinlichkeit von Datenverlusten oder Verfälschungen zu reduzieren. Datenredundanz kann permanent oder zu bestimmten Zeitpunkten (Datensicherung, siehe Bild 3-20 ) hergestellt werden. Ständige Redundanz ergibt sich z.B. durch die spiegelbildliche Speicherung der Daten auf zwei unabhängigen Datenträger (Plattenspiegelung, shadowing, mirroring) oder durch Protokollierung der Transaktionen (Transaktionslog, Journal). Gebäudetechnische Maßnahmen, wie geographische Verteilung der Anlagen, Zutrittskontrolle etc. sind dazu geeignet, sich gegen Sabotage und Naturkatastrophen abzusichern. Fehlertolerante Geräte (z.B. Hardware mit Prüfziffern zur Fehlererkennung und Korrektur, unterbrechungsfreie Stromversorgung) können die Verfügbarkeit von Informationssystemen wesentlich erhöhen. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-25 Datenbank- und Informationssysteme Datenbankfunktionen 3.4.2 3.4.2 Strategien Strategien der der Datensicherung Datensicherung u vollständige Datensicherung u u differentielle Datensicherung u u komplette Sicherung der Datenbasis (Vollsicherung) Kopie aller Modifikationen seit der letzten Vollsicherung inkrementelle Datensicherung u Kopie aller Modifikationen seit der letzten Datensicherung differentielle Datensicherung Zeit Vollsicherung Bild 3. -26 inkrementelle Datensicherung Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Die wichtigste und häufigste vorbeugende Maßnahme zur Datensicherheit ist die Datensicherung. Eine Systematisierung kann nach folgenden technischen Gesichtspunkten erfolgen: 1. physische Kopie (struktur- und mediumsabhängig, engl. dump) 2. logische Kopie (struktur- und mediumsunabhängig, engl. export) Eine physische Kopie erlaubt die Wiederherstellung nur auf einem gleichartigen Datenträger, während die logische Kopie auch zur Umstrukturierung und Übertragung auf andere Datenbanksysteme verwendet werden kann. Die Strategie zur Erstellung von Sicherungskopien ist abhängig von der Sicherungstiefe (Anzahl Versionen), vom Aufwand für die Sicherungsmaßnahme und für die Wiederherstellung. Für die Datensicherung sind geeignete Verfahrensabläufe (wer, wann, welche Daten sichert) festzulegen, durch Kontrollen zu überprüfen und vorsorgliche Regelungen zur Wiederherstellung zu treffen. Zur Verringerung des Aufwandes und Speicherbedarfs werden Teilsicherungen eingesetzt. Ausgehend von der letzten Vollsicherung werden alle seit diesem Zeitpunkt geänderten Daten gesichert (differentielle Sicherung) oder es werden nur die seit der jeweils letzten Teilsicherung geänderten Daten gesichert (inkrementelle Sicherung). Für die Wiederherstellung der Daten sind bei der differentiellen Sicherung die Vollsicherung und die letzte Teilsicherung erforderlich; bei der inkrementellen Sicherung sind hingegen alle Teilsicherungen seit der letzten Vollsicherung erforderlich. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-26 Datenbank- und Informationssysteme 3.4.3 3.4.3 u Datenbankfunktionen Recovery Recovery Prozeduren Prozeduren Wiederherstellung eines konsistenten Zustandes im Fall u eines Systemfehlers u u ROLLBACK der Transaktionen mit Hilfe des Journals beim Neustart eines Speicherfehlers u u Reparatur des Speichers, letzte Datensicherung einspielen ROLL FORWARD der Transaktionen mit Hilfe des Journals TA 1 TA 6 TA 2 abgebrochene Transaktionen TA 4 TA 3 TA 5 TA 7 Zeit Datensicherung ROLL FORWARD Bild 3. -27 System- oder Speicherfehler letzter konsist. Zustand ROLLBACK Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux In Abhängigkeit von der Fehlersituation kann die Wiederherstellung durch eine Vorwärtsrekonstruktion (roll forward) oder ein Zurücksetzen (rollback) erfolgen. Rollback: Wenn die physische Konsistenz der Daten durch einen Fehler nicht verletzt wurde, kann die logische Konsistenz wiederhergestellt werden, indem schrittweise die betroffenen Transaktionen rückgängig gemacht werden. Dies kann dadurch geschehen, daß der Zustand vor Beginn der letzten Transaktion (before image) aus dem Transaktionslog ermittelt wird und in die Datenbank geschrieben wird. Roll Forward: Ist die physische Konsistenz der Datenbank verletzt oder der Datenträger unbrauchbar geworden, so muß nach der Reparatur des Datenträgers die Datenbank neu angelegt werden und die Datensicherung eingespielt werden. Damit ist wieder ein logisch konsistenter, aber noch kein aktueller Zustand der Datenbank, erreicht. Durch ein Nachfahren aller erfolgreichen Transaktionen seit der letzten Datensicherung erhält man wieder den aktuellen Zustand der Datenbank unmittelbar vor dem Fehlerzeitpunkt. Die dazu notwendigen Informationen über die Endzustände der einzelnen Transaktionen (after image) können ebenfalls aus dem Transaktionslog entnommen werden. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-27 Datenbank- und Informationssysteme Datenbankfunktionen Literatur Literatur zu zu Kapitel Kapitel 33 u Korth, Silberschatz : Database System Concepts, Mc Graw Hill 1991 u C. J. Date : An Intro. to Database Systems, Vols 1 & 2, Addison-W. 1995 u Gray, J., Reuter, A.: Transaction processing, Morgan Kaufmann, 1993 Bild 3. -28 Datenbank- und Informationssysteme (c) Sep-02 Prof. Dr. F. Laux Alle genannten Bücher sind in unserer Bibliothek vorhanden. © Sep-2002, F. Laux, Wirtschaftsinformatik, FH Reutlingen 3-28