Datenbanken II B: Implementierung von DBMS

Werbung
Institut für Informatik - Lehrstuhl Datenbanken
Datenbanken II B: Implementierung von DBMS
Wintersemester 06/07 - Dipl.-Inform. Christian Goldberg, Prof. Dr. Stefan Braß
Übung 4: Phys. Speicherung von Relationen, B+ -Bäume (Abgabe bis 25.01.2007) 10 Punkte
Sie können die gesamte Lösung dieses Übungsblattes auch als Zettel in der Übung oder im
Raum 315 abgeben. Es ist auch erlaubt, für Aufgabe 4.3 JPEG-, PNG-, GIF- oder PDF-Dateien
an die Mail anzuhängen, sofern die gesamte E-Mail dadurch nicht größer als 300 KB wird!
Aufgabe 4.1:
0,5 Punkte
Melden Sie sich als SYSTEM an der Datenbank lxdb2 an und weisen Sie Ihrem selbsterstellten Login die Rolle PRIV CONNECT zu.
Aufgabe 4.2:
6,5 Punkte
Bitte lösen Sie nun die folgenden Aufgaben mit Ihrem selbst erstellten Oracle-Login!
Sie benötigen dazu keine DBA-Rechte.
a) Was ist die Blockgröße in Ihrem System? Teilen Sie z.B. BYTES durch BLOCKS
in der Tabelle USER FREE SPACE oder geben Sie den Eintrag für BLOCK SIZE
in USER TABLESPACES aus.
b) Legen Sie eine Tabelle R an und setzen Sie die Speicherparameter explizit: INITIAL 2 Blöcke, NEXT 2 Blöcke, PCTINCREASE 100%. Die Tabelle sollte eine Spalte A des Typs NUMERIC(5) haben und eine Spalte B des Typs VARCHAR(50). A soll als Primärschlüssel deklariert werden und B als NOT NULL.
c) Berechnen Sie anhand der Informationen in b), wie lang die Zeilen in R sein werden, d.h. wieviele Byte ein Tupel inklusive Verwaltungsinformationen theoretisch
benötigt (siehe Kapitel 3.4 ROW Format und 3.5 DATA Format). Gehen Sie davon aus, dass die Spalte A immer eine positive fünfstellige Zahl und die Spalte B
immer eine Zeichenkette der Länge 26 enthält. Der Eintrag im Row-Directory des
Blockes soll dabei nicht mit berücksichtigt werden, denken Sie aber an die anderen
Verwaltungsinformationen innerhalb der Zeile.
1
d) Legen Sie die folgende PL/SQL Prozedur an:
CREATE OR REPLACE PROCEDURE P AS
N NUMBER;
EXT NUMBER;
BEGIN
N := 10000;
EXT := 1;
WHILE EXT < 3 LOOP
FOR I IN 1..100 LOOP
N := N + 1;
INSERT INTO R VALUES(N,’abcdefghijklmnopqrstuvwxyz’);
END LOOP;
COMMIT;
SELECT COUNT(*) INTO EXT
FROM USER_EXTENTS
WHERE SEGMENT_NAME = ’R’;
END LOOP;
END;
/
Die Prozedur fügt Zeilen mit je einer fünfstelligen Zahl für A und einer Zeichenkette der Länge 26 für B in die Tabelle R ein, bis diese Tabelle drei Extents hat.
Zur Beschleunigung werden immer 100 Zeilen auf einmal eingefügt.
Beachten Sie, dass der Schrägstrich bei Benutzung von SQL*Plus am Ende in der
ersten Spalte stehen muß. Falls Sie die Meldung “Procedure created with compilation errors” bekommen, geben Sie “SHOW ERRORS” ein. Eine Datei mit der Prozedurdeklaration finden Sie unter der folgenden URL:
http://dbs.informatik.uni-halle.de/Lehre/DBIIB WS0607/p.sql.
Nachdem Sie die Prozedur fehlerfrei angelegt haben, führen Sie sie mit folgendem
Kommando aus: “EXECUTE P;”.
Geben Sie an, wieviele Zeilen in die Tabelle eingefügt wurden.
e) Geben Sie eine Liste aller Extents der Tabelle R aus (Hinweis: diese Information
finden Sie in USER EXTENTS): Listen Sie die Nummer des Extents, die Größe
in Kilobyte (1 KB = 1024 Byte), und die Größe in Blöcken auf.
f) Geben Sie alle Blöcke, die Zeilen der Tabelle R enthalten, zusammen mit der Anzahl der Zeilen aus. (Hinweis: Diese Information können Sie aus der Pseudospalte
“ROWID” extrahieren.)
g) Verwenden Sie das ANALYZE TABLE Kommando und lassen Sie sich anschließend die tatsächliche durchschnittliche Länge der Zeilen in R ausgeben. Vergleichen Sie diese mit Ihrem errechneten Wert in c).
2
h) Berechnen Sie über den Wert aus g) und die in a) ermittelte Blockgröße, wieviele
Zeilen in einen Block passen müssten. Beachten Sie dabei auch die Verwaltungsinformationen Block-Header und Row-Directory. Gehen Sie von 10% PCTFREE
aus. Vergleichen Sie dann diesen Wert mit dem Ergebnis aus f).
Aufgabe 4.3:
3 Punkte
Gegeben sei folgender B+ -Baum der Höhe 3 und Ordnung 1 (minimal 1 und maximal 2
Einträge pro Knoten):
Geben Sie den resultierenden B+ -Baum jeweils nach den folgenden 3 Operationen an.
Wenden Sie die einzelnen Operationen immer auf den oben angegebenen B+ -Baum an.
a) Einfügen von 75.
b) Einfügen von 250.
c) Löschen von 62.
Beachten Sie bitte auch die Hinweise im Internet auf der Seite:
http://dbs.informatik.uni-halle.de/Lehre/DBIIB WS0607/index.html.
3
Herunterladen