PL/SQL <-- --> Datenbanken
SQLJ Syntax
SQLJ Precompile übersetzt #SQLJ statements
String bez; int ProjektNr;
#sql { SELECT Bezeichnung INTO :bez FROM Projekt
WHERE ProjektNr = :ProjektNr FOR UPDATE) // for update
lockt variable
int res =-1;
#sql (CALL ProjektZuteilen (:IN ProjName, :IN AngName, :OUT res) };
//Outparameter muss mit // :OUT deklariert sein
String SalyerSumme ='';
#sql { SET :Salaersumme = AbteilungSaler
(:IN AbtName) };
Bennanter Iterator
#sql iterator AngIterByName (String abtName, String AngName,
int PersNr); //Definition
AngIterName iter; //Deklaration
#sql iter
=
//Aufruf
{ SELECT Abt.Name AS AbtName, Ang.Name AS AngName, PersNr
FROM Abteilung Abt, Abgestellter Ang
WHERE Abt.AbtNr = Ang.AbtNr);
while (iter.next()) //Navigation
{ System.out.println (iter.AbtName() + ' ' +
iter.AngName()
+ ' ' + iter.PersNr();
}
iter.close()
//close
Stored Procedures in Java
Datenbanksicherheit
System Security: Zugrifskontrolle, Benutzerprivilegien,
System-Ressourcen
Data
Security:
Zugriffskontrolle auf Datenobjekte
Benuzter erzeugen
CREATE user IDENTIFIED BY
password;
create session Verbindung zu DB
create
table
Tabelle erzeugen
create user
grant any privilege Systemprivilegien erteilen
create role
grant any role
Beispiel
GRANT create table, create
session, create view TO rudi;
CREATE ROLE Entwickler; //erstellen
GRANT
//modifizieren
create session, create table, create view, create trigger,
create procedure,
create synonym, create sequence, create role
TO Entwickler;
GRANT Entwickler to rudi; //Rolle zuteilen
GRANT object_priv [(colmns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];
ALTER, DELETE,
INSERT, REFERENCES, SELECT, UPDATE, EXECUTE
Beispiele:
GRANT SELECT ON Angestellr TO PUBLIC
//alle Benutzer
GRANT ALL ON Abteilung TO Nueller WITH
GRANT OPTION //darf rechte weiter geben
Rechte entziehen mit REVOKE
REVOKE UPDATE(Salaer) ON Angestellter
FROM Perschef
mittels CRUD MATRIX
CREATE, READ, UPDATE, DELETE
Transaktionen
Fehlersituationen:
lost update (die Modifikation einer
Transaktion geht verloren)
dirty read (Es wird ein Wert gelesen, der
noch nicht mir commit festgeschrieben wurde)
non-repeatable read (Werte werden gelesen,
die gleichzeitig gelesen werden)
Phantom Rows (Eine Abfrage führt zu zwei
verschiedenen Ergebnissen)
Ablaufplan (Schedule)
seriell
eine Transaktion nach der anderen vollständig ausgeführt
nicht-seriell verschiedene parallele ablaufenden Transaktionen werden
verzahnt ausgeführt
konsistent nicht-seriell liefert das selbe Resultat wie ein serieller
Ablaufplan
Sperrprotokolle
(Locks)
optimistische
Verfahren
im Normalfall keine Konflikte, bei commit wird geprüft
x-lock Exklusives
Sperren
s-lock Teil
Sperren, Andere Transaktionen können den Wert nur lesen
Two-phase-locking:
(Kann zu cascading rollback führen)
Auftreten von Deadlocks:
a) Gegenseitiger Ausschluss (mutual
exclusion)
b) Hold and Wait (auf andere Transaktionen warten)
c) Non preemption (resource können nicht entzogen werden)
d) Circular Wait (alle Transaktionen warten auf eine andere
Transaktion)
-> Erkennung mit Resource Request Graph
read uncommited lesen möglich ohne commit abschluss,
sehr schnell
read
commited
lesen erst nach abschluss mit commit (nonrepetable
read, phantom rows)
repeatable
read
garantiert wiederholbare Lesevorgäge
(Synchronisationsaufwand, phantoms)
serializable
garantiert Serialisierbarkeit, bietet Sicherheit
SET TRANSACTION [read only|write only] ISOLATION LEVEL read commited
Recovery (Datensicherung)
Fehlersituationen:
Transaktionsfehler Rollback
Systemfehler
Fehler in DBMS, Recovery
Media
Fehler
Diskcrash, Recovery
Statement-Auditing Überwachung einzelner Gruppen von Operationen
Privileg-Auditing Überwachung der Nutzung von Privilegien
Objekt-Auditing Überwachung einzelner Datenobjekte
Wert basierstes Auditing mittels Triggers.
ADT Abstract Data Type
OID Object Identifier, 16 Byte Systemweit eindeutig
CREATE OR REPLACE TYPE AbtilungsTyp; / -- forward declaration
CREATE OR REPLACE TYPE AngestellterTyp
AS OBJECT
(
PersNr
Integer,
Name
VARCAHR2(20);
AbtMA
REF AbteilungsTyp,
HeimAdresse AdrTyp,
MAP MEMBER FUNCTION sortorder RETURN VARCHAR2
) /
CREATE TABLE Angestellter
OF AngestellterTyp
( PersNr PRIMARY KEY,
abtMA NOT NULL,
Name NOT NULL UNIQUE,
Chef Default NULL
);
INSERT INTO Angestellter
VALUES (110, 'Mueller', 8000,
(SELECT REF(abt) FROM Abteilung abt
//Liefert Referenz OID
WHERE abt.AbtNr=1),
NULL, adrTyp('Seestrasse','Zürich','8008'));
UPDATE Abteilung SET Abtchef
=
(SELECT Ref(ang) FROM Angestellter ang
WHERE ang.PersNr=110)
WHERE Name='Marketing';
SELECT ang.Name, ang.chef.Name FROM Angestellter ang ORDER BY value(ang);
SELECT ang.Name, ang.HeimAdresse.Wohnort FROM Angestellter ang WHERE ang.AbtMA.Name = 'Entwicklung';
PL/SQL <-- --> Datenbanken Übersicht