255 lines
11 KiB
Plaintext
255 lines
11 KiB
Plaintext
##############################################################################
|
|
#+--------------------------------------------------------------------------+#
|
|
#| |#
|
|
#| +----------------------------------------------------------------------+ |#
|
|
#| | | |#
|
|
#| | DDDDDD A BBBBBB A 1 66666 | |#
|
|
#| | D D A A B B A A 1 1 6 | |#
|
|
#| | D D A A B B A A 1 1 6 | |#
|
|
#| | D D AAAAAAA BBBBBB AAAAAAA 1 666666 | |#
|
|
#| | D D A A B B A A 1 6 6 | |#
|
|
#| | D D A A B B A A 1 6 6 | |#
|
|
#| | DDDDDD A A BBBBBB A A 1 66666 | |#
|
|
#| | | |#
|
|
#| | | |#
|
|
#| +----------------------------------------------------------------------+ |#
|
|
#| |#
|
|
#| |#
|
|
#| Relationales Datenbankbetriebssystem |#
|
|
#| |#
|
|
#| |#
|
|
#| VERSION 3 |#
|
|
#| |#
|
|
#| RELEASE 4 |#
|
|
#| |#
|
|
#+--------------------------------------------------------------------------+#
|
|
##############################################################################
|
|
|
|
|
|
|
|
##############################################################################
|
|
#+--------------------------------------------------------------------------+#
|
|
#| |#
|
|
#| I N S T A L L A T I O N |#
|
|
#| der parallelen Verwendbarkeit von DABA16-Datenbanken |#
|
|
#| |#
|
|
#+--------------------------------------------------------------------------+#
|
|
##############################################################################
|
|
|
|
|
|
---- (1) ---- Login MUTOS - Supernutzer
|
|
|
|
|
|
---- (2) ---- cd .../sys/etc
|
|
|
|
|
|
---- (3) ---- make /dev/db_lock
|
|
|
|
|
|
---- (4) ---- Eintragen des Aufrufs `/etc/dbserver > /dev/console'
|
|
in `/etc/rc' bzw. `/etc/rc_csh' (P8000)
|
|
fuer den Systemstart (INIT 2)
|
|
|
|
|
|
---- (5) ---- Eintragen des Aufrufs `/etc/unlock dbserver' in
|
|
`/etc/rc' bzw. `/etc/rc_csh' (P8000) fuer die
|
|
Systembeendigung (INIT 1)
|
|
|
|
|
|
---- (6) ---- MUTOS 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 Daten-
|
|
banken ausgefuehrt werden. Zur Arbeit mit parallel verwendbaren
|
|
Datenbanken muss `/etc/dbserver' gestartet werden. Ansonsten er-
|
|
scheint die Ausschrift
|
|
|
|
`Datenbank zeitweilig nicht verfuegbar'
|
|
|
|
Der Datenbankserver kann nur vom MUTOS-Supernutzer gestartet werden!
|
|
Der Datenbankserver wird durch das Kommando
|
|
|
|
`/etc/unlock dbserver'
|
|
|
|
des MUTOS-Supernutzers oder durch das Kommando
|
|
|
|
`unlock dbserver'
|
|
|
|
des DABA16-Systemverantwortlichen 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
|
|
einzelner Prozesse, 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 MUTOS-Super-
|
|
nutzer oder den DABA16-Systemverantwortlichen verwendet werden.
|
|
`pid' ist die Prozessnummer eines schlafenden Prozesses, die ueber
|
|
`lockinfo' beschafft werden kann. Bei (hoffentlich nicht) auftreten-
|
|
den Systemverklemmungen 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 dbname'
|
|
|
|
werden alle Prozesse und deren Sperren protokolliert, die auf der Da-
|
|
tenbank `dbname' 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 einen Prozess gehalten oder gewuenscht wer-
|
|
den. Die anschliessende Nummer charakterisiert 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 den TID (Tupelidentifikator) 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 Sperrspezifikation oder eine Seitennummer
|
|
an. Als Sperrspezifikation 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 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.
|
|
Verklemmungen 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.
|