Customizing

Schema-Export

Information

  • Es besteht die Möglichkeit, die derzeitige Definition der Datenbank (Datentabellen, Spalten, Constraints etc.) im Oracle- bzw. MSSQL-Format zu exportieren.

Voraussetzung

  • Das Verzeichnis, in welches exportiert werden soll, muss unter Customizer → Stammdaten → Globale Einstellungen in dem Datenfeld Template-Code für die globale Einstellung export_path_databasescheme definiert werden.

    • In Windows-Systemen werden keine einzelnen \, sondern \\ verwendet.

      • C:\\planta\\export\\schema.

Vorgehensweise

  • Wählen Sie Customizer → Datenbanken →

    Datenbankschema-Export, um einen Schema-Export anzustoßen.

    • Ein Export kann ca. 30 Sekunden bis 1 Minute dauern.

  • Danach befindet sich das exportierte Schema in dem angegebenen Verzeichnis unter \SQLServer_<Export-Zeitstempel>\SQLServer_create.sql bzw. \Oracle10g_<Export-Zeitstempel>\Oracle10g_create.sql.

  • Die drop -Skripte beinhalten Informationen darüber, wie das derzeitige Schema gelöscht wird.

  • Die hibernate_mapping -Unterverzeichnisse enthalten Definitionen der Datenbank-Tabellen für Java.

  • Um das exportierte Schema in eine neue Datenbank zu überführen, kann der Inhalt der _create.sql theoretisch einfach ausgeführt werden, z.B. in SqlPlus oder SqlDeveloper.

    • Es wird dringend empfohlen, dies in einem regulären Installationsprozess zu tun.

      • Hierzu reicht es aus, in einem existierenden Installer das exportierte _create.sql -Skript in 00_tables.sql umzubenennen und nach \db\bin\sql\oracle\10_tables bzw. \db\bin\sql\ms-sql\10_tables\ zu kopieren und ggfs. die bereits existierende Datei zu ersetzen.

Hinweise

  • Es wird nur die Datenbank-Definition (das Schema) exportiert, nicht der Datenbank-Inhalt (echte Daten).

  • Es wird prinzipiell immer ein Schema sowohl im Oracle- als auch im MSSQL-Format erstellt, unabhängig davon, welches Format die tatsächlich verwendete Datenbank hat.

    • Daher ist es nicht nötig, den Schema-Export zweimal (etwa mit einer Oracle- und einer MSSQL-Datenbank) aufzurufen.

Detaillierter Aufbau des Skript-Inhalts

  • In einem create-Skript erfolgen zuerst die Definitionen aller Datentabellen einschließlich ihrer Spalten.

  • Es werden folgende Datentabellen exportiert:

    • Alle aktivierten PLANTA-Datentabellen, d.h. alle Datentabellen, für deren Schema die Checkbox Aktiviert aktiviert ist und zusätzlich die Checkbox Aktiviert für die Datentabelle selbst aktiviert ist.

    • Für jede Datentabelle der Schemas Q1B und Q2B außerdem eine Datentabelle gleichen Namens mit der Endung _HIS und gleichen Spalten, die Hibernate Envers benötigt, um Historie-Daten zu speichern. Siehe auch Historisierung.

    • Ferner die interne Tabelle REVINFO von Envers.

  • Definition der Datentabellenspalten:

    • Sämtliche Spalten, die auf Aktiviert gesetzt sind, werden geschrieben.

    • Jede Datentabelle (mit Ausnahme von REVINFO) hat ab Version S 39.5.0 eine Spalte UUID, die für jeden Datensatz eine eindeutige ID enthält.

    • Die Primärschlüssel stehen jeweils vor dem UUID-Feld und werden am Ende der Datentabelle definiert.

    • Default-Werte und NOT NULL Constraints:

      • Alle Spalten des Primärschlüssels implizieren einen NOT NULL Constraint.

      • Alle numerischen Felder (Integer, Short, Double) haben einen NOT NULL Constraint und als Standardwert 0.

      • Alle Datumsfelder haben einen NOT NULL Constraint und als Standardwert den 01.01.1970 (je in Oracle- oder MSSQL-Notation).

      • Die UUID-Felder kreieren als Standardwert einen neuen, eindeutigen UUID-Wert (je in Oracle- bzw. MSSQL-Notation) und haben ebenfalls einen NOT NULL Constraint.

      • Eine Ausnahme bilden numerische Felder, die Teil eines Fremdschlüssels sind, in deren referenzierter Datentabelle NULL erlaubt aktiviert ist. Solche Spalten haben weder Default-Wert noch NOT NULL Constraint.

  • Danach folgen die Definitionen der Indizes und Constraints zu allen Datentabellen.

    • Es gibt dabei verschiedene Arten von Indizes und Constraints:

      • I-Text-Indizes für jede Datentabelle, deren Datensätze einen I-Text beinhalten. Dieser Index-Typ hat keinen Constraint.

      • Fremdschlüssel-Indizes für jede Datentabelle, die einen Link auf eine andere Datentabelle definiert. Dieser Index-Typ definiert zudem noch einen Constraint (oder, in MSSQL, einen Trigger für Update- und Delete-Funktionalität).

      • Envers legt für seine History-Tabellen des Weiteren noch Constraints an, die auf die allgemeine Envers-Tabelle REVINFO verweisen. Envers legt dafür keine Indizes an

  • Zuletzt enthält das Skript noch (für Oracle-Datenbanken) eine neue Datenbank-Sequenz, die von Envers benötigt wird.