12. Views und Datenbankverwaltung • Views • Änderungen in Views

Werbung
12. Views und Datenbankverwaltung
• Views
• Änderungen in Views
• Organisation der DB
• Zugriffsrechte
Datenbanksysteme
Prof. Dr. Stephan Kleuker
282
Sichtkonzept (Views 1/2)
• Sicht (View): mit eigenem Namen bezeichnete, aus
Basisrelation abgeleitete, virtuelle Relation (ViewName wie Tabellen-Name verwendbar)
• Views sind das Ergebnis einer Anfrage, auf dem
weitere Operationen durchgeführt werden können
• Views können jedes mal neu erzeugt werden oder
nur einmal und dann gespeichert (materialized view)
• Gespeicherte Views müssen nach jedem Update der
Basisrelationen geändert werden
• Wir betrachten keine materialized Views
• Korrespondenz zum externen Schema bei ANSI
SPARC (Benutzer sieht jedoch mehrere Views und
Basisrelationen)
Datenbanksysteme
Prof. Dr. Stephan Kleuker
283
Sichtkonzept (Views 2/2)
CREATE VIEW Germany AS
SELECT name, population
FROM City
WHERE Country='D'
• Vorteile
– Erhöhung der Benutzerfreundlichkeit (z.B.
Verbergen komplexer Joins in einer View)
– Datenschutz
• Löschen eines Views
DROP VIEW Germany
Datenbanksysteme
Prof. Dr. Stephan Kleuker
284
View-Update-Problem
• Änderungsoperationen auf Sichten erfordern, dass
zu jedem Tupel der Sicht zugrunde liegende Tupel
der Basisrelationen eindeutig identifizierbar sind
• Sichten auf einer Basisrelation sind nur änderbar,
wenn der Primärschlüssel in der Sicht enthalten ist
• Wenn Tupelanteile bei INSERT eindeutig auf die
darunter liegenden Basisrelationen abgebildet
werden können, könnten fehlende Werte durch NULL
aufgefüllt werden (Constraints sind zu beachten)
[Allerdings, in Oracle grundsätzlich keine
Veränderung auf zusammengesetzten View möglich]
Datenbanksysteme
Prof. Dr. Stephan Kleuker
285
Problemquellen bei Views
1. Zeilen löschen, wenn der View Gruppenfunktionen
(z.B. COUNT), GROUP BY oder DISTINCT enthält oder
in der View-Definition WITH READ ONLY steht
2. Zeilen ändern, wenn 1. oder es berechnete Spalten
(z.B. A+B) gibt
3. Zeilen hinzufügen, wenn 1. oder 2. oder es in den
Basistabellen eine Spalte mit NOT NULL gibt, die
nicht im View liegt
Hinweis: Infos, was man in Oracle darf, erhält man mit
SELECT * FROM USER_UPDATABLE_COLUMNS;
Datenbanksysteme
Prof. Dr. Stephan Kleuker
286
Beispiel: View-Probleme
R
A B
- a b
x b
S
B C
- b c
b z
RS
A B C
- - a b c
x b c
a b z
x b z
CREATE VIEW RS AS
SELECT A, R.B, C
FROM R, S
WHERE R.B=S.B;
• Löschen von (a,b,c) führte zum Verlust von
(a,b,z)
• alleiniges Ändern von (a,b,c) nach (a,b,d) geht
nicht
• Einfügen von (a,b,d) ebenfalls
Datenbanksysteme
Prof. Dr. Stephan Kleuker
287
Aktualisierung von Views
• Tupel können durch Update aus dem Wertebereich
des Views hinausfallen
• Views häufig verwendet, um den "Aktionsradius"
eines Benutzers einzuschränken
• Verlassen des Wertebereichs kann durch WITH
CHECK OPTION verhindert werden:
CREATE OR REPLACE VIEW UScities AS
SELECT *
FROM City
WHERE City.Country = 'USA'
WITH CHECK OPTION;
Datenbanksysteme
Prof. Dr. Stephan Kleuker
288
Beispiel: WITH CHECK OPTION
A
B
CREATE TABLE XX(
A NUMBER, B NUMBER, C NUMBER, ---------- ---------1
2
PRIMARY KEY(A));
2
1
INSERT INTO XX VALUES(1,2,3);
INSERT INTO XX VALUES(2,1,3);
A
B
INSERT INTO XX VALUES(3,4,3);
---------- ---------2
1
CREATE OR REPLACE VIEW V1X AS
SELECT A,B
1 Zeile wurde erstellt.
FROM XX
INSERT INTO V1X VALUES(5,5)
WHERE B<3
*
WITH CHECK OPTION;
FEHLER in Zeile 1:
SELECT * FROM V1X;
ORA-01402: Verletzung der WHERE-Klausel
einer View WITH CHECK OPTION
UPDATE XX
SET B=5 WHERE B=2;
A
B
C
---------- ---------- ---------SELECT * FROM V1X;
1
5
3
INSERT INTO V1X VALUES(4,2);
2
1
3
INSERT INTO V1X VALUES(5,5);
3
4
3
4
2
SELECT * FROM XX;
Datenbanksysteme
Prof. Dr. Stephan Kleuker
289
INSTEAD OF –Trigger
• View Updates: Updates müssen auf Basistabellen umgesetzt
werden
• View-Update-Mechanismen eingeschränkt
• INSTEAD OF -Trigger: Änderung an einem View wird durch
andere SQL-Anweisungen ersetzt.
CREATE [OR REPLACE] TRIGGER <trigger-name>
INSTEAD OF
{INSERT | DELETE | UPDATE} ON <view>
[FOR EACH ROW]
<p1/sql-block>;
• Keine Einschränkung auf bestimmte Spalten möglich
• Keine WHEN -Klausel
• Default: FOR EACH ROW
Datenbanksysteme
Prof. Dr. Stephan Kleuker
290
View-Update ohne Trigger
CREATE OR REPLACE VIEW AllCountry AS
SELECT Name, Code, Population, Area,
GDP, Population/Area AS Density,
Inflation, population_growth,
infant_mortality
FROM Country, Economy, Population
WHERE Country.Code = Economy.Country
AND Country.Code = Population.Country;
INSERT INTO AllCountry
(Name, Code, Population, Area, GDP, Inflation,
population_growth, infant_mortality) VALUES
('Lummerland','LU',4,1,0.5,0,25,0);
• Fehlermeldung: Über ein Join-View kann nur eine Basistabelle
modifiziert werden.
Datenbanksysteme
Prof. Dr. Stephan Kleuker
291
View-Update mit Trigger
CREATE OR REPLACE TRIGGER InsAllCountry
INSTEAD OF INSERT ON AllCountry
FOR EACH ROW
BEGIN
INSERT INTO Country (Name,Code,Population,Area)
VALUES (:NEW.Name, :NEW.Code, :NEW.Population,
:NEW.Area);
INSERT INTO Economy (Country,Inflation)
VALUES (:NEW.Code, :NEW.Inflation);
INSERT INTO Population (Country,
Population_growth,infant_mortality)
VALUES (:NEW.Code, :NEW.Population_growth,
:NEW.infant_mortality);
END;
Datenbanksysteme
Prof. Dr. Stephan Kleuker
292
Organisation der DB (in Oracle)
Data Dictionary
• Besteht aus Tabellen und Views, die Metadaten über
die Datenbank enthalten
• Mit SELECT * FROM DICTIONARY (kurz SELECT *
FROM DICT) erklärt sich das Data Dictionary selber
• ALL_OBJECTS: Enthält alle Objekte, die einem
Benutzer zugänglich sind
• ALL_CATALOG: Enthält alle Tabellen, Views und
Synonyme, die einem Benutzer zugänglich sind
• ALL TABLES: Enthält alle Tabellen, die einem
Benutzer zugänglich sind
• Analog für diverse andere Dinge
SELECT * FROM ALL_CATALOG
WHERE TABLE_NAME LIKE 'ALL%';
Datenbanksysteme
Prof. Dr. Stephan Kleuker
293
Informationen über/für User
• USER_OBJECTS: enthält alle Objekte, die einem
Benutzer gehören
• Analog für die anderen, meistens existieren für USER
... auch Abkürzungen, etwa OBJ für
USER_OBJECTS
• ALL_USERS: Enthält Informationen über alle
Benutzer der Datenbank
Datenbanksysteme
Prof. Dr. Stephan Kleuker
294
Einrichtung von Usern (Oracle)
CREATE USER <user>
IDENTIFIED BY <password>;
CREATE USER Egon
IDENTIFIED BY ottilie01
QUOTA 5M ON system;
• nächster Schritt: Einrichtung der Systemprivilegien
des Nutzers (viele Möglichkeiten), u.a.
GRANT create session TO Egon
Datenbanksysteme
Prof. Dr. Stephan Kleuker
295
Verwaltung einer Datenbank
• Für DB-Projekte gibt es meist zwei Administratoren
– DB-Systemadministratoren: Physikalische
Einrichtung von Datenbanken (z.B. Name,
Speicherbereich), Nutzerverwaltung
– Projekt-DB-Administratoren: Verantwortlich für
die Tabellen des Projekts, wer hat welche Rechte
auf welchen Tabellen
• Abhängig vom DB-System müssen beide eng
zusammenarbeiten
• Hinweis: Sie haben auf unserem System grob die
Rechte eines Projekt-Admin und können
Zugriffsmöglichkeiten für Andere einrichten
Datenbanksysteme
Prof. Dr. Stephan Kleuker
296
Systemprivilegien
GRANT <privilege-list>
TO <user-list> | PUBLIC
[WITH ADMIN OPTION];
• PUBLIC: jeder erhält das Recht.
• ADMIN OPTION: Empfänger darf dieses Recht
weitergeben
Rechte entziehen:
REVOKE <privilege-list> | ALL
FROM <user-list> | PUBLIC;
• nur wenn man dieses Recht selbst vergeben hat (im
Fall von ADMIN OPTION kaskadierend)
Datenbanksysteme
Prof. Dr. Stephan Kleuker
297
Systemprivilegien
• berechtigen zu Schemaoperationen
• CREATE [ANY] TABLE / VIEW / TYPE / INDEX /
CLUSTER / TRIGGER/ PROCEDURE:
Benutzer darf die entsprechenden Schema-Objekte
erzeugen
• ALTER [ANY] TABLE / TYPE/ TRIGGER /
PROCEDURE:
Benutzer darf die entsprechenden Schema-Objekte
verändern
Datenbanksysteme
Prof. Dr. Stephan Kleuker
298
Systemprivilegien
• DROP [ANY] TABLE / VIEW / TYPE / INDEX /
CLUSTER / TRIGGER / PROCEDURE:
Benutzer darf die entsprechenden Schema-Objekte
löschen
• SELECT / INSERT / UPDATE / DELETE [ANY]
TABLE:
Benutzer darf in Tabellen Tupel lesen/ erzeugen/
verändern/ entfernen
• ANY: Operation in jedem Schema erlaubt,
• ohne ANY: Operation nur im eigenen Schema erlaubt
Datenbanksysteme
Prof. Dr. Stephan Kleuker
299
Rollen
• Privilegien können Rollen zugeordnet werden, die
dann wieder Nutzern zugeordnet werden können.
CREATE ROLE manager;
GRANT create table, create view
TO manager;
GRANT manager TO i03d09, i00d02;
• Der Entwurf einer sinnvollen Rollenmatrix ist nicht
trivial!
Datenbanksysteme
Prof. Dr. Stephan Kleuker
300
Objektprivilegien (1/4) [entspricht Projektebene]
berechtigen dazu, Operationen auf existierenden
Objekten auszuführen:
• Niemand sonst darf mit einem Datenbankobjekt
eines Nutzers arbeiten, außer
• Eigentümer (oder DBA) erteilt explizit entsprechende
Rechte:
GRANT <privilege-list> | ALL
[(<column-list>)]
ON <object>
TO <user-list> | PUBLIC
[ WITH GRANT OPTION ];
Datenbanksysteme
Prof. Dr. Stephan Kleuker
301
Objektprivilegien (2/4)
• <object>: TABLE, VIEW, PROCEDURE/FUNCTION,
TYPE
• Tabellen und Views: Genauere Einschränkung für
INSERT, REFERENCES und UPDATE durch <columnlist>
• <privilege-list>: DELETE, INSERT, SELECT,
UPDATE für Tabellen und Views,
INDEX, ALTER und REFERENCES für Tabellen
EXECUTE für Prozeduren, Funktionen und TYPEn
• ALL: alle Privilegien, die man an dem beschriebenen
Objekt hat
• WITH GRANT OPTION: Der Empfänger darf das
Recht weitergeben
Datenbanksysteme
Prof. Dr. Stephan Kleuker
302
Objektprivilegien (3/4)
• Rechte entziehen:
REVOKE <privilege-list> | ALL
ON <object>
FROM <user-list> | PUBLIC
[CASCADE CONSTRAINTS];
• CASCADE CONSTRAINTS (bei REFERENCES): alle
referenziellen Integritätsbedingungen, die auf einem
entzogenen REFERENCES-Privileg beruhen, fallen
weg
• Berechtigung von mehreren Benutzern erhalten:
Fällt mit dem letzten REVOKE weg
• im Fall von GRANT OPTION kaskadierend.
Datenbanksysteme
Prof. Dr. Stephan Kleuker
303
Objektprivilegien (4/4)
• Überblick über vergebene/erhaltene Rechte:
SELECT * FROM USER_TAB_PRIVS;
• Rechte, die man für eigene Tabellen vergeben hat,
Rechte, die man für fremde Tabellen bekommen hat
SELECT * FROM USER_COL_PRIVS;
SELECT * FROM USER_TAB_PRIVS_MADE;
SELECT * FROM USER_COL_PRIVS_MADE;
SELECT * FROM USER_TAB_PRIVS_RECD;
SELECT * FROM USER_COL_PRIVS_RECD;
• Stichwort: Rollenkonzept
Datenbanksysteme
Prof. Dr. Stephan Kleuker
304
Beispiele
GRANT select,
update(name,code)
ON Country
TO egon, manager
GRANT select,insert
ON City
TO PUBLIC
REVOKE select,insert
ON Country
FROM manager
Datenbanksysteme
Prof. Dr. Stephan Kleuker
305
Zugriffsrechte innerhalb von Oracle
• Zugriffsrechte an ORACLE-Account gekoppelt
• Ausgangsrechte vom DBA vergeben
Schema-Konzept
• Jedem Benutzer ist sein Database Schema
zugeordnet, in dem "seine" Objekte liegen.
• Bezeichnung der Tabellen global durch
<username>.<table> (z.B. xmaier.City für die
Tabelle City des Nutzers xmaier),
• im eigenen Schema durch <table> oder
<ich>.<table> nutzbar
Datenbanksysteme
Prof. Dr. Stephan Kleuker
306
Synonyme
• Schemaobjekt unter einem anderen Namen als
ursprünglich ansprechbar:
CREATE [PUBLIC] SYNONYM <synonym>
FOR <schema>.<object>;
• Ohne PUBLIC: Synonym ist nur für den Benutzer
definiert
• PUBLIC ist das Synonym systemweit verwendbar.
Geht nur mit CREATE ANY SYNONYM -Privileg
Beispiel:
CREATE SYNONYM City2
FOR db07ws65.City
(man muss Zugriffsrechte auf die Tabelle haben)
löschen:
DROP SYNONYM <synonym>
Datenbanksysteme
Prof. Dr. Stephan Kleuker
307
Zugriffseinschränkung über Views (1/2)
• GRANT SELECT kann nicht auf Spalten eingeschränkt werden
Stattdessen: Views verwenden.
GRANT SELECT [<column-list>] -- nicht erlaubt
ON <table>
TO <user-list> | PUBLIC
[WITH GRANT OPTION];
• kann ersetzt werden durch
CREATE VIEW <view> AS
SELECT <column-list> FROM <table>;
GRANT SELECT
ON <view>
TO <user-list> | PUBLIC
[WITH GRANT OPTION];
Datenbanksysteme
Prof. Dr. Stephan Kleuker
308
Zugriffseinschränkung über Views (2/2)
• db07ws65 ist Besitzer der Tabelle Country, will
Country ohne Hauptstadt und deren Lage für
db07ws00 Ies- und schreibbar machen
• View mit Lese- und Schreibrecht für db07ws00 :
CREATE VIEW pubCountry AS
SELECT Name, Code, Population, Area
FROM Country;
GRANT SELECT, INSERT, DELETE, UPDATE
ON pubCountry
TO db76ws00;
Datenbanksysteme
Prof. Dr. Stephan Kleuker
309
13. Integrität innerhalb der DB
• Integrität in relationalen DB
• ACID-Transaktionen
• Probleme beim verteilten Arbeiten
• Transaktionen: Praxis (Oracle)
Datenbanksysteme
Prof. Dr. Stephan Kleuker
310
Wiederholung: Überblick über SQL
•
•
•
DDL Data Definition Language
– CREATE (Anlegen von Tabellen, Sichten, Indexen, ...)
– ALTER (Ändern)
– DROP (Löschen)
– RENAME (Umbenennen)
DML Data Manipulation Language
– SELECT (Anfragen)
– INSERT (Einfügen von Zeilen)
– UPDATE (Ändern)
– DELETE (Löschen)
DCL Data Control Language
– GRANT (Vergabe von Zugriffsrechten)
– REVOKE (Zurücknahme von Zugriffsrechten)
– COMMIT (Abschluss einer Transaktion)
– ROLLBACK (Abbruch einer Transaktion)
Datenbanksysteme
Prof. Dr. Stephan Kleuker
311
Erinnerung: COMMIT, Transaktion, Rechte
i00x
CREATE TABLE User
(NAME VARCHAR(9));
GRANT ALL ON User TO i00y;
INSERT INTO User
VALUES(‘egon‘);
SELECT * FROM USER;
NAME
egon
i00y
INSERT INTO i00x.User
VALUES(‘hugo‘);
SELECT * FROM i00x.User;
NAME
hugo
COMMIT;
SELECT * FROM USER;
NAME
egon
hugo
Datenbanksysteme
Prof. Dr. Stephan Kleuker
312
ACID-Transaktionen
Atomicity
(Atomarität)
Transaktionen werden entweder ganz
oder gar nicht ausgeführt
Consistency Transaktionen überführen die Datenbank
(Konsistenz)
Isolation
(Isolation)
Durability
(Dauerhaftigkeit)
Datenbanksysteme
von einem konsistenten Zustand in einen
anderen konsistenten Zustand
Nebenläufige (gleichzeitige) Transaktionen
laufen jede für sich so ab, als ob sie alleine
ablaufen würden.
Die Wirkung einer abgeschlossenen
Transaktion bleibt (auch nach einem
Systemausfall) erhalten.
Prof. Dr. Stephan Kleuker
313
Zu ACID-Transaktionen
Tatsächlich muss ein DBMS nur garantieren:
• Das Ergebnis einer Transaktion ist gleichwertig zu
einer ACID-Transaktion
Die Transaktionsbehandlung betrifft:
• die Synchronisation von mehreren gleichzeitig
ablaufenden Transaktionen
• das Recovery, d.h. die Behebung von Fehlern
Transaktionen können erfolgreich (commit) oder
erfolglos (abort, für DB-Nutzer rollback)
abgeschlossen werden
Datenbanksysteme
Prof. Dr. Stephan Kleuker
314
Transaktionen
• Zustände einer Transaktion
Datenbanksysteme
Prof. Dr. Stephan Kleuker
315
Transaktion in SQL
Erste SQL-Anfrage
Folge von SQL-Anfragen
commit
Beginn der ersten Transaktion
Nächste SQL-Anfrage
Folge von SQL-Anfragen
rollback
Beginn der nächsten Transaktion
Festschreiben
Rücksetzen zum
vorhergehenden commit
Nächste SQL-Anfrage
Folge von SQL-Anfragen
commit
Datenbanksysteme
Beginn der nächsten Transaktion
Festschreiben
Prof. Dr. Stephan Kleuker
316
Atomarität (1/2)
Eine Transaktion wird entweder ganz oder gar nicht
ausgeführt
• Konto-Beispiel: Umbuchung von K1 auf K2
– Abbuchung von Konto K1
– Zubuchung auf Konto K2
entweder beide Operationen werden
durchgeführt oder keine
Abbruch kann stattfinden aufgrund:
• Selbstaufgabe (z.B. Benutzerabbruch)
• Systemabbruch durch das DBMS (z.B. wg. Deadlock)
• Crash (Hardware-/Softwarefehler)
Datenbanksysteme
Prof. Dr. Stephan Kleuker
317
Atomarität (2/2)
Wie stellt das Datenbanksystem die Atomarität sicher?
• bei einer lesenden Transaktion: kein Problem
• bei einer schreibenden Transaktion:
– bei Abbruch: Änderungen müssen rückgängig
gemacht werden (bzw. dürfen gar nicht erst
sichtbar werden)
– im Erfolgsfall: alle Änderungen müssen sichtbar
werden
Realisierungsmöglichkeit: das Schattenspeicherverfahren
Datenbanksysteme
Prof. Dr. Stephan Kleuker
318
Schattenspeicherkopie
Realisierungsmöglichkeit: das
Schattenspeicherverfahren
• Kopie einer DB: Arbeitskopie
Durchführung einer Transaktion:
• Änderung: wird nur auf der Arbeitskopie gemacht
• Commit (erfolgreich): DB := Arbeitskopie
• Abort (oder erfolgloses Commit): Arbeitskopie
wegwerfen
Datenbanksysteme
Prof. Dr. Stephan Kleuker
319
Konsistenz
Konsistenz betrifft alle vorgegebenen Regeln:
- Datentypen und Bereiche bei Attributen
- PRIMARY KEY
- FOREIGN KEY
- CONSTRAINTs
- TRIGGER (s. später)
technische Realisierung z.B. wie bei der Atomarität
Datenbanksysteme
Prof. Dr. Stephan Kleuker
320
Isolation
Parallel ablaufende Transaktionen sollen sich
gegenseitig nicht beeinflussen, d.h. jede läuft für
sich so ab, als sei sie die einzige Transaktion im
System
Dient zur Vermeidung div. Probleme:
• lost-update-Problem
• dirty read
• non-repeatable-read
• phantom read
Datenbanksysteme
Prof. Dr. Stephan Kleuker
321
Beispiel: Mehrnutzerbetrieb
• zwei parallel verlaufende Transaktionen:
T1:
T2:
BEGIN A=A+100, B=B-100 END
BEGIN A=1.06*A, B=1.06*B END
• Die erste Transaktion transferiert 100 € vom Konto B
zum Konto A. Die zweite Transaktion schreibt beiden
Konten 6 % Zinsen gut.
• Es gibt keine Garantie, dass T1 vor T2 ausgeführt
wird (oder umgekehrt), wenn beide zusammen
gestartet werden. Jedoch gilt: Der Nettoeffekt muss
äquivalent zu beiden Transaktionen sein, wenn sie
seriell in irgendeiner Reihenfolge ablaufen würden.
Datenbanksysteme
Prof. Dr. Stephan Kleuker
322
Beispiele für Schedules
• Betrachte folgenden Ablauf mit ineinander
geschachtelten Transaktionen (Schedules) :
T1:
T2:
A=A+100,
B=B-100
A=1.06*A,
B=1.06*B
• Kein Problem, aber bei diesem Beispiel:
T1:
A=A+100,
B=B-100
T2:
A=1.06*A, B=1.06*B
• Zweiter Schedule aus Sicht des DBMS:
T1:
T2:
Datenbanksysteme
R(A), W(A),
R(B), W(B)
R(A), W(A), R(B), W(B)
Prof. Dr. Stephan Kleuker
323
Anomalien im Mehrbenutzerbetrieb (1/4)
• Verlorengegangene Änderungen (Lost Update)
– WW-Konflikt
– Gleichzeitige Änderung desselben Objekts durch
zwei Transaktionen
– Erste Änderung (aus nicht beendeter Transaktion)
wird durch die zweite überschrieben
T1:
T2:
W(A),
W(B), C
W(A), W(B), C
C für Commit
Datenbanksysteme
Prof. Dr. Stephan Kleuker
324
Anomalien im Mehrbenutzerbetrieb (2/4)
• Zugriff auf schmutzige Daten (Dirty Read)
– WR-Konflikt
– “schmutzige“ Daten = geänderte Objekte, deren
Änderungen von Transaktionen stammen, die
noch nicht beendet sind
– Dauerhaftigkeit der Änderungen nicht garantiert,
da Transaktionen noch zurückgesetzt werden
– Ungültige Daten werden somit durch andere
Transaktion gelesen und (schlimmer noch!)
vielleicht noch weiterpropagiert
T1:
T2:
R(A), W(A),
Datenbanksysteme
R(B), W(B), Rollback
R(A), W(A), C
Prof. Dr. Stephan Kleuker
325
Anomalien im Mehrbenutzerbetrieb (3/4)
• Nicht-wiederholbares Lesen (Unrepeatable Read)
– RW-Konflikt
– Eine Transaktion sieht (bedingt durch parallele
Änderungen) während ihrer Ausführung
unterschiedliche Zustände des Objekts. Erneutes
Lesen in der Transaktion liefert somit anderen
Wert
T1:
T2:
R(A),
Datenbanksysteme
R(A), W(A), C
R(A), W(A), C
Prof. Dr. Stephan Kleuker
326
Anomalien im Mehrbenutzerbetrieb (4/4)
• Phantom-Problem
– Spezielle Form des Unrepeatable Read
– Lesetransaktion: Mengenorientiertes Lesen über
ein bestimmtes Suchprädikat P
– Parallel läuft Änderungstransaktion, die die
Menge der sich für das Prädikat qualifizierenden
Objekte ändert
– Folge: Phantom-Objekte, die durch parallele
Einfüge- oder Löschvorgänge in Ergebnismenge
auftauchen und/oder daraus verschwinden
Datenbanksysteme
Prof. Dr. Stephan Kleuker
327
Lost Update Beispiel
Zeit
Gehaltsänderung T1
SELECT GEHALT
INTO :gehalt
FROM PERS
WHERE PNR=2345;
gehalt:=
gehalt+2000;
UPDATE PERS
SET GEHALT=:gehalt
WHERE PNR=2345;
Datenbanksysteme
DBDB-Inhalt
(PNR, GEHALT)
2345 39.000
Gehaltsänderung T2
SELECT GEHALT
INTO :gehalt2
FROM PERS
WHERE PNR=2345;
gehalt2:=
gehalt2+1000;
UPDATE PERS
SET
GEHALT=:gehalt2
WHERE
PNR=2345;
Prof. Dr. Stephan
Kleuker
2345 41.000
2345 40.000
328
Dirty Read Beispiel
DBDB-Inhalt
(PNR, GEHALT)
Gehaltsänderung T1
UPDATE PERS
SET GEHALT=
GEHALT+1000
WHERE PNR=2345
. . .
Gehaltsänderung T2
2345
39.000
2345
40.000
3456
42.000
2345
39.000
SELECT GEHALT
INTO :gehalt
FROM PERS
WHERE PNR=2345
gehalt:=gehalt*1.05;
ROLLBACK
Datenbanksysteme
UPDATE PERS
SET GEHALT=:gehalt
WHERE PNR=3456
COMMIT
Prof. Dr. Stephan Kleuker
329
Unrepeatable Read Beispiel
DBDB-Inhalt
(PNR, GEHALT)
Gehaltsänderung T1
Gehaltssumme T2
UPDATE PERS
SET GEHALT=
GEHALT+1000
WHERE PNR=2345
. . .
UPDATE PERS
SET GEHALT=
GEHALT+2000
WHERE PNR=3456
SELECT SUM(GEHALT)
INTO :summe
FROM PERS
WHERE PNR IN
(2345,3456)
39.000
45.000
2345
40.000
3456
47.000
Inkonsistente Analyse
summe=85.000
COMMIT
Datenbanksysteme
2345
3456
Zeit
Prof. Dr. Stephan Kleuker
330
Unrepeatable Read Beispiel
Gehaltssumme T2
DBDB-Inhalt
(PNR, GEHALT)
Gehaltsänderung T1
UPDATE PERS
SET GEHALT=
GEHALT+1000
WHERE PNR=2345
SELECT GEHALT INTO :g1
FROM PERS
WHERE PNR=2345
UPDATE PERS
SET GEHALT=
GEHALT+2000
WHERE PNR=3456
COMMIT
39.000
45.000
2345
40.000
3456
47.000
SELECT GEHALT INTO :g2
FROM PERS
WHERE PNR=3456
summe:=g1+g2
Inkonsistente Analyse ohne schmutziges
Lesen
Datenbanksysteme
2345
3456
Prof. Dr. Stephan Kleuker
Zeit
331
Phantom-Problem Beispiel
Lesetransaktion (Gehaltssumme der
Abteilung 17 bestimmen)
Änderungstransaktion (Einfügen
eines neuen Angestellten in
Abteilung 17)
SELECT SUM(GEHALT) INTO :sum1
FROM PERS
WHERE ANR=17
INSERT INTO PERS
(PNR,ANR,GEHALT)
VALUES(4567,17,55.000)
. . .
SELECT SUM(GEHALT) INTO :sum2
FROM PERS
WHERE ANR=17
IF sum1<>sum2 THEN
<Fehlerbehandlung>
Zeit
Datenbanksysteme
Prof. Dr. Stephan Kleuker
332
Isolationsgrade
Die gezeigten Effekte treten je nach Isolationsgrad (isolation level)
auf:
Isolationsgrad
mögliche Effekte
0
Dirty Read, Non-Repeatable-Read, Phantom
1
Non-Repeatable-Read, Phantom
2
Phantom
3
Standard ist Isolationsgrad 3; geringere Grade können für
bestimmte Anwendungen Sinn machen (z.B. grobe Statistik)
• man erreicht so eine Leistungssteigerung
Auch hier gilt: man sollte wissen, was man tut...
Datenbanksysteme
Prof. Dr. Stephan Kleuker
333
Isolationsgrade in SQL (eine Version)
Setzen des Isolationsgrades in SQL (aber nicht Oracle):
SET TRANSACTION ISOLATION LEVEL <nr.>;
oder
SET TRANSACTION ISOLATION LEVEL
[ READ UNCOMMITED –- nicht Oracle
| READ COMMITTED -- Oracle (default)
| REPEATABLE READ –- nicht Oracle
| SERIALIZABLE
-- Oracle];
Zusätzlich kann eingestellt werden, ob die Transaktion nur liest:
SET TRANSACTION [ READ ONLY | READ WRITE ];
Einstellung gilt für aktuelle Verbindung, nach COMMIT oder
ROLLBACK wieder zurück gesetzt
Datenbanksysteme
Prof. Dr. Stephan Kleuker
334
Isolation - Realisierung
Die Isolationsgrade werden erreicht durch Sperren (locks)
• Lesesperren (shared lock, s)
• Schreibsperren (exclusive lock, x)
Lesesperren sind mit anderen Lesesperren kompatibel,
aber nicht mit Schreibsperren;
Schreibsperren sind mit nichts kompatibel
Die Sperrgranularität ist von der Implementierung eines DBMS
abhängig (z.B. Tabellensperren vs. Tupelsperren)
Oracle:
LOCK TABLE T IN EXCLUSIVE MODE;
LOCK TABLE T IN EXCLUSIVE MODE NOWAIT;
Freigabe der Sperren nach Transaktionsende
Datenbanksysteme
Prof. Dr. Stephan Kleuker
335
2-Phasen-Sperrprotokoll
Relationale Datenbanken arbeiten üblicherweise
pessimistisch,
und zwar nach dem 2-Phasen-Sperrprotokoll
• eine Transaktion muss jedes Objekt, das sie lesen
will, mit einer Lesesperre (s-lock) versehen
• eine Transaktion muss jedes Objekt, das sie ändern
will, mit einer Schreibsperre (x-lock) versehen
• eine Transaktion darf kein Objekt mehr neu sperren,
nachdem sie die erste Sperre freigegeben hat
Datenbanksysteme
Prof. Dr. Stephan Kleuker
336
Probleme mit ACID-Transaktionen
• Entwurfsanwendungen: Entwurf startet, Transaktion beginnt,
nach drei Monaten ist der Entwurf fertig, Transaktion wird aber
beim commit abgebrochen (… bitte von vorne anfangen...)
gefragt sind sog. lange Transaktionen: Syncpoints oder
Sagas
• Mobile Geräte: Daten werden auf Datenbank in (Notebook, PDA)
geladen, danach Trennung von Hauptdatenbank,
Benutzer macht Änderungen, verbindet sich wieder mit der DB,
was tun? alle Änderungen zurückweisen? Haupt-DB
sperren?
Synchronisation ist gefragt, evtl. mit vorheriger Anzeige
möglicher Arbeitsbereiche
Datenbanksysteme
Prof. Dr. Stephan Kleuker
337
Herunterladen