P8000/WEGA/contrib/ingres/dbs/P.daba

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.