12. Programmierung in der Datenbank
|
|
- Alke Britta Kästner
- vor 5 Jahren
- Abrufe
Transkript
1 12. Programmierung in der Datenbank Motivation für Programme in der Datenbank Aufbau von serverseitigen Programmen Ausnahmebehandlung Erstellung von Triggern 307
2 Erweiterung relationaler Einbettung von SQL in prozedurale oder objektorientierte Wirtssprachen (embedded SQL); meistens C, C++, oder Java (JDBC) Erweiterung von SQL um prozedurale Elemente innerhalb der SQL-Umgebung Vorteile der internen Erweiterung: Bessere Integration der prozeduralen Elemente in die Datenbank; Nutzung in Prozeduren, Funktionen und Triggern 308
3 Warum Erweiterung von SQL sinnvoll ist keine prozeduralen Konzepte im klassischen SQL (Schleifen, Verzweigungen, Variablendeklarationen) viele Aufgaben nur umständlich über Zwischentabellen oder überhaupt nicht in SQL zu realisieren. Transitive Hülle Programme repräsentieren anwendungsspezifisches Wissen, das nicht in der Datenbank enthalten ist 309
4 Ansätze zur Erweiterung DB-System erhält eigene Programmiersprache, z. B. PL/SQL für Oracle Transact SQL für MS SQL Server Variante: Bringe Programmiersprache mit Ausführungsumgebung in die Datenbank, z. B. virtuelle Maschine von Java läuft mit/ im Datenbankserver z. B. von Oracle und Derby unterstützt 310
5 Nutzung gegebener Funktionen parameterlose Funktionen werden ohne Klammern aufgerufen Beispiel: Aufrufe von fünf Funktionen SELECT Current_date, Current_time, Current_timestamp, Upper(Continent.name), abs(area) FROM Continent; 311
6 Nutzung gegebener Prozeduren sogenannte Stored Procedures, Aufruf mit CALL Parameter können IN, OUT, INOUT sein wenn nur IN, dann direkt aufrufbar, ansonsten aus Programm CALL SYSCS_UTIL.SYSCS_EXPORT_QUERY('select * from continent', 'c:/temp/myfile.dat', NULL, NULL, NULL); 312
7 Entwicklung eigener Prozeduren und Funktionen Funktion: nur IN-Parameter, nur lesende SQL-Befehle! 1. Realisiere Funktionalität in Klassenmethoden (static) einer Java-Klasse 2. Packe ausführbaren Code als JAR-Datei 3. Lade Jar-Datei unter einem Pseudo-Namen in die Datenbank 4. Füge Pseudo-Namen zu den ausführbaren Paketen hinzu 5. Lege Funktion/Prozedur an, die auf Java-Methode zugreift 6. Nutze Funktion oder Prozedur 313
8 Erstes Beispiel (1/5) Java Code package added; public class Work { public static int hallo(string txt){ // Ausgaben auf DB-Konsole unüblich System.out.println("Hallo " + txt); return txt.length(); } } public static void auchhallo(string txt){ } System.out.println("Hai " + txt); 314
9 Erstes Beispiel (2/5) Erzeugung einer jar-datei Übersetzen des Programms NetBeans erzeugt automatisch jar-datei (sonst über Entwicklungsumgebung oder direkt erstellbar) 315
10 Erstes Beispiel (3/5) jar-datei laden, Fkt erstellen CALL sqlj.install_jar( 'F:\workspaces\NetbeansWork_WS15\ErsteDBErweiterung' '\dist\erstedberweiterung.jar', 'APP.Erstes', 0); CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY( 'derby.database.classpath', 'APP.Erstes'); statt install auch replace möglich (dann kein letzter Parameter) CREATE FUNCTION Halo(t VARCHAR(40)) RETURNS INT LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL EXTERNAL NAME 'added.work.hallo'; kein DB-Zugriff in der Methode, alternativ READS SQL DATA voll qualifizierter Methodenname 316
11 Erstes Beispiel (4/5) Nutzung von Funktionen SELECT name, Halo(Continent.name) FROM Continent; 317
12 Erstes Beispiel (5/5) Prozedur-Erstellung / Nutzung CREATE PROCEDURE Ho(IN t VARCHAR(40)) LANGUAGE JAVA PARAMETER STYLE JAVA READS SQL DATA EXTERNAL NAME 'added.work.auchhallo'; 318
13 Systematischer Umgang mit Statement-Objekten Statement-Objekte sollen nach ihrer Nutzung geschlossen werden seit Java 7 gibt es AutoClosable Interface try (Statement stmt = con.createstatement()) { } // stmt nutzen stmt wird mit oder ohne Exception geschlossen (stmt.close()) catch und finally weiterhin möglich JavaDoc: A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results. 319
14 Zugriff auf Datenbank der Zugriff auf die aktuell in Transaktion genutzter Verbindung: DriverManager.getConnection("jdbc:default:connection"); generell damit alle JDBC-Befehle zugänglich typischerweise keine Erzeugung neuer Tabellen erwünscht bzw. möglich Transaktionssteuerung (später) erlaubt, kann aber durch verschachtelte Aufrufe zu Problemen führen, wenn z. B. geschlossenes ResultSet genutzt wird Funktionen und Prozeduren laufen mit den Rechten des Nutzers, der sie importiert hat; man kann so Zugriffe ausschließlich auf diese Form einschränken (Admin importiert und gibt Rechte an Nutzer weiter; diesen haben bei der Ausführung Admin-Rechte) 320
15 Methoden für neue Konten public static void neueskonto(int nr, int betrag) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); try (Statement stmt = con.createstatement()){ stmt.execute("insert INTO Konto VALUES(" + nr + "," + betrag +")"); } } public static void neueskonto(int betrag) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); try (Statement stmt = con.createstatement()) { ResultSet rs = stmt.executequery("select MAX(nr) FROM Konto"); rs.next(); int nr = rs.getint(1)+1; neueskonto(nr,betrag); } } 321
16 Einspielen und Erstellen CALL sqlj.replace_jar( 'F:\workspaces\NetbeansWork_WS15\ErsteDBErweiterung' '\dist\erstedberweiterung.jar', 'APP.Erstes'); CREATE PROCEDURE neueskonto(in nr INTEGER, IN betrag INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.neueskonto'; CREATE PROCEDURE neueskonto2(in betrag INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.neueskonto'; keine Polymorphie möglich 322
17 Nutzen CALL neueskonto(10000,50); CALL neueskonto2(51); SELECT * FROM Konto WHERE Konto.nr > 9999; 323
18 Exception-Handling Java-Methoden werfen bekannte SQLExceptions zwei relevante Methoden getmessage(): Fehlermeldung, kann null sein getsqlstate(): Fehleridentifikator (String) man kann Exceptions intern behandeln, oft werden sie nach außen weitergereicht man kann eigene SQLExceptions definieren nach Standard ist SQLState dann zwischen und Nutzer kann dann SQLException auswerten 324
19 Einzahlung mit Prüfung public static void einzahlen(int nr, int betrag) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); try (Statement stmt = con.createstatement()){ ResultSet rs = stmt.executequery( "SELECT COUNT(*) FROM Konto WHERE nr="+nr); rs.next(); if(rs.getint(1) == 0){ throw new SQLException("Konto fehlt","30000"); } } } rs.close(); rs = stmt.executequery("select * FROM Konto WHERE nr="+nr); rs.next(); if(rs.getint(2) + betrag < 0){ throw new SQLException("zu wenig Geld","30001"); } stmt.execute("update Konto SET betrag = betrag+" + betrag + " WHERE nr=" + nr); geht einfacher, untere Anfrage, rs.next()=false 325
20 Ausführung CALL einzahlen(10001,49); SELECT * FROM Konto WHERE Konto.nr > 9999; CALL einzahlen(10002,49); Error code 30000, SQL state 38000: Bei der Auswertung eines Ausdrucks wurde die Ausnahme 'java.sql.sqlexception: Konto fehlt' ausgelöst. Error code 99999, SQL state 30000: Konto fehlt CALL einzahlen(10001,-149); Error code 30000, SQL state 38000: Bei der Auswertung eines Ausdrucks wurde die Ausnahme 'java.sql.sqlexception: zu wenig Geld' ausgelöst. Error code 99999, SQL state 30001: zu wenig Geld 326
21 Aufruf einer Funktion durch den DB-Client public void rufefunktion(string text) { CallableStatement stmt = this.con.preparecall("{? = call halo(?)}"); stmt.registeroutparameter(1, Types.INTEGER); stmt.setstring(2, text); stmt.execute(); int erg = stmt.getint(1); System.out.println("erg: " + erg); } db.rufefunktion("ein Text"); erg: 8 327
22 Aufruf einer Prozedur durch den DB-Client public void rufeprozedur(int nr,int betrag){ try( CallableStatement stmt = this.con.preparecall( "{call einzahlen(?,?)}" ) ){ stmt.setint(1, nr); stmt.setint(2, betrag); stmt.execute(); } catch (SQLException e) { SQLException s = e.getnextexception(); System.out.println(s.getMessage() + ": " + s.getsqlstate()); } } db.rufeprozedur(10001, 50); db.rufeprozedur(10002, 50); db.rufeprozedur(10001, -500); Konto fehlt: zu wenig Geld:
23 Nutzung von OUT-Parametern Prozeduren können über OUT-Parameter Werte zurückliefern Erster Java-Ansatz public static void kontostand(int nr, int stand){ stand = } geht nicht, da stand keine Referenz in Java ist Trick: Nutze Array als Parametertyp und davon nur das erste Element; bei Arrays von Referenzen sind Änderungen möglich 329
24 Prozedur für Kontostand public static void kontostand(int nr, int[] stand) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); try (Statement stmt = con.createstatement()){ ResultSet rs = stmt.executequery("select * FROM Konto WHERE nr=" + nr); if(!rs.next()){ throw new SQLException("Konto "+nr+" fehlt","30000"); } stand[0] = rs.getint(2); } } CREATE PROCEDURE kontostand(in nr INTEGER, OUT stand INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.kontostand'; 330
25 Nutzung der Prozedur public int kontostand(int nr){ try(callablestatement stmt = this.con.preparecall( "{call kontostand(?,?)}" )){ stmt.setint(1, nr); stmt.registeroutparameter(2, Types.INTEGER); stmt.execute(); return stmt.getint(2); } catch (SQLException e) { SQLException s = e.getnextexception(); System.out.println(s.getMessage() + ": " + s.getsqlstate()); } return -1; } System.out.println(db.kontostand(10001)); System.out.println(db.kontostand(10002)); 150 Konto fehlt:
26 Zugriffsrechte bei Prozeduren / Funktionen Benutzungsrechte vergeben: GRANT EXECUTE ON <procedure/function> TO <user>; Prozeduren und Funktionen werden jeweils mit den Zugriffsrechten des Besitzers ausgeführt d.h. der Nutzer kann die Prozedur/Funktion auch dann aufrufen, wenn er kein Zugriffsrecht auf die dabei benutzten Tabellen hat Anmerkung: Sieht man SQLJ als serverseitige Programmierung, ist dies neben der Portabilität ein zentrales Argument für SQLJ 332
27 Trigger (1/2) typischer Einsatz bei Prüfung komplexer Bedingungen, die nicht mit Constraints überwachbar sind spezielle Form der Nutzung von Prozeduren werden beim Eintreten eines bestimmten Ereignisses ausgeführt Spezialfall aktiver Regeln nach dem Event-Condition-Action- Paradigma Werden einer Tabelle zugeordnet Bearbeitung wird durch das Eintreten eines Ereignisses (Einfügen, Ändern oder Löschen von Zeilen der Tabelle) ausgelöst (Event) 333
28 Trigger (2/2) Ausführung von Bedingungen für den Datenbankzustand abhängig (Condition) Action: vor oder nach der Ausführung der entsprechenden aktivierenden Anweisung ausgeführt einmal pro auslösender Anweisung (Statement-Trigger) oder einmal für jede betroffene Zeile (Row-Trigger) ausgeführt Trigger-Aktion kann auf den alten und neuen Wert der gerade behandelten Zeile zugreifen Aktion sorgt mit Exception dafür, dass keine Änderung stattfindet 334
29 Einschränkungen bei Trigger-Aktionen It must not contain any dynamic parameters (?). It must not create, alter, or drop the table upon which the trigger is defined. It must not add an index to or remove an index from the table on which the trigger is defined. It must not add a trigger to or drop a trigger from the table upon which the trigger is defined. It must not commit or roll back the current transaction or change the isolation level. Before triggers cannot have INSERT, UPDATE or DELETE statements as their action. Before triggers cannot call procedures that modify SQL data as their action
30 Erster Trigger (noch ohne Prozedur) CREATE TABLE Protokoll( wer VARCHAR(30), wann TIMESTAMP, was VARCHAR(30) ); CREATE TRIGGER KontoInsert1 AFTER INSERT ON Konto REFERENCING NEW AS N FOR EACH ROW INSERT INTO Protokoll VALUES(USER, Current_timestamp,'INSERT ' CAST (N.nr AS CHAR(7))); INSERT INTO Konto VALUES(17,0); INSERT INTO Konto VALUES(177,0); INSERT INTO Konto VALUES(1777,0); SELECT * FROM Protokoll; 336
31 Trigger genauer analysiert CREATE TRIGGER KontoInsert1 AFTER INSERT ON Konto REFERENCING NEW AS N FOR EACH ROW so pro Zeile CALL oder FOR EACH STATEMENT eigentliche Aktion INSERT UPDATE DELETE DB-eindeutiger Name AFTER NO CASCADE BEFORE genau eine Tabelle Zugriff auf neue Zeile bei INSERT und UPDATE Zugriff auf alte Zeile (OLD AS) bei UPDATE und DELETE (nur bei Zeilentrigger) REFERENCING OLD AS 337 O NEW AS N
32 FOR EACH ROW oder nicht CREATE TABLE Tr( X INTEGER, Y INTEGER ); INSERT INTO Tr VALUES (1,3); INSERT INTO Tr VALUES (1,4); INSERT INTO Tr VALUES (1,5); SELECT * FROM Tr; CREATE TRIGGER TrOhneEach NO CASCADE BEFORE UPDATE ON Tr CALL Ho('TrOhneEach'); CREATE TRIGGER TrMitEach NO CASCADE BEFORE UPDATE ON Tr FOR EACH ROW CALL Ho('TrMitEach'); UPDATE TR SET Y=Y+1 WHERE X=1; SELECT * FROM Tr; X Y Hai TrOhneEach Hai TrMitEach Hai TrMitEach Hai TrMitEach 3 Zeilen wurden aktualisiert. X Y
33 Auswahl BEFORE oder AFTER Gibt keine generelle Regel, was besser ist Ansatz: finde möglichst einfachen Algorithmus, der eine Prüfung intuitiv verständlich macht BEFORE: berechne genau, ob gewünschte Aktion möglich ist AFTER: nehme an Aktion wurde ausgeführt; suche nach einem Fehler in den Daten; wenn vorhanden, brich ab EACH ROW oder nicht: interessiert jede einzelne Aktion oder nur das Gesamtergebnis der Aktion Konto-Beispiel: Die Summe aller Beträge der Konten soll nicht negativ sein Jeweils Trigger für INSERT, UPDATE und DELETE benötigt hier einfache Prüfung nachdem Aktion ausgeführt wurde 339
34 Prüfmethode public static void nichtnegativ() throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); try(statement stmt = con.createstatement()){ ResultSet rs = stmt.executequery("select SUM(betrag) " + " FROM Konto"); rs.next(); System.out.println("Summe: " + rs.getint(1)); if(rs.getint(1) < 0){ throw new SQLException("Pleite verhindern","30002"); } } } CREATE PROCEDURE nichtnegativ() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME 'added.kontoverwaltung.nichtnegativ'; 340
35 Trigger erstellen und ausprobieren CREATE TRIGGER nichtnegativinsert AFTER INSERT ON Konto CALL nichtnegativ(); CREATE TRIGGER nichtnegativupdate AFTER UPDATE ON Konto CALL nichtnegativ(); CREATE TRIGGER nichtnegativdelete AFTER DELETE ON Konto CALL nichtnegativ(); INSERT INTO Konto VALUES(42,50); INSERT INTO Konto VALUES(43,50); INSERT INTO Konto VALUES(44,-100); SELECT * FROM Konto; INSERT INTO Konto VALUES(45,-1); UPDATE Konto SET betrag = betrag - 10; DELETE FROM Konto WHERE nr = 43; Summe: 50 Summe: 100 Summe: 0 Summe: -1 Summe: -30 Summe:
36 Problem der Mutating Tables Trigger können die Inhalte von Tabellen ändern (der Tabelle, auf der sie definiert sind und andere), d.h. jede Ausführung des Triggers sieht eventuell einen anderen Datenbestand der Tabelle, auf der er definiert ist, sowie der Tabellen, die er evtl. ändert d.h. Ergebnis abhängig von der Reihenfolge der veränderten Tupel Ansatz: Betroffene Tabellen werden während der gesamten Aktion als mutating gekennzeichnet, können nicht erneut von Triggern gelesen oder geschrieben werden Nachteil: Oft ein zu strenges Kriterium Derby: maximale Kettenlänge bei Aufrufen 342
37 Beispiel (1/4): Aufgabe Tabelle speichert Gebote eines Mitglieds (mnr) für eine Ware (ware) als Preis (gebot) Forderung: bei neuen Geboten (insert oder update erlaubt) für die gleiche Ware muss das eigene Gebot erhöht werden CREATE TABLE Gebot( ); id INTEGER, mnr INTEGER, ware INTEGER, gebot DECIMAL(8, 2), PRIMARY KEY(id) 343
38 Beispiel (2/4) : Methode public static void geboterhoehen(int mnr, int ware, double gebot) throws SQLException{ Connection con = DriverManager.getConnection("jdbc:default:connection"); try(statement stmt = con.createstatement()){ ResultSet rs = stmt.executequery("select MAX(gebot) " + "FROM Gebot " + "WHERE mnr=" + mnr + " AND ware=" + ware); rs.next(); double max = rs.getdouble(1); System.out.println(rs.wasNull()+ " " + max); if (!rs.wasnull() && max >= gebot){ throw new SQLException("Gebot erhöhen!","30009"); } } } 344
39 Beispiel (3/4): Trigger anlegen CREATE PROCEDURE geboterhoehen(m INTEGER, w INTEGER, g DOUBLE) LANGUAGE JAVA PARAMETER STYLE JAVA READS SQL DATA EXTERNAL NAME 'added.gebotspruefung.geboterhoehen'; CREATE TRIGGER geboterhoeheninsert NO CASCADE BEFORE INSERT ON Gebot REFERENCING NEW AS N FOR EACH ROW CALL geboterhoehen(n.mnr, N.ware, N.gebot); CREATE TRIGGER geboterhoehenupdate NO CASCADE BEFORE UPDATE ON Gebot REFERENCING NEW AS N FOR EACH ROW CALL geboterhoehen(n.mnr, N.ware, N.gebot); 345
40 Beispiel (4/4): Probieren INSERT INTO Gebot VALUES(100, 42, 99, 1.00); UPDATE Gebot SET gebot = 1.01 WHERE mnr = 42 AND ware = 99; INSERT INTO Gebot VALUES(101, 42, 99, 1.00); true 0.0 false 1.0 false 1.01 false 1.01 UPDATE Gebot SET gebot = 1.01 WHERE mnr = 42 AND ware = 99; 346
41 11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 347
42 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle Befehle unabhängig (Kommentarfunktion) kritisch, wenn mehrere Aktion voneinander abhängen (z. B. Geldüberweisung), da Abbruch in der Mitte möglich mehrere Schritte werden zu Transaktion zusammengefasst Änderungen in der Datenbank finden erst am Ende der Transaktion (in SQL COMMIT; oder Element der Definitionssprache, oder Beenden der SQL-Sitzung) statt Zwischenzeitlich können Sicherungspunkte angelegt werden SAVEPOINT <name> (in Oracle, nicht Standard-SQL) Rücksprung zum SAVEPOINT mit ROLLBACK (zum Transaktionsanfang) oder ROLLBACK <name> zum konkreten SAVEPOINT 348
43 ROLLBACK TO SAVEPOINT B ROLLBACK TO SAVEPOINT A ROLLBACK Ablaufmöglichkeiten bei Transaktionen Nutzeraktionen COMMIT INSERT UPDATE SAVEPOINT A INSERT DELETE SAVEPOINT B Anmerkung: Standard-SQL kennt nur ROLLBACK 349
44 Ende einer Transaktion COMMIT Befehl macht alle Änderungen persistent ROLLBACK nimmt alle Änderungen der aktuellen Transaktion zurück z. B. Oracle: ROLLBACK TO <savepoint> nimmt alle Änderungen bis zum <savepoint> zurück durch DDL-Befehle (CREATE, DROP, ALTER, RENAME) Benutzer beendet Sitzung; meldet sich vom System Abbruch des Benutzerprozesses 350
45 ACID-Transaktionen Atomicity (Atomarität) Consistency (Konsistenz) Isolation (Isolation) Durability (Dauerhaftigkeit) Transaktionen werden entweder ganz oder gar nicht ausgeführt Transaktionen überführen die Datenbank 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. 351
46 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 352
47 Transaktionen Zustände einer Transaktion 353
48 Transaktion in SQL Erste SQL-Anfrage Folge von SQL-Anfragen commit Beginn der ersten Transaktion Festschreiben Nächste SQL-Anfrage Folge von SQL-Anfragen rollback Beginn der nächsten Transaktion Rücksetzen zum vorhergehenden commit Nächste SQL-Anfrage Folge von SQL-Anfragen commit Beginn der nächsten Transaktion Festschreiben 354
49 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) 355
50 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 356
51 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 357
52 Konsistenz Konsistenz betrifft alle vorgegebenen Regeln: - Datentypen und Bereiche bei Attributen - PRIMARY KEY - FOREIGN KEY - CONSTRAINTs - TRIGGER technische Realisierung z.b. wie bei der Atomarität 358
53 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 359
54 Beispiel: Mehrnutzerbetrieb zwei parallel verlaufende Transaktionen: T1: BEGIN A=A+100, B=B-100 END T2: BEGIN A=1.06*A, B=1.06*B END erste Transaktion transferiert 100 vom Konto B zum Konto A zweite Transaktion schreibt beiden Konten 6 % Zinsen gut 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 360
55 Beispiele für Schedules Betrachte folgenden Ablauf mit ineinander geschachtelten Abläufen (Schedules) : T1: A=A+100, B=B-100 T2: 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: R(A), W(A), R(B), W(B) T2: R(A), W(A), R(B), W(B) 361
56 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: W(A), W(B), C T2: W(A), W(B), C C für Commit 362
57 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: R(A), W(A), R(B), W(B), Rollback T2: R(A), W(A), C 363
58 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: R(A), R(A), W(A), C T2: R(A), W(A), C 364
59 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ügeoder Löschvorgänge in Ergebnismenge auftauchen und/oder daraus verschwinden 365
60 Lost Update Beispiel Gehaltsänderung T1 SELECT GEHALT INTO :gehalt FROM PERS WHERE PNR=2345; Gehaltsänderung T2 SELECT GEHALT INTO :gehalt2 FROM PERS WHERE PNR=2345; Zeit DB-Inhalt (PNR, GEHALT) gehalt:= gehalt+2000; UPDATE PERS SET GEHALT=:gehalt WHERE PNR=2345; gehalt2:= gehalt2+1000; UPDATE PERS SET GEHALT=:gehalt2 WHERE PNR=2345;
61 Dirty Read Beispiel Gehaltsänderung T1 UPDATE PERS SET GEHALT= GEHALT+1000 WHERE PNR= Gehaltsänderung T2 SELECT GEHALT INTO :gehalt FROM PERS WHERE PNR=2345 gehalt:=gehalt*1.05; Zeit DB-Inhalt (PNR, GEHALT) ROLLBACK UPDATE PERS SET GEHALT=:gehalt WHERE PNR=2345 COMMIT
62 Unrepeatable Read Beispiel Gehaltsänderung T1 UPDATE PERS SET GEHALT= GEHALT+1000 WHERE PNR= UPDATE PERS SET GEHALT= GEHALT+2000 WHERE PNR=3456 COMMIT Gehaltssumme T2 SELECT SUM(GEHALT) INTO :summe FROM PERS WHERE PNR IN (2345,3456) Inkonsistente Analyse summe= Zeit DB-Inhalt (PNR, GEHALT)
63 Unrepeatable Read Beispiel Gehaltsänderung T1 UPDATE PERS SET GEHALT= GEHALT+1000 WHERE PNR=2345 UPDATE PERS SET GEHALT= GEHALT+2000 WHERE PNR=3456 COMMIT Gehaltssumme T2 SELECT GEHALT INTO :g1 FROM PERS WHERE PNR=2345 SELECT GEHALT INTO :g2 FROM PERS WHERE PNR=3456 summe:=g1+g2 Inkonsistente Analyse ohne schmutziges Lesen in T2 DB-Inhalt (PNR, GEHALT) Zeit 369
64 Phantom-Problem Beispiel Lesetransaktion (Gehaltssumme der Abteilung 17 bestimmen) SELECT SUM(GEHALT) INTO :sum1 FROM PERS WHERE ANR=17... Änderungstransaktion (Einfügen eines neuen Angestellten in Abteilung 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 370
65 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
66 Isolationsgrade in SQL (eine Version) Setzen des Isolationsgrades in SQL (aber nicht Oracle): oder SET TRANSACTION ISOLATION LEVEL <nr.>; SET TRANSACTION ISOLATION LEVEL [ READ UNCOMMITED READ COMMITTED REPEATABLE READ SERIALIZABLE]; in Derby (0 nicht unterstützt): {REPEATABLE_READ=4, READ_UNCOMMITTED=1, NONE=0, READ_COMMITTED=2, SERIALIZABLE=8} Einstellung gilt für aktuelle Verbindung, nach COMMIT oder ROLLBACK wieder zurückgesetzt 372
67 Erinnerung: Kontobeispiel Was wollen Sie machen? (2) Neues Konto 2 Welche Kontonummer? 67 Welcher Startbetrag? 1 Was wollen Sie machen? (1) vorhandene Konten
68 Möglicher Ablauf mit READ UNCOMMITED (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 (6) ROLLBACK (1) vorhandene Konten 42: : : : 1000 (3) Einzahlen Welche Kontonummer? 43 Welchen Betrag? 50 (1) vorhandene Konten 42: : 1050 (5) COMMIT (1) vorhandene Konten 42: :
69 Möglicher Ablauf mit READ COMMITED (1/2) (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 (1) vorhandene Konten [warten] 42: : : : 1000 (3) Einzahlen Welche Kontonummer? 43 Welchen Betrag? 50 (1) vorhandene Konten [warten] java.sql.sqltransaction RollbackException: Eine Sperre konnte aufgrund eines Deadlocks nicht angefordert werden. Zyklus der Sperren und beantragten Sperren: 375
70 Möglicher Ablauf mit READ COMMITED (2/2) (1) vorhandene Konten 42: : 1000 (1) vorhandene Konten 42: : : : 1000 (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 (5) COMMIT 376
71 Möglicher Ablauf mit REPEATABLE READ 42: : 1000 (1) vorhandene Konten 42: : 1000 (3) Einzahlen Welche Kontonummer? 42 Welchen Betrag? 100 [warten] java.sql.sqltransaction RollbackException: Eine Sperre konnte innerhalb der vorgegebenen Zeit nicht angefordert werden. 377
72 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 378
73 2-Phasen-Sperrprotokoll Relationale 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 379
74 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 380
75 13. Testen von DB-Software Kurzeinführung JUnit Regeln zur Testerstellung Nutzung von DBUnit 381
76 Einschub: Testen mit JUnit Framework, um den Unit-Test eines Java-Programms zu automatisieren einfacher Aufbau leicht erlernbar geht auf SUnit (Smalltalk) zurück mittlerweile für viele Sprachen verfügbar (NUnit, CPPUnit) S. Kleuker, Qualitätssicherung durch Softwaretests, Springer Vieweg, Wiesbaden, 2013 Software-Qualität 382
77 Testfall Vor dem Testen müssen Testfälle spezifiziert werden Vorbedingungen Zu testende Software in klar definierte Ausgangslage bringen (z. B. Objekte mit zu testenden Methoden erzeugen) Angeschlossene Systeme in definierten Zustand bringen Weitere Rahmenbedingungen sichern (z. B. HW) Ausführung Was muss wann gemacht werden (einfachster Fall: Methodenaufruf) Nachbedingungen Welche Ergebnisse sollen vorliegen (einfachster Fall: Rückgabewerte) Zustände anderer Objekte / angeschlossener Systeme Software-Qualität 383
78 Aufbau einer Testklasse (1/8) import junit.framework.assert; import org.junit.after; import org.junit.afterclass; import org.junit.before; import org.junit.beforeclass; import org.junit.test; public class AnschauungTest { private int wert; private static int klasse; Beliebiger Klassenname, Endung Test üblich Nutzung von normalen Exemplarvariablen Klassenvariablen, außer als Konstanten, nie nutzen (hier nur als schlechtes Beispiel) Komponentenbasierte Software- Entwicklung 384
79 Aufbau einer Testklasse (2/8) Verhaltensbeschreibung mit public static void setupbeforeclass() } throws Exception { System.out.println("setUpBeforeClass"); klasse = public static void teardownafterclass() } throws Exception { System.out.println("tearDownAfterClass"); Methode wird einmal vor vor allen Tests ausgeführt, z.b. Aufbau DB-Verbindung einmal nach allen Tests (aufräumen) Komponentenbasierte Software- Entwicklung 385
80 Aufbau einer Testklasse public void setup() throws Exception { } System.out.println("setUp"); wert = 42; klasse = klasse + 1; System.out.println("klasse ist public void teardown() throws Exception { } System.out.println("tearDown"); Methode wird vor jedem Test ausgeführt, Idee: einheitliche Ausgangssituation schaffen einmal nach jeden Tests (lokal aufräumen) Komponentenbasierte Software- Entwicklung 386
81 Aufbau einer Testklasse public void test1() { } Test ist beliebige annotierte Methode Methodenname ist beliebig, beginnt typischerweise mit test und beinhaltet Name der Methode oder Sinn des Tests System.out.println("test1"); wert = wert + 1; Assert.assertTrue("Erwartet 43 gefunden: "+wert, wert == 43); Experimente Prüfmethode, Parameter Text und Boolesche Bedingung; ist Bedingung false wird Test als gescheitert festgehalten und Text ausgegeben Komponentenbasierte Software- Entwicklung 387
82 Aufbau einer Testklasse public void test2() { } System.out.println("test2"); wert = wert + 2; Assert.assertTrue(wert == public void test3() { } System.out.println("test3"); wert = wert + 3; Assert.assertTrue("Erwartet 44 gefunden: "+wert, wert == 44); Kurzform ohne Text (gibt assert-varianten) wenn Testfall scheitert ist entweder das Programm oder der Test fehlerhaft Komponentenbasierte Software- Entwicklung 388
83 Aufbau einer Testklasse (6/8) public void test4() { System.out.println("test4"); try{ if(42/0 == 0){ } Assert.fail(); } catch(arithmeticexception e){ } catch(exception e){ Assert.fail(); } public void test5() { System.out.println("test5"); throw new IllegalArgumentException(); } Test scheitert, wenn ausgeführt; markiert Stellen, die nicht erreicht werden sollen gewünschte Exception ungewünschte Exception (kann weggelassen werden) Komponentenbasierte Software- Entwicklung 389
84 Aufbau einer Testklasse (7/8) setupbeforeclass setup klasse ist 100 test4 teardown setup klasse ist 101 test5 teardown setup klasse ist 102 test1 teardown setup klasse ist 103 test2 teardown setup klasse ist 104 test3 teardown teardownafterclass Komponentenbasierte Software- Entwicklung 390
85 Aufbau einer Testklasse (8/8) Failure: Fehler durch Assert Error: Fehler durch Abbruch Komponentenbasierte Software- Entwicklung 391
86 Basisideen zur Testerstellung viele kleine Tests, da nachfolgende Asserts nicht geprüft, wenn eines vorher abbricht erwartetes Verhalten kann zusammen geprüft werden jede mögliche Ausnahme in getrenntem Testfall Extremwerte prüfen Testklassen können weitere Hilfsmethoden enthalten typisch: am Anfang auf leerem Feld neue Testausgangssituation erstellen 392
87 Test von Nie, nie mit laufender Geschäftsdatenbank testen; es wird immer ein Testsystem benötigt generell direkt mit JUnit machbar Detailproblem: nach den Tests so aufräumen, dass Ausgangssituation wieder hergestellt (abhängige Daten!) Detailproblem: aufwändiger Vergleich zwischen aktuellem und erwartetem Tabelleninhalt Vereinfachung mit DBUnit als Ergänzung von JUnit einfaches Leeren und Neueinspielen von Datensätzen einfacher Vergleich von Mengen von Tabelleneinträgen Tabellen z. B. auf Basis von XML-Dateien definierbar (hier nur zentrale Konzepte) 393
88 Testerzeugung in NetBeans 394
89 Projektaufbau 395
90 Konfiguration des Loggers (log4j.properties) log4j.rootlogger=warn, console log4j.appender.console=org.apache.log4j.consoleappender log4j.appender.console.layout=org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern=%5p [%t] (%F:%L) - %m%n ermöglicht flexibles Schreiben von Meldungen in Log- Dateien sehr einfach ein- und ausschaltbar (hier Level WARN) Erinnerung: Fallstudie Gebot Tabelle speichert Gebote eines Mitglieds (mnr) für eine Ware (ware) als Preis (gebot) mit eigener id Forderung: bei neuen Geboten (insert oder update erlaubt) für die gleiche Ware muss das eigene Gebot erhöht werden 396
91 Verbindung public class Verbindung { public static Connection verbinden() throws Exception { Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); return DriverManager.getConnection("jdbc:derby://localhost:1527/Gebote","kleuker", "kleuker"); } public static void verbindungtrennen(connection con, IDatabaseConnection condbu) throws Exception { if (con!= null) { con.close(); } if (condbu!= null) { condbu.close(); } } } 397
92 Testbed: Verbindungs- auf und Abbau public class GebotErhoehenTest { private static Connection con = null; // direkte DB-Verbindung private static IDatabaseConnection condbu; // public static void setupbeforeclass() throws Exception { con = Verbindung.verbinden(); condbu = new DatabaseConnection(con, null, true); //DatabaseConfig config = condbu.getconfig(); //config.setproperty(databaseconfig.property_datatype_factory, // new OracleDataTypeFactory()); public static void teardownafterclass() throws Exception { Verbindung.verbindungTrennen(con, condbu); } DBUnit hat DBindividuelle Einstellungen 398
93 basisdaten.xml Möglichkeit zur Spezifikation von Testdaten mit XML <?xml version="1.0" encoding="utf-8"?> <dataset> <Gebot id="1" mnr="1" ware="100" gebot="1.00" /> <Gebot id="2" mnr="1" ware="101" gebot="1.00" /> <Gebot id="3" mnr="1" ware="100" gebot="2.00" /> <Gebot id="4" mnr="2" ware="100" gebot="2.01" /> <Gebot id="5" mnr="3" ware="101" gebot="1.01" /> </dataset> Wird Spalte nicht angegeben, dann NULL-Wert Daten werden in angegebener Reihenfolge eingefügt 399
94 Varianten beim Einspielen von public void setup() throws Exception { IDataSet dataset = new FlatXmlDataSetBuilder().build(new FileInputStream(".\\testdaten\\basisdaten.xml")); DatabaseOperation.CLEAN_INSERT.execute(conDBU, dataset); } CLEAN_INSERT: alle Daten zuerst löschen, dann einfügen DELETE_ALL: löscht alle Daten in den Tabellen DELETE : löscht die übergebenen Daten INSERT: fügt die übergebenen Daten in die Tabellen ein UPDATE: aktualisiert die vorhandenen Daten mit den übergebenen Daten REFRESH: aktualisiert vorhandene Daten, fügt nicht vorhandene Daten hinzu 400
95 Test: erlaubtes public void testgebotaufneuewareok() { try { int anzahl = con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (42, 4, 102, 3.00)"); Assert.assertTrue("statt 1, " + anzahl + "Datensaetze geaendert", anzahl == 1); } catch (SQLException e) { Assert.fail("erlaubtes INSERT gescheitert: " + "VALUES (42, 4, 102, 3.00)"); } } // Hinweis: Test mit weiteren erlaubten INSERT, UPDATE, // DELETE sinnvoll Etwas kritisch: es wurde eine Zeile eingefügt; wird nicht überprüft, ob sie so im Ergebnis steht 401
96 Erlaubtes Insert, präzise Prüfung (1/2) einfachesinsert.xml <?xml version="1.0" encoding="utf-8"?> <dataset> <Gebot id="1" mnr="1" ware="100" gebot="1.00" /> <Gebot id="2" mnr="1" ware="101" gebot="1.00" /> <Gebot id="3" mnr="1" ware="100" gebot="2.00" /> <Gebot id="42" mnr="4" ware="102" gebot="3.00" /> <Gebot id="4" mnr="2" ware="100" gebot="2.01" /> <Gebot id="5" mnr="3" ware="101" gebot="1.01" /> </dataset> Erinnerung: SQL speichert ohne Reihenfolge, was beim Vergleich zu beachten ist DBUnit ermöglicht lexikographische Sortierung 402
97 Erlaubtes Insert, präzise Prüfung public void testgebotaufneuewarevarianteok() throws Exception { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (42, 4, 102, 3.00)"); IDataSet databasedataset = condbu.createdataset(); ITable actualtable = databasedataset.gettable("gebot"); IDataSet expecteddataset = new FlatXmlDataSetBuilder().build(new File(".\\testdaten\\einfachesInsert.xml")); ITable expectedtable = expecteddataset.gettable("gebot"); } Assertion.assertEquals(new SortedTable(expectedTable), new SortedTable(actualTable)); 403
98 Test, ob Primary Key noch public void testprimarykeyverstoss(){ try { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (42, 2,100,2.01)"); Assert.fail("verbotenes INSERT durchgefuehrt: " + "VALUES (42, 2,100,2.01)"); } catch (SQLException e) { } } 404
99 Test des Triggers public void testhoeheresgebotok() { try { int anzahl = con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (42, 3, 101, 1.02)"); Assert.assertTrue("statt 1, " + anzahl + "Datensaetze geaendert", anzahl == 1); } catch (SQLException e) { Assert.fail("erlaubtes INSERT gescheitert: " + "VALUES (42, 3, 101, 1.02)"); } } 405
100 Test des Triggers public void testgleichesgebotverboten(){ try { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (42, 3, 101, 1.01)"); Assert.fail("verbotenes INSERT durchgefuehrt: " + "VALUES (42, 3, 101, 1.01)"); } catch (SQLException e) { // hier gibt es Unterschiede zwischen DBs Assert.assertTrue("Fehler erwartet, gefunden" + e.getnextexception().getsqlstate(), e.getnextexception().getsqlstate().equals("30009")); } } // fehlen Tests für UPDATE Fehlercode // Anmerkung: Trigger werden vor PRIMARY KEY überprüft Test auf passenden 406
101 14. Views und Datenbankverwaltung Views Änderungen in Views Organisation der DB Zugriffsrechte 407
102 Sichtkonzept (Views 1/2) Sicht (View): mit eigenem Namen bezeichnete, aus Basisrelation abgeleitete, virtuelle Relation (View-Name 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) 408
103 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 409
104 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 typischerweise keine Veränderung auf zusammengesetzten View möglich] 410
105 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 411
106 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 412
107 Organisation der DB (in Oracle) organisieren sich selbst über Tabellen gibt z. B. Tabellen in denen die existierenden Tabellen, Prozeduren und Trigger stehen SELECT * FROM SYS.SYSTABLES; 413
108 Einrichtung von Usern (Oracle / Derby) 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 Derby CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY( 'derby.user.ich', 'ich'); CREATE SCHEMA ich AUTHORIZATION ich; 414
109 Verwaltung einer Datenbank Für DB-Projekte gibt es meist zwei Administratoren DB-Systemadministratoren: Physikalische Einrichtung von (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 415
110 Systemprivilegien GRANT <privilege-list> TO <user-list> PUBLIC [WITH ADMIN OPTION]; PUBLIC: jeder erhält das Recht ADMIN OPTION: Empfänger darf 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) 416
111 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 417
112 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 418
113 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! 419
114 Objektprivilegien (1/3) [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 ]; 420
115 Objektprivilegien (2/3) <object>: TABLE, VIEW, PROCEDURE/FUNCTION, TYPE Tabellen und Views: Genauere Einschränkung für INSERT, REFERENCES und UPDATE durch <column-list> <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 421
116 Objektprivilegien (3/3) 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 Abfrage von Eigenschaften über Systemtabellen 422
117 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 423
118 Zugriffsrechte Zugriffsrechte an Account gekoppelt Ausgangsrechte vom DBA vergeben, Derby: DB-Erzeuger 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 424
119 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> 425
120 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]; 426
121 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; 427
122 Beispiel: Konfiguration von Derby Während fast alle Konzepte der relationalen sich in allen Systemen stark ähneln, ist die eigentliche DB- Konfiguration extrem systemindividuell Derby kann zur Nutzerverwaltung an LDAP angeschlossen werden, weitere DB nutzen oder lokalen, zur DB gehörenden Bereich Derby bietet dazu Konfigurationseinstellungen für die gesamte DB-Installation (config-datei) für einzelne Änderungen von Eigenschaften können direkt wirken erst nach einem Neustart der DB wirksam sein erst nach dem Neustart des DB-Servers wirksam sein 428
123 Beispiel: Einstellungen für eine Datenbank 429
12. Programmierung in der Datenbank
12. Programmierung in der Datenbank Motivation für Programme in der Datenbank Aufbau von serverseitigen Programmen Ausnahmebehandlung Erstellung von Triggern 305 Erweiterung relationaler Einbettung von
13. Testen von DB-Software
13. Testen von DB-Software Kurzeinführung JUnit Regeln zur Testerstellung Nutzung von DBUnit 378 Einschub: Testen mit JUnit Framework, um den Unit-Test eines Java-Programms zu automatisieren einfacher
11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker
11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 345 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle
11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker
11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 298 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle
Transaktionsmanagement - Einführung. Prof. Dr. T. Kudraß 1
Transaktionsmanagement - Einführung Prof. Dr. T. Kudraß 1 Einführung Nebenläufige Ausführung von Benutzerprogrammen wesentlich für gute Performance des DBMS Weil Plattenzugriffe häufig und relativ langsam
12. Views und Datenbankverwaltung. Views Änderungen in Views. Organisation der DB. Zugriffsrechte. Datenbanksysteme Prof. Dr.
12. Views und Datenbankverwaltung Views Änderungen in Views Organisation der DB Zugriffsrechte 282 Sichtkonzept (Views 1/2) Sicht (View): mit eigenem Namen bezeichnete, aus Basisrelation abgeleitete, virtuelle
Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1
Kapitel 10 JDBC und SQLJ 1 JDBC und SQLJ Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++, COBOL, ADA (embedded SQL) bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL) Was ist mit
Isolationsstufen für Transaktionen. Dr. Karsten Tolle
Isolationsstufen für Transaktionen Dr. Karsten Tolle Probleme bei Transaktionen Gewährleistung der Isolation Sperren kein Lost Update Read 1 (Accounts[13]) Read 2 (Accounts[13]) Write 2 (Accounts[13],101.000)
Transaktionen in Praxis. Dr. Karsten Tolle Vorl
Transaktionen in Praxis Dr. Karsten Tolle Vorl. 13.06.2017 Probleme bei Transaktionen Lost Update und Inconsistent Retrieval Sichtweise vom Benutzer Auszug aus SQL 92 1) P1 ("Dirty read"): SQL-transaction
Transaktionen in Praxis. Dr. Karsten Tolle Vorl
Transaktionen in Praxis Dr. Karsten Tolle Vorl. 12.12.2018 Probleme bei Transaktionen Lost Update und Inconsistent Retrieval Sichtweise vom Benutzer Auszug aus SQL 92 1) P1 ("Dirty read"): SQL-transaction
Eigenschaften von TAs: ACID-Prinzip
Transaktionsparadigma Definition: Transaktion ununterbrechbare Folge von DML-/DDL-Befehlen begin transaction --- end transaction begin: meist implizit mit ersten Datenbankzugriff end: commit (work) oder
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit.
Gruppe A Bitte tragen Sie SOFORT und LESERLICH Namen und Matrikelnr. ein, und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS 21.06.2018 DATENMODELLIERUNG 2 (184.790) DATENBANKSYSTEME (184.686) GRUPPE
12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL
12. Datenschutz: Zugriffsrechte in SQL 12-1 Datenschutz: Zugriffsrechte in SQL 12. Datenschutz: Zugriffsrechte in SQL 12-2 Inhalt 1. Anforderungen, Allgemeines 2. Die SQL-Befehle GRANT und REVOKE 3. Sichten
Willkommen. Datenbanken und Anbindung
Willkommen Datenbanken und Anbindung Welche stehen zur Wahl? MySQL Sehr weit verbreitetes DBS (YT, FB, Twitter) Open-Source und Enterprise-Version Libs in C/C++ und Java verfügbar Grundsätzlich ist ein
Überblick Felix Naumann. Zugriffsrechte Zugriffsrechte erzeugen Zugriffsrechte prüfen Zugriffsrechte vergeben Zugriffsrechte entziehen
Datenbanksysteme I Zugriffskontrolle (kleiner Einschub) 18.1.2007 Felix Naumann Überblick 2 Zugriffsrechte Zugriffsrechte erzeugen Zugriffsrechte prüfen Zugriffsrechte vergeben Zugriffsrechte entziehen
Datenschutz: Zugriffsrechte in SQL
12. Datenschutz: Zugriffsrechte in SQL 12-1 12. Datenschutz: Zugriffsrechte in SQL 12-2 Inhalt Datenschutz: Zugriffsrechte in SQL 1. Anforderungen, Allgemeines 2. Die SQL-Befehle GRANT und REVOKE 3. Sichten
Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis
Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS DATENBANKSYSTEME VU 184.686 11. 3. 2014 Kennnr. Matrikelnr.
Schnellübersichten. SQL Grundlagen und Datenbankdesign
Schnellübersichten SQL Grundlagen und Datenbankdesign 5 Datenbanken 2 6 Tabellen erstellen und verwalten 3 7 Daten einfügen, aktualisieren, löschen 4 8 Einfache Datenabfragen 5 9 Schlüsselfelder und Indizes
Praktische SQL-Befehle
Praktische SQL-Befehle Datenbanksysteme I WiSe 2018/2019 Todor Ivanov DB1 WS2018 1 Praktische SQL-Befehle Nested Selects Inserts Updates Views Triggers Constraints Functions Voraussetzung: Laptop + MySQL/
Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.
Thema: Datenbanken Dozent: Prof. Dr. Stephan Kleuker Seitennummer: Seite 1 von 12 Studiengang: Technische Informatik Studiensemester: 3 Datum: Bearbeitungszeit: 120 Minuten Matrikelnummer: Name: Dies ist
Beispiel zur referentiellen Integrität
3. Der SQL-Standard 3.14. Integrität und Trigger Seite 1 Beispiel zur referentiellen Integrität CREATE TABLE T1( k1 NUMERIC NOT NULL PRIMARY KEY); CREATE TABLE T2( k2 NUMERIC NOT NULL PRIMARY KEY, k1 NUMERIC,
6. Trigger Charakterisierung von Triggern. 6. Trigger. Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen
6. Trigger Charakterisierung von Triggern 6. Trigger Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen auf einer Relation ausgelöst werden. Trigger stellen eine einfache
Grundlagen von Datenbanken. Referentielle Aktionen, Sichten, Serialisierbarkeit und Locking
Grundlagen von Datenbanken Referentielle Aktionen, Sichten, Serialisierbarkeit und Locking SQL DDL: Referentielle Aktionen (1/3) Potentielle Gefährdung der referentiellen Integrität durch Änderungsoperationen
7. Transaktionsverwaltung
7. Transaktionsverwaltung Motivation Transaktionen erlauben Bündelung von Operationen und gelten als wichtigster Beitrag des Bereichs Datenbanken zur Informatik; sie werden heute auch außerhalb von Datenbanksystemen
6. Updates in SQL 6-1. Inhalt. 1. Update-Kommandos in SQL. 2. Transaktionen. 3. Gleichzeitige Zugriffe
6. Updates in SQL 6-1 Inhalt 1. Update-Kommandos in SQL 2. Transaktionen 3. Gleichzeitige Zugriffe 6. Updates in SQL 6-2 Updates in SQL: Übersicht SQL-Befehle zur Änderung des DB-Zustands: 1. INSERT: Einfügung
Transaktionsverwaltung
Transaktionsverwaltung VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Transaktionsverwaltung Transaktionen:
Oracle & Java HOW TO
Oracle & Java HOW TO Helge Janicke, Niels-Peter de Witt, Karsten Wolke 21. Januar 2002 Inhaltsverzeichnis 1 Java-Anbindung an Oracle-DB 2 2 Benötigte Programme und Daten 2 3 Einbinden der Klassen 2 4 Aufbau
Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1
Transaktionen & ACID Dr. Christian Senger Transaktionen & ACID 1 PC Architekturen Kein Mehrbenuzterbetrieb Recovery? Benutzerabbrüche? PC Lokale Datenbank PC PC PC PC PC PC-System DBMS PC PC PC PC Internet
Client/Server-Programmierung
Client/Server-Programmierung WS 2017/2018 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 14. September 2017 Betriebssysteme / verteilte
Triggern. Change Data Capture
Triggern. Change Data Capture Triggers Was sind Triggers? Eine bestimmte Art von gespeicherte Prozedur, die automatisch ausgeführt wird wenn eine DML oder DDL Anweisung ausgeführt wird Eine Menge von Aktionen,
Praktikum: Datenbankprogrammierung in SQL/ORACLE. Zugriffsrechte an ORACLE-Account gekoppelt initial vom DBA vergeben SCHEMAKONZEPT
74 Zugriffsrechte BENUTZERIDENTIFIKATION Benutzername Password sqlplus /: Identifizierung durch UNIX-Account ZUGRIFFSRECHTE INNERHALB ORACLE Zugriffsrechte an ORACLE-Account gekoppelt initial vom DBA vergeben
Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7
Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7 Aufgabe 2 + 3: Datenbanksysteme I import java.sql.*; import oracle.jdbc.driver.*;
Beispiel: DB-Mock (1/7)
Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau
Relationales Datenbanksystem Oracle
Relationales Datenbanksystem Oracle 1 Relationales Modell Im relationalen Modell wird ein relationales Datenbankschema wie folgt beschrieben: RS = R 1 X 1 SC 1... R n X n SC n SC a a : i=1...n X i B Information
Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt.
432 433 434 435 Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 436 437 438 439 440 441 442 443 Die verkürzte
Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion
Überblick über Stored Functions Funktionen Eine Funktion ist ein benannter PL/SQL- Block, der einen Wert zurückgibt. Eine Funktion kann in der Datenbank als Objekt zur wiederholbaren Ausführung gespeichert
fbi h_da Datenbanken Kapitel 7: Transaktionsmanagement Schestag Datenbanken (Cnam) Kapitel 7-1
Datenbanken Kapitel 7: Transaktionsmanagement Schestag Datenbanken (Cnam) Kapitel 7-1 Transaktionsmanagement Inhalte des Kapitels Das Transaktionskonzept Konkurrierende Zugriffe und Sperren (Concurrency
Abfragen (Queries, Subqueries)
Abfragen (Queries, Subqueries) Grundstruktur einer SQL-Abfrage (reine Projektion) SELECT [DISTINCT] {* Spaltenname [[AS] Aliasname ] Ausdruck} * ; Beispiele 1. Auswahl aller Spalten SELECT * ; 2. Auswahl
Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13
Auf einen Blick Vorwort... 13 Teil 1 Vorbereitung Kapitel 1 Einleitung... 17 Kapitel 2 SQL der Standard relationaler Datenbanken... 21 Kapitel 3 Die Beispieldatenbanken... 39 Teil 2 Abfrage und Bearbeitung
Datenmodelle und Datenbanken 2
Datenmodelle und Datenbanken 2 Prof. N. Fuhr Institut für Informatik und Interaktive Systeme Arbeitsgruppe Informationssysteme 24. Februar 2005 Hinweise zur Bearbeitung Die Zeit läuft erst, wenn Sie alle
Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.
Seminar 2 SQL - DML(Data Manipulation Language) und DDL(Data Definition Language) Befehle. DML Befehle Aggregatfunktionen - werden auf eine Menge von Tupeln angewendet - Verdichtung einzelner Tupeln yu
Datenbanksysteme I. Aufgabe 1: Erstellen einer Multimedia-Datenbank. Grundlage sind wiederum bereits implementierte Methoden aus Übungsblatt 6:
Universität Augsburg, Institut für Informatik Wintersemester 2010/2011 Prof. Dr. W. Kießling 17. Dez. 2010 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 7 Aufgabe 1: Erstellen einer Multimedia-Datenbank
Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13
Auf einen Blick Vorwort 13 Teil 1 Vorbereitung Kapitel 1 Einleitung 17 Kapitel 2 SQL - der Standard relationaler Datenbanken 21 Kapitel 3 Die Beispieldatenbanken 39 Teil 2 Abfrage und Bearbeitung Kapitel
Übersicht der wichtigsten MySQL-Befehle
Übersicht der wichtigsten MySQL-Befehle 1. Arbeiten mit Datenbanken 1.1 Datenbank anlegen Eine Datenbank kann man wie folgt erstellen. CREATE DATABASE db_namen; 1.2 Existierende Datenbanken anzeigen Mit
Kapitel 2 Transaktionsverwaltung. Skript 2009 Matthias Schubert
Kapitel 2 Transaktionsverwaltung Skript 2009 Matthias Schubert Dieses Skript basiert auf dem Skript zur Vorlesung Datenbanksysteme II von Prof. Dr. Christian Böhm gehalten im Sommersemester 2007 an der
Webbasierte Informationssysteme
SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Was ist eine relationale Datenbank? Menge von Relationen (=Tabellen) und Constraints (=Integritätsbedingungen)
Transaktionsverwaltung
Kapitel l2 Transaktionsverwaltung Skript 2009 Matthias Schubert Dieses Skript basiert auf dem Skript zur Vorlesung Datenbanksysteme II von Prof. Dr. Christian Böhm gehalten im Sommersemester 2007 an der
Übung PL/SQL Trigger Lösungen
Übung PL/SQL Trigger Lösungen 1) Gebe das aktuelle Datum aus. Wofür steht dual? Ändere das Datum für Deine aktuelle Session auf das Format Jahr (4 Stellen) Monat (2 Stellen) Tag (2 Stellen)[Leerzeichen]Stunde
10 Transaktionen Änderungen verwalten
Eindruck eines Einnutzer- Systems Datenbanken werden meist von vielen Nutzern fast gleichzeitig genutzt. Dieses Kapitel zeigt Ihnen die möglichen Gefahren und Lösungsansätze. In den bisherigen Kapiteln
Datenbanksysteme. Transaktionen. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen
Datenbanksysteme Transaktionen Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Sommersemester 2019 Übersicht Transaktionen Motivation ACID-Eigenschaften Recovery Ursachen für Recovery
Tag 4 Inhaltsverzeichnis
Tag 4 Inhaltsverzeichnis Normalformen Problem Formen (1-4) Weitere Formen Transaktionen Synchronisationsprobleme Überblick Autocommit Locking Savepoints Isolation levels Übungen RDB 4-1 Normalformen Problematik
Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn
Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher
Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8
Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez. 2009 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8 Aufgabe 1: JDBC 2.0 und Scrollable Result Sets Datenbanksysteme
Oracle 10g Einführung
Kurs Oracle 10g Einführung Teil 5 Einführung Timo Meyer Administration von Oracle-Datenbanken Timo Meyer Sommersemester 2006 Seite 1 von 16 Seite 1 von 16 Agenda 1 Tabellen und Views erstellen 2 Indizes
Transaktionen. Concurrency Management in MS SQL Server
Transaktionen Concurrency Management in MS SQL Server Transaktionen in SQL Server SQL Server bietet die Möglichkeit, eine Reihe von Datenbankoperationen (Änderungen) in einem logischen Vorgang zu gruppieren
Klausur Datenbanken II
Klausur Datenbanken II 8.3.2001 Name Vorname Semester Matrikelnr Aufgabe Punkte maximal 1 8 2 8 3 3 4 3 5 4 6 6 7 6 8 6 9 [Zusatz] [4] Summe 44 Punkte erreicht Bitte geben Sie die Lösungen möglichst direkt
JUnit 4 Tutorial. Wolfgang Stöttinger
JUnit 4 Tutorial Wolfgang Stöttinger JUnit 4 Tutorial... 1 1 Einführung in JUnit 4... 3 1.1 Wie funktioniert JUnit?... 3 1.2 Annotations... 3 1.2.1 Test Annotation... 3 1.2.2 Before Annotation... 3 1.2.3
Datenbanken Konsistenz und Mehrnutzerbetrieb III
Datenbanken Konsistenz und Mehrnutzerbetrieb III 1. Oracle Architektur! Komponenten des Oracle Servers! Zugriff über Netzwerk 2. Zugriffsrechte! Starten und Schließen der Datenbank! Nutzer und Rollen!
Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1
Kapitel 9 Embedded SQL Vorlesung Datenbanken 1 Embedded SQL (siehe auch [Date00]) Arbeitsweise ähnlich PL/SQL, allerdings: Normale Programmiersprache mit eingestreuten SQL-Befehlen und anderen Befehlen
Datenbanksysteme 2013
Datenbanksysteme 2013 Kapitel 8: Datenintegrität Vorlesung vom 14.05.2013 Oliver Vornberger Institut für Informatik Universität Osnabrück Datenintegrität Statische Bedingung (jeder Zustand) Dynamische
3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien
CREATE TABLE SPEND_STAT ( S_STATUS VARCHAR2(1), STAT_TXT VARCHAR2(15), PRIMARY KEY (S_STATUS) ENABLE ) ; 3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien DDL:
Create-Table-Befehl. CREATE TABLE Tabellenname ( { Spalte { Datentyp Gebietsname } [ Spaltenbedingung [ ] ] Tabellenbedingung }
Create-Table-Befehl CREATE TABLE Tabellenname ( { Spalte { Datentyp Gebietsname } [ Spaltenbedingung [ ] ] Tabellenbedingung } [, ] ) Liste der wichtigsten Datentypen in SQL INTEGER INT SMALLINT NUMERIC(x,y)
Die Anweisung create table
SQL-Datendefinition Die Anweisung create table create table basisrelationenname ( spaltenname 1 wertebereich 1 [not null],... spaltenname k wertebereich k [not null]) Wirkung dieses Kommandos ist sowohl
Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis
Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis bereit. PRÜFUNG AUS DATENBANKSYSTEME VU 184.686 04. 05. 2016 Kennnr. Matrikelnr.
7 DCL (Data Control Language)
7 DCL (Data Control Language) 7 In diesem Kapitel werden wir die der SQL-Befehle für Transaktionen und für die Vergabe von Privilegien kennen lernen. Eine der wichtigsten Eigenschaften einer Datenbank
Transaktionen in der Praxis. Dr. Karsten Tolle
Transaktionen in der Praxis Dr. Karsten Tolle Praxisbeispiel in Java Connection con = null; try { con = DriverManager.getConnection("jdbc:db2:sample"); } catch (Exception e) { e.printstacktrace(); } con.setautocommit(false);
SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99
SQL Früherer Name: SEQUEL SQL: Structured Query Language Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL ist eine deklarative Anfragesprache Teile von SQL Vier große Teile:
Oracle SQL. Seminarunterlage. Version vom
Seminarunterlage Version: 12.16 Version 12.16 vom 12. Oktober 2017 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen
Datenbank und Tabelle mit SQL erstellen
Datenbank und Tabelle mit SQL erstellen 1) Übung stat Mit dem folgenden Befehlen legt man die Datenbank stat an und in dieser die Tabelle data1 : CREATE DATABASE stat; USE stat; CREATE TABLE data1 ( `id`
Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1
Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Was ist JDBC? Hauptsächlich eine Sammlung von Java Klassen und Schnittstellen für eine einfache Verbindung von Java Programmen
Client/Server-Programmierung
Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 20. November 2015 Betriebssysteme / verteilte
ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski. www.iit.tu-cottbus.de
08 Datenbanken Übung SQL Einführung Eckbert Jankowski www.iit.tu-cottbus.de Datenmodell (Wiederholung, Zusammenfassung) Objekte und deren Eigenschaften definieren Beziehungen zwischen den Objekten erkennen/definieren
Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6
Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez. 2011 Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6 Datenbanksysteme I Aufgabe 1: Deklarative Änderungsoperationen
Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.
Thomas Studer Relationale Datenbanken: Von den theoretischen Grundlagen zu Anwendungen mit PostgreSQL Springer, 2016 ISBN 978-3-662-46570-7 Dieser Foliensatz darf frei verwendet werden unter der Bedingung,
DB I S. 1 Referentielle Aktionen [10 P.] Gegeben sei folgende Datendefinition:
1 Referentielle Aktionen Gegeben sei folgende Datendefinition: [10 P.] CREATE TABLE Wissenschaftler( SVNr int PRIMARY KEY, Vorname varchar(25) NOT NULL, Nachname varchar(25) NOT NULL, Gehalt int NOT NULL
Kapitel 8: Zugriffskontrolle
Kapitel 8: Zugriffskontrolle 8. Zugriffskontrolle 8. Datenbanken enthalten häufig vertrauliche Informationen, die nicht jedem Anwender zur Verfügung stehen dürfen. Außerdem wird man nicht allen Anwendern
Üben von DDL und DML. Ergebnis:
SQL DDL Üben von DDL und DML https://www.jdoodle.com/execute-sql-online Ergebnis: Befehlsgruppen in SQL DDL Data Definition Language DML Data Manipulation Language CREATE: Tabellen anlegen DROP: Tabellen
View. Arbeiten mit den Sichten:
View "individuelle Sicht" (vgl. 3-Schichten-Modell) virtuelle Tabellen: in der DB wird nicht deren Inhalt, sondern nur die Ableitungsregel gespeichert. Arbeiten mit den Sichten: Anfragen: kein Problem.
Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15
Vorwort..................................................... 13 Kapitel 1 Einleitung.......................................... 15 Kapitel 2 SQL der Standard relationaler Datenbanken... 19 2.1 Die Geschichte................................
Datenbanksysteme I WS 18/19 Teillösung Übungsblatt 4-6
Datenbanksysteme I WS 18/19 Teillösung Übungsblatt 4-6 Universität Leipzig, Institut für Informatik Abteilung Datenbanken Prof. Dr. E. Rahm, V. Christen, M. Franke DBS1 Blatt 4 Mitschreibbar 2 Welche Autoren
Probeklausur Datenbanktechnologie
Probeklausur Datenbanktechnologie Prof. Dr. Ingo Claßen Name: Vorname: MatrNr: Bewertung 1 25 2 15 3 10 4 10 Übung 40 Σ = 100 Punkte Punkte: Note: Notenspiegel 100 95 1,0 94 90 1,3 89 85 1,7 84 80 2,0
Inhaltsverzeichnis. Vorwort 13. Kapitel 1 Einleitung 15
Vorwort 13 Kapitel 1 Einleitung 15 Kapitel 2 SQL-der Standard relationaler Datenbanken... 19 2.1 Die Geschichte 19 2.2 Die Bestandteile 20 2.3 Die Verarbeitung einer SQL-Anweisung 22 2.4 Die Struktur von
Es geht also im die SQL Data Manipulation Language.
1 In diesem Abschnitt wollen wir uns mit den SQL Befehlen beschäftigen, mit denen wir Inhalte in Tabellen ( Zeilen) einfügen nach Tabelleninhalten suchen die Inhalte ändern und ggf. auch löschen können.
Enterprise JavaBeans Überblick
Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.
Inhaltsverzeichnis. Inhaltsverzeichnis
Inhaltsverzeichnis Das Script für die Lehrveranstaltung Datenmanagement wurde im Wintersemester 2007/2008 komplett überarbeitet und neu strukturiert. Wir bitten darum, eventuelle Fehler im Script an Milan
MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.
MySQL-Befehle 1. Einleitung In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. 2. Arbeiten mit Datenbanken 2.1 Datenbank anlegen Eine Datenbank kann man wie folgt
Tag 4 Inhaltsverzeichnis
Tag 4 Inhaltsverzeichnis Normalformen Problem Formen (1-4) Weitere Formen Transaktionen Synchronisationsprobleme Überblick Autocommit Locking Savepoints Isolation levels Übungen RDB 4-1 Normalformen Problematik
4.14 Integrität und Trigger
4.14 Integrität und Trigger Im Allgemeinen sind nur solche Instanzen einer Datenbank erlaubt, deren Relationen die der Datenbank bekannten Integritätsbedingungen (IB) erfüllen. Integritätsbedingungen können
Erzeugung und Veränderung von Tabellen
Datenbanken - Objekte Erzeugung und Veränderung von Tabellen Objekt Tabelle View Sequence Index Synonym Basiseinheit zum Speichern; besteht aus Zeilen und Spalten; Logische Repräsentation; kann Teilmengen
Hochschule Karlsruhe Technik und Wirtschaft Fakultät für Informatik und Wirtschaftsinformatik
1. Aufgabe (Normalisierung, 28 Punkte) Das Maklerbüro Foldur-Estate beschäftigt mehrere Makler, die jeweils unterschiedliche Mietwohnungen im Angebot haben. Jede Wohnung hat einen Vermieter, Vermieter
SQL. Datendefinition
SQL Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer oder logischer Natur sein. Das folgende Kapitel beschäftigt sich mit der