325 lines
12 KiB
Plaintext
325 lines
12 KiB
Plaintext
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
#+--------------------------------------------------------------------------+#
|
|
#| |#
|
|
#| +----------------------------------------------------------------------+ |#
|
|
#| | | |#
|
|
#| | ||||||| | | ||||| |||||| |||||| | |#
|
|
#| | | || | | | | | | | | |#
|
|
#| | | | | | | | | | | | |#
|
|
#| | | | | | | ||| | | |||||| | |#
|
|
#| | | | | | | | | | | | | |#
|
|
#| | | | || | | | | | | | |#
|
|
#| | ||||||| | | ||||| |||||| |||||| | |#
|
|
#| | ||||||| | |#
|
|
#| | | |#
|
|
#| +----------------------------------------------------------------------+ |#
|
|
#| |#
|
|
#| |#
|
|
#| A relational database managment system |#
|
|
#| |#
|
|
#| |#
|
|
#| VERSION 6.3 |#
|
|
#| |#
|
|
#| RELEASE 4 |#
|
|
#| |#
|
|
#+--------------------------------------------------------------------------+#
|
|
##############################################################################
|
|
|
|
|
|
|
|
|
|
|
|
KONTAKTPARTNER:
|
|
|
|
Akademie der Wissenschaften der DDR
|
|
Zentralinstitut fuer Kybernetik und Informationsprozesse
|
|
Koll. Wenzlaff
|
|
Abteilung RS
|
|
Kurstrasse 33
|
|
PSF 1298
|
|
BERLIN
|
|
1086
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
#+--------------------------------------------------------------------------+#
|
|
#| |#
|
|
#| I N S T A L L A T I O N |#
|
|
#| der parallelen Verwendbarkeit von Datenbanken |#
|
|
#| |#
|
|
#+--------------------------------------------------------------------------+#
|
|
##############################################################################
|
|
|
|
|
|
|
|
---- (1) ---- login UNIX - super user
|
|
|
|
|
|
---- (2) ---- cd .../sys/etc
|
|
.../ = login directory von ing_db
|
|
|
|
|
|
---- (3) ---- Nicht P8000: In dem file `Makefile' koennen die
|
|
Definitionen fuer
|
|
OS: Betriebssystemname
|
|
OSLIB: Device-Bibliothek
|
|
OSDIR: Konfigurationsverzeichnis des Betriebssystems
|
|
MAJOR: Major-Device-Nummer fuer das Lock-Device
|
|
geaendert werden. Anschliessend ist das Lock-Device
|
|
in die Betriebssytemkonfiguration einzutragen (i.R.
|
|
`cdevsw' in `OSDIR/c.c' erweitern und die Groesse
|
|
von `nchrdev' kontrollieren).
|
|
Das Lock-Device ist ein char-special-device und kennt
|
|
die Routinen:
|
|
open: extern int dl_open();
|
|
read: extern int dl_read();
|
|
write: extern int dl_write();
|
|
|
|
|
|
---- (4) ---- make /dev/db_lock
|
|
|
|
|
|
---- (5) ---- Eintragen des Aufrufs `/etc/dbserver > /dev/console'
|
|
`/etc/rc' beim Hochfahren (INIT 2)
|
|
|
|
|
|
---- (6) ---- Eintragen des Aufrufs `/etc/unlock dbserver' in
|
|
`/etc/rc' beim Runterfahren (INIT 1)
|
|
|
|
|
|
---- (7) ---- Loeschen des Geraetes `/dev/ing_lock',
|
|
des Programms `/etc/ing_lock' (fruehere Versionen)
|
|
|
|
|
|
---- (8) ---- Betriebssystem neu starten
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
#+--------------------------------------------------------------------------+#
|
|
#| |#
|
|
#| P R O G R A M M B E S C H R E I B U N G |#
|
|
#| |#
|
|
#+--------------------------------------------------------------------------+#
|
|
##############################################################################
|
|
|
|
|
|
|
|
/ E T C / D B S E R V E R
|
|
-------------------------
|
|
Der Datenbankserver ueberwacht alle Transaktionen die auf Datenbanken
|
|
ausgefuehrt werden. Zur Arbeit mit parallel verwendbaren Datenbanken
|
|
muss `/etc/dbserver' gestartet werden, ansonsten kommt die Ausschrift
|
|
|
|
`Datenbank zeitweilig nicht verfuegbar'
|
|
|
|
Der Datenbankserver kann nur vom superuser gestartet werden !
|
|
Der Datenbankserver wird durch das Kommando
|
|
|
|
`/etc/unlock dbserver'
|
|
|
|
vom supersuser oder durch das Kommando
|
|
|
|
`unlock dbserver'
|
|
|
|
vom ING_DB-Systemadministrator wieder abgehaengt.
|
|
|
|
|
|
/ E T C / U N L O C K bzw. . . . / S Y S / B I N / U N L O C K
|
|
------------------------------------------------------------------
|
|
Das Programm `unlock' dient dem Abhaengen des Datenbankservers oder
|
|
einzelnen Prozessen, die der Datenbankserver eingeschlaefert hat. In
|
|
der Kommandoform
|
|
|
|
`/etc/unlock dbserver' bzw. `unlock dbserver'
|
|
|
|
werden der Datenbankserver abgehaengt und alle schlafenden Datenbank-
|
|
prozesse mit einem Fehler aufgeweckt (abnormal beendet). Ein einzel-
|
|
ner Datenbankprozess kann mit
|
|
|
|
`/etc/unlock pid' bzw. `unlock pid'
|
|
|
|
abnormal beendet werden. Das Kommando kann nur durch den superuser
|
|
oder den ING_DB-Systemadministrator verwendet werden. `pid' ist
|
|
die Prozessnummer eines schlafenden Prozesses, die ueber `lockinfo'
|
|
beschafft werden kann. Bei (hoffentlich nicht) auftretenden System-
|
|
verklemmungen sollte nicht der Datenbankserver global, sondern ein
|
|
Prozess beendet werden, der die Verklemmung hervorruft.
|
|
Es duerfen nur schlafende Prozesse mit `unlock' beendet werden, um
|
|
die Konsistenz der Datenbanken nicht zu gefaehrden.
|
|
|
|
*** Systemverklemmungen sind meldepflichtig !
|
|
*** Es mussen die Ausgabe von `lockinfo' und die Aktionen, die die
|
|
*** verklemmten Prozesse ausgefuehrt haben, an den Entwickler einge-
|
|
*** schickt werden.
|
|
|
|
|
|
. . . / S Y S / B I N / L O C K I N F O
|
|
---------------------------------------
|
|
`lockinfo' liefert Informationen zu aktiven Datenbankprozessen und
|
|
den von ihnen gehaltenen Sperren (locks). In der Form
|
|
|
|
`lockinfo db_name'
|
|
|
|
werden alle Prozesse und deren Sperren protokolliert, die auf der Da-
|
|
tenbank `db_name' arbeiten. In der Form
|
|
|
|
`lockinfo'
|
|
|
|
werden alle Prozesse und deren Sperren protokolliert. Aus dem Proto-
|
|
koll ist ersichtlich, welche Prozesse auf welches Ereignis warten,
|
|
d.h. schlafen.
|
|
Beispielausgabe von `lockinfo':
|
|
|
|
DB.SERVER: WAITQUEUE--> 434
|
|
P 433: L 449 L 450
|
|
P 434: L 450 R 449
|
|
L 450 | 2RQ 2LK 0TA S | 0 | 4 | 3233 | 3/ 1 | USE
|
|
L 449 | 2RQ 1LK 1TA E | 0 | 4 | 3233 | 3/ 1 | REL
|
|
|
|
Erlaeuterung:
|
|
Die Ausgabe `WAITQUEUE--> 434' bedeutet, dass der Prozess
|
|
mit der Prozessnummer `434' vom Datenbankserver eingeschlae-
|
|
fert wurde, da er eine Sperre wuenscht, die zur Zeit nicht
|
|
gegeben werden kann.
|
|
Eine durch das Zeichen `P' eingeleitete Zeile beschreibt die
|
|
Sperren, die durch ein Prozess gehalten oder gewuenscht wer-
|
|
den. Die anschliessende Nummer charkterisiert den Prozess.
|
|
Gehaltene Sperren werden durch ein `L' (lock), gewuenschte
|
|
durch ein `R' (request) markiert. Die Nummer kennzeichnet die
|
|
Sperre, die in der folgenden Tabelle beschrieben ist. Die
|
|
Zeile `P 433: L 449 L 450' heisst also, dass der Prozess 433
|
|
die Sperren 449 und 450 haelt. Die Zeile `P 434: L 450 R 449'
|
|
heisst, dass der Prozess 434 die Sperre 450 haelt und die
|
|
die Sperre 449 wuenscht (wesshalb er eingeschlaefert wurde).
|
|
Eine durch das Zeichen `L' eingeleitete Zeile beschreibt die
|
|
Sperren selbst, nach dem `L' folgt die Nummer der Sperre. An-
|
|
schliessend folgen 6 Felder die durch das Zeichen `|' sepa-
|
|
riert werden.
|
|
FELD 1: spiegelt die Sperranforderungen in folgender Form
|
|
wieder `#RQ #LK #TA TYP'. `#RQ' gibt die Zahl der ge-
|
|
gebenen und gewuenschten Sperren an. `#LK' gibt die
|
|
Zahl der gegebenen Sperren an. ' #TA' gibt die Zahl
|
|
der auf der Sperre begonnenen Transaktionen an. Der
|
|
`TYP' kann `S' parallel (shared) oder `E' nicht
|
|
parallel (exclusive) verwendbar sein. Sperren vom Typ
|
|
`S' koennen von mehreren Prozessen gehalten werden,
|
|
Sperren vom Typ `E' nur von einem.
|
|
|
|
FELD 2: gibt die major-device-Nummer des Geraets an, auf
|
|
dem die Datenbank montiert ist (s. DBDEV).
|
|
|
|
FELD 3: gibt die minor-device-Nummer des Geraets an, auf
|
|
dem die Datenbank montiert ist (s. DBDEV).
|
|
|
|
FELD 4: gibt die inode-Nummer der Datenbank an (s. DBINO).
|
|
|
|
FELD 5: gibt das TID (Tupelidentifier) der Relation an, die
|
|
gesperrt wurde. Ein TID besteht aus zwei Teilen, der
|
|
Seitennummer `P' und der Zeilennummer `L' getrennt
|
|
durch das Zeichen `/' (s. DBREL).
|
|
|
|
FELD 6: gibt eine Lockspezifikation oder eine Seitennummer
|
|
an. Als Lockspezification kann `CS', `USE' oder `REL'
|
|
erscheinen. `CS' markiert eine kritische Region
|
|
(critical section), `USE' markiert die Relation als
|
|
in Benutzung und `REL' sperrt die Relation selbst.
|
|
Erscheint eine Nummer, so ist die Sperre eine Seiten-
|
|
sperre, d.h. es wird nur ein Abschnitt der Relation
|
|
gesperrt.
|
|
Die Zeile `L 450 | 2RQ 2LK 0TA S | 0 | 4 | 3233 | 3/ 1 | USE'
|
|
beschreibt die Sperre 450. Sie wird von 2 Prozessen gehalten
|
|
(2RQ und 2LK), es liegen keine Transaktionen an (0TA). Der
|
|
Sperrtyp ist parallel verwendbar, weswegen auch Prozess 433
|
|
und 434 die Sperre gleichzeitig halten. Die Datenbank liegt
|
|
auf major 0 und minor 4 (entspricht /dev/z) und hat die
|
|
inode 3233. Die gesperrte Relation wird durch das TID `3/1'
|
|
gekennzeichnet. Die Angabe `USE' heisst, dass die Relation,
|
|
die durch die Felder 2 bis 5 adressiert wurde, in Benutzung
|
|
ist.
|
|
Die Zeile `L 449 | 2RQ 1LK 1TA E | 0 | 4 | 3233 | 3/ 1 | REL`
|
|
beschreibt die Sperre 449. Sie wird von einem Prozess gehal-
|
|
ten und von einem gewuenscht (2RQ und 1LK), es liegt eine
|
|
Transaktion an (1TA), die Anforderung R449 des Prozesses 434
|
|
ist eine Transaktion. Der Sperrtyp ist nicht parallel ver-
|
|
wendbar, weswegen auch Prozess 434 eingeschlaefert wurde.
|
|
Die Datenbank liegt auf major 0 und minor 4 und hat die
|
|
inode 3233. Die gesperrte Relation wird durch das TID `3/1'
|
|
gekennzeichnet. Die Angabe `REL' heisst, dass die Relation,
|
|
die durch die Felder 2 bis 5 adressiert wurde, gesperrt ist.
|
|
|
|
Eine Verklemmung tritt dann auf, wenn mindestens zwei Prozesse schla-
|
|
fen und jeder mindestens eine Sperre haelt, die der andere anfordert.
|
|
Verklammungen koennen auch komplizierter strukturiert sein und ueber
|
|
Prozessketten gehen.
|
|
|
|
|
|
. . . / S Y S / B I N / D B D E V
|
|
---------------------------------
|
|
Das Kommando `dbdev' liefert zu einer vorzugebenden major- und
|
|
minor-device-Nummer das Geraet, auf dem die Datenbank montiert ist.
|
|
Unter Umstaenden kann ein Geraet mehrere logische Namen besitzen.
|
|
|
|
z.B. koennte `dbdev 0 4' folgendes liefern:
|
|
brw-r----- 2 bin system 0, 4 Jul 21 1988 md4
|
|
crw-r----- 2 bin system 0, 4 Feb 6 09:05 rmd4
|
|
crw-r----- 2 bin system 0, 4 Feb 6 09:05 rz
|
|
brw-r----- 2 bin system 0, 4 Jul 21 1988 z
|
|
|
|
|
|
. . . / S Y S / B I N / D B I N O
|
|
---------------------------------
|
|
Das Kommando `dbino' liefert zu einer vorzugebenden inode-Nummer den
|
|
Namen der zugehoerigen Datenbank.
|
|
|
|
z.B. koennte `dbino 3233' folgendes liefern:
|
|
3233 demo
|
|
|
|
|
|
. . . / S Y S / B I N / D B R E L
|
|
---------------------------------
|
|
Das Kommando `dbrel' liefert zu einer vorzugebenden Datenbank und
|
|
einem TID (Seiten- und Zeilennummer) den Namen der zugehoerigen Re-
|
|
lation.
|
|
|
|
z.B. koennte `dbrel demo 3 1' folgendes liefern:
|
|
3/ 1| 48: |personal |ii |
|
|
`personal' ist der Name der gesuchten Relation, `ii' der Ei-
|
|
gentuemer. Die Angabe `48' ist ein Offset und hier ohne Inte-
|
|
resse.
|