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

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.