Konfigurationsdateien der Datenbanktabellen 

Übersicht

Eine Tabelle wird in der Software mit einem Werkzeug namens valfil angelegt. Dieses Werkzeug wird direkt von der in X3 integrierten Entwicklungsumgebung aufgerufen. Dies passiert in folgenden Fällen: Anlage einer Tabelle im Tabelleneditor, Änderung einer Tabelle in derselben Funktion, Ausgabe oder Integration von Daten, Integration eines Patches mit Auswirkungen auf die Struktur einer Datenbanktabelle.

In der Datenbank sind Tabellen über physische Dateien im Verzeichnis FIL des Ordners sowie über eine Datenbanktabelle definiert. Bei den physischen Dateien handelt es sich um:

  • Eine Datei XXX.srf mit der Strukturbeschreibung der Datei (in nachfolgend beschriebenem ASCII-Format)
  • Eine Datei XXX.fde mit der Strukturbeschreibung der Datei (in kompilierter Form, von der X3-Engine direkt verwendbar.

Wenn die Tabelle nicht in der Datenbank gehalten wird und als portable Datei extrahiert wurde, sind die entsprechenden Daten auch in zwei oder drei Zusatzdateien zu finden:

  • Datei XXX.dat mit den Daten in Dateiform, bestehend aus Datensätzen mit fester Länge
  • Datei XXX.seq mit der nächsten Sequenznummer der Tabelle. Die Sequenznummer dient der Vergabe von eindeutigen Nummern (dies entspricht der X3-Funktion uniqid([abv]), wobei abv für die Abkürzung der jeweiligen Tabelle steht).
  • Datei XXX.blb mit den Daten im Long-Format (Blobs und Clobs), sofern in der Tabelle enthalten

Mit den Daten aus diesen Dateien kann eine Tabelle mit "Mindestoptionen" angelegt werden. Diese Mindestoptionen sind:

  • Die Dimensionierung der Tabelle (ggf. geplante Größe – bei Oracle – in Form von ursprünglichem Segment und Erweiterungsgröße) ist in der Datei mit der Erweiterung .srf definiert (die Berechnung basiert auf der geplanten Anzahl von Zeilen in der Tabelle, welche durch die Variablen und Dimensionierungsformeln festgelegt ist).
  • Die Indexgröße ist anteilig auf Basis der Tabellengröße definiert (die Größe des ursprünglichen Segments wird mit dem Verhältnis zwischen der Schlüssellänge und der Länge der Tabellenzeile multipliziert; die nächste Erweiterung wird dann auf dieselbe Größe gesetzt wie die ursprüngliche).
  • Die Dateigruppen (unter SQL-Server) sind in der Datei .adxodbc definiert, sofern diese Datei vorhanden ist. Ist die Datei nicht vorhanden, wird mit den Dateigruppen DOSSIER_DAT und DOSSIER_IDX gearbeitet, sofern diese vorhanden sind (DOSSIER entspricht dem Ordnernamen). Sind diese Gruppen nicht vorhanden, wird die für die Tabelle definierte Standardgruppe verwendet.
  • Die Tablespaces (unter Oracle) sind in der Datei .adxora definiert, sofern diese Datei vorhanden ist. Ist diese Datei nicht vorhanden, wird für die Daten der standardmäßig für den Benutzer DOSSIER definierte Tablespace und für die Indizes der Tablespace DOSSIER_IDX verwendet.

Es kann vorteilhaft sein, für die Anlage und die Aktualisierungen der Tabelle Zusatzdaten zu definieren, mit denen diese Dimensionierungs- oder Lokalisierungsregeln unter Berücksichtigung der Besonderheiten der verschiedenen Datenbanken geändert werden können, um eine bessere Leistung zu erzielen. Dies setzt jedoch voraus, die betreffenden Elemente außerhalb der Datenbank zu speichern, damit sie vom Werkzeug valfil bei jeder Freigabe oder erneuten Freigabe der Tabelle angewendet werden können. Aus diesem Grunde ist es möglich, im Verzeichnis FIL eine Datei mit der Erweiterung .cfg anzulegen. In dieser Datei können bestimmte optionale Anweisungen als Ergänzung des SQL-Befehls Create table bzw. Create Index gespeichert werden. Diese Anweisungen werden dann von valfil ausgeführt. Wie die Dateien mit der Erweiterung .srf ist auch die Datei mit der Erweiterung .cfg im ASCII-Format (siehe unten).

Der Inhalt dieser Konfigurationsdatei wird unten im Definitionsregister der Indizes im Bereich Tabellenverwaltung angezeigt. Im Folgenden wird die in dieser Konfigurationsdatei verwendete Syntax beschrieben.

Syntax

Die Datei setzt sich aus Bereichen mit Textzeilen zusammen. Jeder dieser Bereiche beginnt mit einem Etikett mit Präfix $, gefolgt von einem Code, der für die entsprechende Datenbank steht (ORACLE oder MSSQL), gefolgt von einem Hervorhebungszeichen und dem Tabellen- bzw. einem Indexnamen.

Es folgen in {" (öffnende Klammer, gefolgt von Anführungszeichen) und "} (schließende Klammer nach Anführungszeichen) eingeschlossene Klauseln. Diese Klauseln werden bei Anlage und Änderungen der Tabelle oder des Index an die Datenbank übergeben. Sind mehrere Klauseln vorhanden, werden sie nacheinander übergeben, getrennt durch einen Zeilenumbruch. Anzahl von Zeichen pro Klausel ist auf 256 begrenzt.

Alle Bereiche enden auf das Schlüsselwort End.

Kommentare in Form von Freitexten können in die Konfigurationsdatei aufgenommen werden. Diesen Texten ist das Zeichen # (Hash-Symbol) voranzustellen. Kommentare müssen jedoch am Beginn der Zeile stehen.

Wenn ein nicht leerer Bereich vorhanden ist (mit mindestens einer Klausel), werden sämtliche Dimensionierungs- oder Speicherregeln, die standardmäßig für das beschriebene Element (Tabelle oder Index) definiert sind, zugunsten der übergebenen Klausel ignoriert.

Bereiche zu nicht vorhandenen Elementen oder zu einer Datenbank, die nicht der aktuellen Datenbank entspricht, werden immer ignoriert.

Syntaxbeispiele Oracle

Beispiele für Speicherklauseln:

Erzwungener Tablespace

{" Tablespace ts1 "}

Dimensionierung der Tabellenerweiterungen

{" Storage (Initial 100K Next 50K Maxextents 10 Pctincrease 20) "}

Partitionierung einer Tabelle in mehrere Tablespaces in Abhängigkeit von einem Feldwert

{" partition by range (DHIDAT_0) (partition p1 values less than ('01-APR-1999') tablespace ts1, "}
{" partition p2 values less than ('01-APR-2001') tablespace ts2, "}
{" partition p3 values less than (maxvalue) tablespace ts4) "}

Syntaxbeispiele SQL Server

Die einzige Speicherklausel lautet:

Erzwungenes Volume

{" On volume1 "}.

Seit Version 6.4 kann der erste Index (und nur der erste) als "clustered" definiert werden. Die Tabellendaten werden dann physisch in der Reihenfolge dieses Schlüssels sortiert. Dies kann Optimierungszwecken dienen. In diesem Fall ist der folgende Abschnitt hinzuzufügen (wobei XXXX der Name des betreffenden Index ist):

$CLUSTERED
{ "XXXX" }
End

Diese Anweisung wird nur beachtet, wenn die Tabelle nach der Änderung der Konfigurationsdatei erneut freigegeben wird.

Achtung: Diese Syntax zur Definition des "clustered" Index ist temporär. Ab der nächsten Hauptversion werden solche Indizes auf einfachere Weise im Dictionary definiert werden.

Beispiel für eine Datei

Beispiel für eine Konfigurationsdatei Hinweis: Es werden lediglich einige der Anweisungen verwendet (je nach Datenbank werden lediglich diejenigen Anweisungen umgesetzt, die sich auf die tatsächlich verwendete Datenbank beziehen).

Bitte beachten Sie, dass in der Standardversion der Software keine Konfigurationsdatei enthalten ist, vorhandene Konfigurationsdateien aber bei der Aktualisierung beachtet werden. Die Konfigurationsdateien werden als Implementierungselemente betrachtet und sind stets an eine gegebene Installation gebunden und nicht an einen wie auch immer gearteten Standard.

 

#---  Regel für Oracle: Rechnungsdatei
$ORACLE_SINVOICE
#--- Es wird ein anderer Tablespace gesetzt
{" Tablespace DEMO_DAT2 "}
#--- Obligatorische Dimensionierungsregeln, nachdem etwas gesetzt wurde
{" Storage (Initial 100M  Next 50M Pctincrease 20) "}
End

#--- Regel für SQL-Server
$MSSQL_SINVOICE
{" On DEMO_DAT2 "}
End

#--- 1. Index unter Oracle (keine Regel für die weiteren Indizes)
$ORACLE_SIH0
{" Tablespace DEMO_IDX2 "}
{" Storage (Initial 5M  Next 2M Pctincrease 30) "}
End

Anhang: Mit der X3-Engine verwendete ASCII-Dateien

Die X3-Engine verwendet ASCII-Dateien vom Typ "Unix", d. h. das Zeilentrennzeichen ist Line Feed (Zeichen mit Code 10) und nicht Carriage Return, Line Feed (Zeichen 13, dann Zeichen 10) wie bei Windows™-Textdateien. Es ist daher grundlegend, solche Texte nicht mit Notepad zu bearbeiten (bzw. sie zumindest nicht mit Notepad zu speichern), da sie sonst von der X3-Engine nicht mehr verarbeitet werden können. Unter Unix steht vi als Editor zur Verfügung. Mit diesem Editor bearbeitete Dateien können korrekt in X3 verarbeitet werden.

Hinweis: Diese Dateien verwenden das UTF 8-Format, mit dem Unicode-Zeichen (beispielsweise chinesische Schriftzeichen) vollkommen transparent bearbeitet werden können. In Wahrheit handelt es sich also um eine Kodierung über ein bis vier Bytes pro Zeichen. Für alle Standardzeichen entspricht das UTF-8-Format dem ASCII-Format. Sonderzeichen werden über mehr als 1 Byte kodiert. Dies hat zur Folge, dass in klassischen Editoren Sonderzeichen nicht korrekt angezeigt werden (von den X3-Editoren wird die Transkodierung jedoch vollkommen korrekt vorgenommen).

Anhang: Standarddimensionierungsregeln für Tabellen

Ist keine Konfigurationsdatei vorhanden, wird unter Oracle folgender Tabellendimensionierungsalgorithmus verwendet:

  • Zunächst wird ermittelt, wie viele Zeilen in der Tabelle gespeichert werden. Diese Zahl wird mithilfe von Dimensionierungsformeln berechnet, die wiederum auf Basis von Dimensionierungselementen berechnet werden. Die so ermittelte Anzahl von Zeilen wird mit der in der Rubrik Anzahl Datensätze angegebenen Anzahl von Zeilen verglichen. Diese Rubrik befindet sich im ersten Register des Tabellendictionarys. Die größere dieser beiden Zahlen wird übernommen.
  • Im Anschluss daran wird die Größe einer Tabellenzeile in Anzahl von Bytes berechnet. Bei dieser Berechnung wird der den einzelnen Datentypen der Tabellefelder zugeordnete internen Datentyp zugrunde gelegt. Felder vom Typ Bezeichnung belegen 1 Byte, Felder vom Typ Integer belegen 2 Bytes, Felder vom Typ Longint belegen 4 Bytes, und Felder vom Typ Decimal belegen 8 Bytes. Alphanumerische Felder von maximaler Länge L belegen L+1 Bytes, multipliziert mit einem Koeffizienten, der bei ASCII-Datenbanken 1 beträgt und bei UNICODE-Datenbanken dem Wert der Umgebungsvariable STUSIZE entspricht (ist kein Wert gesetzt, wird der Wert 2 verwendet). Diese Größe kann mit der Funktion Option/Daten in der Tabellenverwaltung ermittelt werden.
  • Analog dazu wird die Länge (in Bytes) der Indizes berechnet, wobei für die Indexfelder dieselben Dimensionierungsregeln zur Anwendung kommen.
  • Die Gesamtgröße der Tabelle ergibt sich aus der Multiplikation der Anzahl von Zeilen mit der Zeilengröße. Zur Berücksichtigung, dass die Zeilen niemals vollständig gefüllt sind, wird ein Koeffizient angewendet (standardmäßig beträgt der Wert dieses Koeffizienten 0,5).
  • Unter Oracle wird die Größe des ursprünglichen Segmentes definiert. Ist diese kleiner als 10 MB, wird mit der Tabellengröße gearbeitet. Mit der Umgebungsvariable ADXEXTSIZE (ausgedrückt in KB) kann die Größe des ursprünglichen Segments auf einen gegebenen Wert gesetzt werden. Dieser Wert kann jedoch 1,5 GB niemals überschreiten.