INGRES-Data Dictionary und Systemkatalog
11 INGRES-Data Dictionary und Systemkatalog
11.3 Abfragen auf Systemtabellen
In
diesem Kapitel werden
das INGRES-Data Dictionary
behandelt und Systemkataloge
beschrieben. Zuerst wird die
INGRES-Master-Datenbank und der Zugriff
auf sie erläutert.
Danach werden die wichtigsten
Tabellen des Systemkatalogs
beschrieben. In einem weiteren Abschnitt werden praktische
Abfragen auf gewählte Systemtabellen
gezeigt.
Die INGRES-Master-Datenbank
(iidbdb)
kennzeichnet eine
Datenbank, die alle übergeordneten Informationen wie
Benutzer- und Datenbanknamen enthält. Weil sie die globale
Information bezüglich aller
Datenbanken eines INGRES-Systems
beinhaltet, kann man sie
als oberste Ebene des INGRES-Data
Dictionarys betrachten.
Die
Master-Datenbank iidbdb wird
bei der Installation
eines INGRES Systems automatisch erstellt. Sie hat
dieselbe Form wie jede
andere INGRES-Datenbank, kann
aber
nur
vom
INGRES-Systemadministrator
geändert werden. Die
Aktualisierung dieser Datenbank wird bei jeder Aktion, wie
etwa bei der Erstellung einer
neuen Datenbank oder bei der
Einrichtung eines neuen Benutzers,
durchgeführt.
Das INGRES-System unterstützt zwei
Dienstprogramme, accessdb
und catalogdb, die
den Zugriff auf iidbdb ermöglichen.
accessdb kann nur
vom INGRES-Systemadministrator benutzt
werden, um iidbdb sowohl zu
ändern als auch abzufragen,
während catalogdb
jedem DBA nur
Abfragen erlaubt, die
ihn
selbst betreffen. Die beiden
Dienstprogramme werden
ausführlich in Kapitel 15
beschrieben.
Eine weitere
Möglichkeit, Abfragen auf
iidbdb zu
erstellen, bieten die von
Benutzern selbst erstellten
Anwendungsprogramme.
Den zweiten, logisch untergeordneten Teil des
INGRES-Data
Dictionarys bildet
der Systemkatalog. Der
Systemkatalog
beinhaltet interne
Informationen, die das
INGRES-System
für
einen reibungslosen Ablauf
benötigt. Im Systemkatalog
befindet sich die Information
über Tabellen, Spalten,
Indexe, Zugriffsrechte, Format-
und Listenprogramme usw.
Diese Information ist für das
einwandfreie Funktionieren des
Systems unerläßlich.
Bei
INGRES besteht der Systemkatalog aus Systemtabellen,
die
in ihrem Aufbau den Benutzertabellen entsprechen. Im
Unterschied zu den
Benutzertabellen haben die Namen
aller
Systemtabellen das Präfix
"ii".
INGRES hat zwei Systemkatalogtypen
- den
Standard-Systemkatalog und
- den erweiterten
Systemkatalog.
Der
Standard-Systemkatalog
ermöglicht dem Benutzer,
die
Informationen über
logische Datenbankobjekte (Tabellen,
Views, Indexe usw.) der
existierenden Datenbanken
abzufragen. Der
erweiterte Systemkatalog enthält
Informationen über
Anwendungen, die mit
QBF, RBF oder
anderen front-end-Produkten von
INGRES erstellt worden
sind.
Der wichtigste
Unterschied zwischen diesen
beiden
Systemkatalogen
ist, daß der
Standard-Systemkatalog die
Systemtabellen mit
allgemein wichtigen Informationen
enthält, während der erweiterte Katalog spezifische
Informationen bezüglich jedes einzelnen
INGRES-Subsystems
besitzt. Deswegen werden wir
im weiteren Verlauf
dieses
Kapitels nur die Tabellen
des Standard-Systemkatalogs
beschreiben. Die Informationen über einzelne Systemtabellen
des erweiterten
Systemkatalogs finden Sie
in den
entsprechenden INGRES-Manualen.
Hinweis.
Die Anwendungen eines Benutzers
haben weder auf
dem
Standard- noch auf dem erweiterten
Systemkatalog direkten
Zugriff. Jede Abfrage
auf Systemtabellen in
einer
Anwendung verwendet die Standard-Katalog-Schnittstelle
("Standard-Catalog-Interface"), um auf Systemtabellen
der beiden
Katalogtypen zuzugreifen. Die
Standard-Katalog-Schnittstelle
besteht aus Views, die
von
INGRES unterstützt werden. Der
Grund dafür liegt
darin,
daß INGRES sich einerseits die
Änderung der Systemtabellen
in
den künftigen Versionen
vorbehält, andererseits dem
Benutzer eine standardisierte
Schnittstelle, die auch in
den künftigen INGRES-Versionen gelten wird, zur
Verfügung
stellen möchte.
Im
folgenden werden die
wichtigsten Views des
Standard-Systemkatalogs mit
den dazugehörigen Spalten
dargestellt.
iitables
Die wichtigste und in den Abfragen meistbenutzte Systemtabelle.
Sie enthält je eine Reihe für die Beschreibung jedes
Objektes
(Tabelle, View oder Index). Die wichtigsten Spalten
dieser Tabelle sind:
Spalte |
Beschreibung |
table_name |
Der Name des Objektes (Tabelle, View oder
Index). |
table_owner |
Der Eigentümer des Objektes. |
create_ date
|
Das Erstellungsdatum des Objektes |
table_type |
Der Objekttyp. "T" definiert eine
Tabelle, "V" ein View und "I" einen Index. |
table_subtype |
Der Typ einer Tabelle bzw. eines Views
bezüglich der Systemzugehörigkeit. "N" definiert ein Objekt einer
lokalen INGRES-Datenbank, "L" ein Objekt aus dem INGRES-Netz und
"I" ein Objekt eines fremden Datenbanksystems |
table_stats |
besagt, ob ein Eintrag des Objektes in der
Systemtabelle iistats vorhanden ist ("Y") oder nicht
("N"). |
table_indexes |
besagt, ob ein Eintrag des Objektes in der
Systemtabelle iiindexes vorhanden ist ("Y") oder nicht
("N"). |
num_rows |
Die geschätzte Reihenanzahl der Tabelle.
Falls die Anzahl unbekannt ist, wird der Wert -1 eingetragen. |
Die geschätzte Anzahl der physikalischen
Seiten, die einer Tabelle gehören. Falls die Anzahl unbekannt ist, wird der Wert -1 eingetragen. |
iicolumns
Diese
Tabelle beinhaltet Information über die Spalten einer
Tabelle
bzw. eines Views.
Für jedes dieser Objekte existieren ein oder
mehrere
Einträge in iicolumns. Die wichtigsten
Spalten dieser Tabelle sind:
Spalte |
Beschreibung |
table_name |
Der Tabellenname. |
table_owner |
Der Eigentümer der Tabelle. |
column_name |
Der Name der Spalte. |
column_datatype |
Der Datentyp der Spalte. |
column_length |
Die physikalische Länge der Spalte. |
column_nulls |
besagt, ob die Spalte NULL-Werte enthalten
darf oder nicht. |
besagt, ob die Spalte einen Teil des
Speicherstruktur-Index bildet. |
iiviews
Diese
Tabelle beinhaltet einen
oder mehrere Einträge für jedes View
einer Datenbank. Die wichtigsten Spalten dieser
Tabelle sind:
Spalte |
Beschreibung |
table_name |
Der Name des Views. |
table_owner |
Der Eigentümer des Views. |
check_option |
besagt, ob das View mit der Angabe
"WITH CHECK OPTION" definiert ist ("Y") oder nicht
("N"). (Für die Definition der Angabe "WITH CHECK OPTION"
siehe Kapitel 11.). |
Der Text, der die Definition des Views
enthält. |
iiindexes
Diese
Systemtabelle beinhaltet je einen Eintrag für jedes Objekt der
Tabelle
iitables vom Typ
"I". Die wichtigsten Spalten sind:
Spalte |
Beschreibung |
index_name |
Der Indexname |
index_owner |
Der Eigentümer des Index. |
base_name |
Der
Name der zugehörigen Tabelle. |
base_owner |
Der Eigentümer der Tabelle. |
besagt, ob jeder Datenwert der indizierten
Spalte nur einmal ("U") oder mehrmals ("D") vorkommen
kann. |
iiindex_columns
Diese
Tabelle beinhaltet je einen
Eintrag für diejenigen Spalten,
die
einen Index bilden. Die
wichtigsten Spalten sind:
Spalte |
Beschreibung |
index_name |
Der Name des Index, der die Spalte enthält. |
index_owner |
Der Eigentümer des Index. |
column_name |
Der
Spaltenname. |
Definiert die Stelle, die die Spalte
innerhalb des Speicherstruktur-Index eines Sekundär-Index einnimmt. |
iistats
Diese Tabelle beinhaltet je einen Eintrag für jede
Spalte, für die Statistiken
vorliegen. Die wichtigsten Spalten dieser
Systemtabelle sind:
Spalte |
Beschreibung |
table_name |
Der Name der Tabelle, zu der die Spalte
gehört. |
table_owner |
Der Eigentümer der Tabelle. |
column_name |
Der Name der Spalte, für die die Auswertung
vorliegt. |
besagt, ob
die Spalte eindeutige ("Y") oder mehrfache Werte
("N") erlaubt. |
Wie
bereits erwähnt, ist
die Form der
System- und
Benutzertabellen identisch.
Deswegen können bei
INGRES
die
Systemtabellen genauso wie
die Benutzertabellen
abgefragt und modifiziert werden.
Die Abfragen auf
Systemtabellen unterscheiden sich nicht von den Abfragen auf
Benutzertabellen.
Die Erlaubnis, eine Systemtabelle zu modifizieren, wird mit
dem Dienstprogramm accessdb erteilt. Die Modifizierung der
Systemtabellen kann auf
keinen Fall empfohlen werden,
weil
dies
weitere Arbeiten mit einer Datenbank unmöglich machen
könnte.
In diesem Abschnitt werden einige
Beispiele gezeigt, die die
Abfragen auf Systemtabellen
behandeln.
Beispiel 11.1
Finden Sie den Tabellentyp und die Anzahl
der Reihen der
Tabelle mitarbeiter.
SELECT table_type, num_rows
FROM iitables
WHERE table_name =
'mitarbeiter';
Das
Ergebnis ist
table_ |
num_rows |
T |
7 |
(1 row)
Wie
aus dem Ergebnis des Beispiels 11.1 ersichtlich, handelt
es sich bei der Tabelle mitarbeiter um
eine Basistabelle
(table_type="T"),
die insgesamt sieben Reihen enthält.
Beispiel 11.2
Finden Sie alle Tabellen der
Beispieldatenbank, die die
Spalte pr_nr enthalten.
SELECT iitables.table_name
FROM iitables, iicolumns
WHERE iitables.table_name =
iicolumns.table_name
AND iicolumns.column_name =
'pr_nr';
Das
Ergebnis ist
table_name |
projekt |
arbeiten |
(2 rows)
Beispiel 11.3
Welche Spaltennamen sind in
mehreren Tabellen der
Beispieldatenbank enthalten?
SELECT DISTINCT column_name
FROM iicolumns
WHERE table_owner ='peter'
GROUP BY column_name
HAVING
COUNT(*) > 1
Das Ergebnis ist
column_name |
m_nr |
abt_
nr |
pr_nr |
(3 rows)
In Beispiel 11.3 wird angenommen, daß
der Benutzer peter der
Eigentümer der Tabellen der
Beispieldatenbank ist.