Systemobjekte, RDB$, MON$, IBE$
<< Firebird 3.0 USAGE Privilegien | IBExpert | SQL Code-Editor >>
Die deutschsprachige Dokumentation wird seit dem 26. Juli 2016 nicht mehr gepflegt. Aktuelle und vollständige Dokumentation finden Sie auf der englischsprachigen Webseite: IBExpert Documentation
Systemobjekte RDB$
, MON$
, IBE$
Firebird/InterBase® und IBExpert erzeugen Systemdatenbankobjekte und speichern ihre eigenen spezifischen Systeminformationen über Datenbankobjekte in Systemtabellen. Systemobjekte werden im DB Explorer rot dargestellt, wenn die Systemoptionen im Datenbank registrieren-Dialog (aufgerufen per Rechtsklick Zusatzeinstellungen/DB Explorer).
Firebird Systemobjekte enthalten den Präfix RDB$
und Firebird Überwachungstabellen enthalten den Präfix MON$
; IBExpert Systemobjekte enthalten den Präfix IBE$
.
Eine neu erzeugte Datenbank ist fast 0,5 MB groß. Dies ist wegen der, von Firebird/InterBase® bei der Erzeugung einer Datenbank automatisch erzeugten Systemtabellen.
Diese Systemtabellen beinhalten einen Reichtum an Information, die von vielen der IBExpert Funktionalitäten benutzt wird. Sie können gern die Information in diesen Systemobjekten ansehen und studieren, aber bitte führen Sie keine Änderungen an die enthaltenen Daten, da es ohne Zweifel zu einer korrupten Datenbank führen wird!
RDB$
Systemobjekte
RDB$
-Objekte gehören zu Firebird und InterBase®. Alle Feldnamen in diesen Tabellen fangen zur einfachen Identifikation auch mit RDB$
an. Sie beinhalten folgende Tabellen:
Datenbankbezogene Systemtabellen
RDB$DATABASE
: die meisten Systemtabellen sehen eine Beschreibungs-Spalte vor, als Unterstützung der Datenbankdokumentation. Die Datenbankbeschreibung kann im SQL Assistent auf der Beschreibung-Seite spezifiziert und angezeigt werden. Die Datenbankbeschreibung wird auch in der Generiere HTML Dokumentation einbezogen, sofern die Option, Beschreibungen aufnehmen ..., aktiviert ist. Diese Tabelle beinhaltet auch eineRDB$CHARACTER_SET_NAME
-Spalte, die den Standardzeichensatz anzeigt.RDB$FILE
: verwaltet alle Sekundärdateien und Datenbank Shadow Dateien, wenn sie vorhanden sind. DieRDB$FILE_SEQUENCE
-Spalte beinhaltet eineSMALLINT
-Nummer, die die Dateireihenfolge bestimmt. Maximal 65535 Sekundär- und Shadow-Datenbankdateien sind erlaubt.RDB$PAGES
: verwaltet die Datenbankseiten.RDB$RELATION_ID
zeigt auf die entsprechende Tabelle undRDB$PAGE_TYPE
zeigt an, ob sie eine Daten- oder Index-Seite ist.
RDB$DEPENDENCIES
: zeigt die Abhängigkeiten zwischen Tabellen, Ansichten und Constraints (Beschränkungen).
RDB$DEPENDENT_NAME
gespeichert und das Element, von dem das andere Element abhängig ist, wird in dem RDB$DEPENDED_ON_NAME
-Feld genannt. Ist das Ziel einer Abhängigkeit eine Spalte, dann wird diese in RDB$FIELD_NAME
genannt.
Tabellen- und View-bezogene Systemtabellen
RB$RELATIONS
: alle Tabellen und Views werden hier gespeichert. Viewdefinitionen sind imRDB$VIEW_SOURCE
gespeichert; die binäre Definition inRDB$VIEW_BLR
. Systemtabellen sind mit einer 1 in derRDB$SYSTEM_FLAG
-Spalte beflaggt, Nutzertabellen mit 0. Sollte die Tabelle eine externe Datei sein, befindet sich sein Name in derRDB$EXTERNAL_FILE
-Spalte. Der Tabelleneigentumer ist imRDB$OWNER_NAME
-Feld genannt.RDB$RELATION_FIELDS
: speichert die Spaltendefinitionen der einzelnen Tabellen. Die Reihenfolge, wie die Spalten bei einerSELECT *
-Anweisung erscheinen, wird durch den Wert der SpalteRDB$FIELD_POSITION
spezifiziert, wobei die Spalte mit dem Wert null als Erste erscheint. Jede Tabellenspalte basiert auf einer Domäne, die inRDB$FIELD_SOURCE
angezeigt wird. Ist eine Spalte alsNOT NULL
definiert, dann erhältRDB$NULL_FLAG
den Wert eins. Eine abweichende Sortierreihenfolge findet man in der SpalteRDB$COLLATION_ID
. Zwei neue Spalten wurden in Firebird 3.0 für die Unterstützung von Identity-Spalten hinzugefügt:RDB$GENERATOR_NAME
undRDB$IDENTITY_TYPE
. Weitere Information finden Sie unterIDENTITY
data type.RDB$RELATION_CONSTRAINTS
: Gültigkeitsprüfungen im weitesten Sinne finden sich in dieser Tabelle. Den Namen der Gültigkeitsprüfung finden Sie inRDB$CONSTRAINT_NAME
, den der dazugehörenden Tabelle inRDB$RELATION_NAME
. FürRDB$CONSTRAINT_TYPE
sind die folgenden Werte vorgesehen:PRIMARY
für PrimärschlüsselUNIQUE
für SekundärschlüsselFOREIGN KEY
für FremdschlüsselPCHECK
für selbst definierte Gültigkeitsprüfungen undNOT NULL
für zwingende Eingabe.
RDB$INDICES
: hier können Sie die Index-Namen (RDB$INDEX_NAME
) und die Tabellen-Namen (RDB$RELATION_NAME
) finden. Die zu einer Tabelle gehörenden Indizes werden in der SpalteRDB$INDEX_ID
jeweils mit eins beginnend durchnummeriert. Handelt es sich um einen eindeutigen Index, dann hatRDB$UNIQUE_FLAG
den Wert eins,RDB$INDEX_TYPE
spezifiziert, ob es sich um einen aufsteigenden (0) oder absteigenden (1) Index handelt, undRDB$INDEX_INACTIVE
zeigt inaktive Indizes mit dem Wert 1 an. Indexselektivität wird in der theRDB$STATISTICS
-Spalte gespeichert.RDB$INDEX_SEGMENTS
: diese Tabelle speichert die Spalten, welche den Index bilden. Die Reihenfolge der einzelnen Spalte ergibt sich ausRDB$FIELD_POSITION
.RDB$REF_CONSTRAINTS
: diese Tabelle speichert, wie Schlüsselverletzungen zu behandeln sind. Der Fremdschlüsselname findet man inRDB$CONSTRAINT_NAME
, den des dazugehörenden Primär- oder Sekundärschlüssels inRDB$CONST_NAME_UQ
. Die Spezifikation der Behandlung solcher Schlüsselverletzungen kann getrennt eingestellt werden fürUPDATE
undDELETE
-Fälle, und können inRDB$UPDATE_RULE
undRDB$DELETE_RULE
eingesehen werden. Vorgesehen dafür sind der VorgabewertRESTRICT
sowie die AlternativenNO ACTION
,CASCADE
,SET NULL
andSET DEFAULT
.RDB$CHECK_CONSTRAINTS
: Gültigkeitsprüfungen werden hier gespeichert. Gültigkeitsprüfungen werden über Trigger realisiert, der Triggername steht inRDB$TRIGGER_NAME
, und der Name der Gültigkeitsprüfung inRDB$CONSTRAINT_NAME
. Wenn inRDB$TRIGGER_NAME
der Name einer Spalte statt eines Triggers steht, dann handelt es sich um eineNOT NULL
-Prüfung, diese werden auch in dieser Tabelle gespeichert.RDB$VIEW_RELATIONS
: diese Systemtabelle speichert alle einem View gehörenden Tabellen. Die einzelnen Tabellen werden mitRDB$VIEW_CONTEXT
durchnummeriert. Wird ein Tabellen-Alias verwendet, dann steht dieser inRDB$CONTEXT_NAME
.
Domänenbezogene Systemtabellen
RDB$FIELDS
: hier finden Sie die Definition aller Domänen, einschließlich Datentyp, size, Zeichensatz and Sortierung. Handelt es sich um eine berechnete Spalte, dann finden Sie die dazugehörende SQL-Anweisung inRDB$COMPUTED_SOURCE
.RDB$TYPES
: diese Tabelle speichert Daten- und Objekttypen (VIEW
,TRIGGER
,PROCEDURE
), Zeichensätze und einige andere Informationen.RDB$FIELD_DIMENSIONS
: diese Systemtabelle speichert Array-Definitionen.RDB$CHARACTER_SETS
: hier finden Sie eine vollständige Liste aller Zeichensätze in Ihrer Firebird/InterBase®-Version.RDB$COLLATIONS
: diese Tabelle enthält eine Liste aller verfügbaren Sortierungen für die Zeichensatz-IDs, die inRDB$CHARACTER_SETS
vorhanden sind.
Prozeduren- und triggerbezogene Systemtabellen
RDB$PROCEDURES
: Alle Stored Procedures in einer Datenbank werden in dieser Systemtabelle gespeichert. Den Prozedurnamen findet man inRDB$PROCEDURE_NAME
mit einer durchlaufenden Identifikationsnummer inRDB$PROCEDURE_ID
. Die Zahl der an die Prozedur übergebenen Parameter steht inRDB$PROCEDURE_INPUTS
, die von den Prozedur zurückgegebenen Werte stehen inRDB$PROCEDURE_OUTPUTS
. Der Quellcode wird inRDB$PROCEDURE_SOURCE
gespeichert, und seine binäre Übersetzung inRDB$PROCEDURE_BLR
. Nur der Besitzer einer Prozedur (inRDB$OWNER_NAME
gespeichert) und der SYSDBA dürfen die Rechte an einer Prozedur vergeben. Das Feld,RDB$PACKAGE_NAME
, wurde in Firebird 3.0 hinzugefügt, um Packages-Metadaten zu speichern.RDB$PROCEDURE_PARAMETERS
: diese Tabelle speichert Information über die einzelnen Parameter, und in welchen Prozedur sie verwendet werden. Die einzelnen Parameter werden mit 0 beginnend durchnummeriert. HatRDB$PARAMETER_TYPE
den Wert 0, handelt es sich um einen Eingabeparameter, ein Ausgabeparameter ist durch den Wert eins gekennzeichnet. Dieses Feld referenziert auch die TabelleRDB$FIELDS
.RDB$TRIGGERS
: diese Tabelle beinhaltet eine Liste aller in der Datenbank befindlichen Trigger. Neben dem Triggernamen finden Sie inRDB$RELATION_NAME
den Namen der dazugehörenden Tabelle, den Triggertyp (RDB$TRIGGER_TYPE
) und, wenn mehrere Trigger für eine einzelne Tabelle denselben Wert fürRDB$TRIGGER_TYPE
haben, dann entscheidetRDB$TRIGGER_SEQUENCE
über die Reihenfolge der Ausführung, beginnend mit dem niedrigsten Wert. Bei Gleichheit auch in dieser Spalte entscheidet die alphabetische Reihenfolge des Triggernamens. Der Trigger Quelltext steht inRDB$TRIGGER_SOURCE
und inRDB$TRIGGER_BLR
seine binäre Übersetzung. Deactivierte Trigger werden mit 1 in derRDB$TRIGGER_INACTIVE
-Spalte beflaggt.RDB$PACKAGES
: Für die Speicherung der Package-Metadaten ist in Firebird 3.0 eine neue SystemtabelleRDB$PACKAGES
hinzugekommen.
Userrechtbezogene Systemtabellen
RDB$ROLES
: diese Tabelle beinhaltet die für die Datenbank definierten Role-Namen und die Benutzer, die diese Rollen definierten.RDB$PRIVILEGES
: diese Tabelle speichert die Userrechte und wer sie vergeben hat. DasRDB$PRIVILEGE
-Feld zeigt an, um welches Recht es sich handelt:S
(Select),I
(Insert),U
(Update),D
(Delete),R
(Reference),X
(Execute). Steht inRDB$GRANT_OPTION
der Wert 1, dann darf dieses Recht weitergegeben werden. InRDB$RELATION_NAME
ist angegeben, auf welche Tabelle oder welche Prozedur sich das Recht bezieht, ist es auf eine bestimmte Spalte beschränkt, dann wird diese inRDB$FIELD_NAME
spezifiziert.
Andere Systemtabellen
RDB$EXCEPTIONS
: beinhaltet eine vollständige Liste aller exceptions.RDB$FILTERS
: beinhaltet alle blob filters. Die Routine wird mitRDB$ENTRYPOINT
spezifiziert, der DLL Dateiname mitRDB$MODULE_NAME
.RDB$FUNCTIONS
: beinhaltet alle eingebundenen UDFs in der Datenbank. Die Routine wird mitRDB$ENTRYPOINT
spezifiziert, der DLL Dateiname mitRDB$MODULE_NAME
.RDB$RETURN_ARGUMENT
spezifizert, welcher der Parameter der Rückgabewert ist.RDB$FUNCTION_ARGUMENTS
: Diese Tabelle listet die einzelnen UDF Parameter auf. Die Parameter sind mitRDB$ARGUMENT_POSITION
durchnummeriert, die Parametertypen sind inRDB$FIELD_TYPE
angezeigt, diese Spalte referenziert die Tabelle,RDB$TYPES
. Steht inRDB$MECHANISM
der Wert 0, dann wird der Parameter by value übergeben, bei einer 1, by reference. Insbesondere bei Strings interessant ist die Länge, die inRDB$FIELD_LENGTH
angegeben ist.RDB$CHARACTER_SET_ID
speichert den Zeichensatz.RDB$GENERATORS
: diese Tabelle speichert den Generator-Namen und eine eindeutige Nummer. Der Generatorwert wird nicht in der Systemtabelle gespeichert.RDB$TRANSACTIONS
: diese Systemtabelle speichert Transkationen, die über mehrere Datenbanken erstellt werden. Bei 0 in die Transaktion in limbo, also noch nicht abgeschlossen, bei 1 mitCOMMIT
und bei 2 mitROLLBACK
beendet.
Siehe auch:
englischsprachig:
The mystery of RDB$DB_KEY
MON$
Systemtabellen
Firebird Überwachungstabellen wurden in Firebird 2.1. eingeführt und ermöglichen die Überwachung von Momentaufnahmen in einer laufenden Datenbank (von Transaktionen, Tabellen, etc.) via SQL über einige neue virtualisierte Systemtabellen.
Durch Abfrage dieser Systemtabellen bekommen Sie eine Momentaufnahme der laufenden Aktivitäten in Ihrer Datenbank. Beispielsweise bietet MON$DATABASE
viele Datenbankkopfinformationen, die vorher nicht via SQL erhalten werden konnten: solche Details, wie die On-Disk-Struktur (ODS)-Version, SQL Dialekt, Sweep-Interval, OIT und OAT usw.
Sie können andere Aktivitäten, wie wer mit Ihrer Datenbank verbunden ist, welche Transaktionen und Anweisungen laufen gerade usw. ebenfalls einsehen. Sie können sogar eine laufende Abfrage durch die Ausführung einer DELETE
-Anweisung in MON$STATEMENTS
stornieren.
Wenn Sie die Überwachungstabellen abfragen, ist es wichtig, zu bedenken, dass es sich nur um eine Momentaufnahme handelt.
Firebird 2.1 beinhaltet folgende MON$
Systemtabellen:
MON$DATABASE
: verbundene Datenbank..MON$ATTACHMENTS
: verbundene Clients.MON$TRANSACTIONS
: angefangen Transaktionen.MON$STATEMENTS
: vorbereitete Anweisungen.MON$CALL_STACK
: Aufrufstapel aktiver PSQL Abfragen.MON$IO_STATS
: I/O Statistik.MON$RECORD_STATS
: Rekordebene Statistik.
Weitere Details finden Sie in den Firebird 2.1 Release Notes Kapitel Administrative features, und in den Firebird 2.5 Release Notes.
Folgende Verbesserungen wurde in Firebird 2.5 aufgenommen:
MON$CONTEXT_VARIABLES
: liefert Daten über Kontextvariablen (beinhaltet einen Überblick über alle mitRDB$SET_CONTEXT
gesetzten benutzerdefinierten Kontextvariablen).MON$MEMORY_USAGE
: enthält aktuelle Speichernutzung auf Datenbank-, Session-, Transaktions- bzw. Anweisungsebene in ODS 11.2 und höheren Datenbanken liefert. In diesen Datenbanken ist es auch möglich, eine Klientverbindung von einer anderen Verbindung über dieMON$
-Strukturen zu trennen.- Die ursprüngliche Konfiguration in Firebird 2.1 erlaubte nicht-privilegierte Datenbankbenutzer nur Information über ihre
CURRENT_CONNECTION
zu sehen. In Firebird 2.5 können sie Information für alle Verbindungen, die mit demselben Usernamen authentifiziert sind, abfragen. - Neue
MON$
Metadaten für ODS 11.2 Datenbanken. - Eine Klientverbindung beenden: die
MON$
-Strukturen sind schreibgeschützt. Also sind Benutzer DML-Operationen verboten. Jedoch ist ein Mechanismus eingebaut, der das Löschen von Datensätzen in denMON$STATEMENTS
- undMON$ATTACHMENTS
-Tabellen erlaubt. Dies hat die Auswirkung, laufende Anweisungen abzubrechen und – für ODS 11.2 Datenbanken – Clientsessions zu beenden.
DELETE FROM MON$STATEMENTS
WHERE MON$ATTACHMENT_ID = 32
MICH
"-Verbindung, zu lösen
DELETE FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION
IBE$
Systemobjekte
IBExpert erzeugt eigene Systemobjekte für Features wie Logging und Versionshistorie:
Diese Objekte sollten in keiner Art und Weise geändert werden, sonst werden bestimmte IBExpert Funktionalitäten beeinträchtigt.
IBE$VERSION_HISTORY
Systemtabelle
Für die Tabelle IBE$VERSION_HISTORY
wurde ein spezieller Browser implementiert. Wenn IBE$VERSION_HISTORY
im Tabelleneditor geöffnet wird, wird automatisch eine neue Version Browser-Seite geöffnet:
Wählen Sie das Datenbankobjekt und die Versionen, die Sie vergleichen möchten. Text und Code sind je nachdem, ob Sie hinzugefügt, modifiziert oder gelöscht wurden, farbig markiert.
Existiert die IBE$VERSION_HISTORY
-Tabelle bereits in Ihrer Datenbank, fügen Sie folgende Änderungen manuell hinzu, wenn Sie die Clientadresse loggen möchten und die RDB$GET_CONTEXT
-Funktion verfügbar ist:
Neues Feld in die IBE$VERSION_HISTORY
-Tabelle einfügen:
ALTER TABLE IBE$VERSION_HISTORY ADD IBE$VH_CLIENT_ADDRESS VARCHAR(32) CHARACTER SET NONE;
Zusätzliche Code-Zeile in den IBE$VERSION_HISTORY_BI
Trigger einfügen:
NEW.IBE$VH_CLIENT_ADDRESS = RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS');
Siehe auch:
deutschsprachig:
Versionshistorie
IBE$DBINSIDE$ERRORS
Systemtabelle
Diese Tabelle wird automatisch von IBExpert erzeugt, wenn Sie die Extract data/metadata Funktion auf einer korrupte Datenbank in Database Inside durchführen.
zurück zum Seitenanfang
<< Firebird 3.0 USAGE Privilegien | IBExpert | SQL Code-Editor >>