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_IDzeigt auf die entsprechende Tabelle undRDB$PAGE_TYPEzeigt 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_SOURCEgespeichert; 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_POSITIONspezifiziert, wobei die Spalte mit dem Wert null als Erste erscheint. Jede Tabellenspalte basiert auf einer Domäne, die inRDB$FIELD_SOURCEangezeigt wird. Ist eine Spalte alsNOT NULLdefiniert, dann erhältRDB$NULL_FLAGden 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_NAMEundRDB$IDENTITY_TYPE. Weitere Information finden Sie unterIDENTITYdata 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_TYPEsind die folgenden Werte vorgesehen:PRIMARYfür PrimärschlüsselUNIQUEfür SekundärschlüsselFOREIGN KEYfür FremdschlüsselPCHECKfür selbst definierte Gültigkeitsprüfungen undNOT NULLfü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_IDjeweils mit eins beginnend durchnummeriert. Handelt es sich um einen eindeutigen Index, dann hatRDB$UNIQUE_FLAGden Wert eins,RDB$INDEX_TYPEspezifiziert, ob es sich um einen aufsteigenden (0) oder absteigenden (1) Index handelt, undRDB$INDEX_INACTIVEzeigt 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ürUPDATEundDELETE-Fälle, und können inRDB$UPDATE_RULEundRDB$DELETE_RULEeingesehen werden. Vorgesehen dafür sind der VorgabewertRESTRICTsowie die AlternativenNO ACTION,CASCADE,SET NULLandSET 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_NAMEder 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_CONTEXTdurchnummeriert. 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_SETSvorhanden sind.
Prozeduren- und triggerbezogene Systemtabellen
RDB$PROCEDURES: Alle Stored Procedures in einer Datenbank werden in dieser Systemtabelle gespeichert. Den Prozedurnamen findet man inRDB$PROCEDURE_NAMEmit 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_SOURCEgespeichert, und seine binäre Übersetzung inRDB$PROCEDURE_BLR. Nur der Besitzer einer Prozedur (inRDB$OWNER_NAMEgespeichert) 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_TYPEden 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_NAMEden Namen der dazugehörenden Tabelle, den Triggertyp (RDB$TRIGGER_TYPE) und, wenn mehrere Trigger für eine einzelne Tabelle denselben Wert fürRDB$TRIGGER_TYPEhaben, 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_SOURCEund inRDB$TRIGGER_BLRseine 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$PACKAGEShinzugekommen.
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_OPTIONder Wert 1, dann darf dieses Recht weitergegeben werden. InRDB$RELATION_NAMEist angegeben, auf welche Tabelle oder welche Prozedur sich das Recht bezieht, ist es auf eine bestimmte Spalte beschränkt, dann wird diese inRDB$FIELD_NAMEspezifiziert.
Andere Systemtabellen
RDB$EXCEPTIONS: beinhaltet eine vollständige Liste aller exceptions.RDB$FILTERS: beinhaltet alle blob filters. Die Routine wird mitRDB$ENTRYPOINTspezifiziert, der DLL Dateiname mitRDB$MODULE_NAME.RDB$FUNCTIONS: beinhaltet alle eingebundenen UDFs in der Datenbank. Die Routine wird mitRDB$ENTRYPOINTspezifiziert, der DLL Dateiname mitRDB$MODULE_NAME.RDB$RETURN_ARGUMENTspezifizert, welcher der Parameter der Rückgabewert ist.RDB$FUNCTION_ARGUMENTS: Diese Tabelle listet die einzelnen UDF Parameter auf. Die Parameter sind mitRDB$ARGUMENT_POSITIONdurchnummeriert, die Parametertypen sind inRDB$FIELD_TYPEangezeigt, diese Spalte referenziert die Tabelle,RDB$TYPES. Steht inRDB$MECHANISMder 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_LENGTHangegeben ist.RDB$CHARACTER_SET_IDspeichert 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 mitCOMMITund bei 2 mitROLLBACKbeendet.
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_CONTEXTgesetzten 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_CONNECTIONzu 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 >>






