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_databaseschemedefiniert 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.sqlbzw.\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.sqltheoretisch 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 in00_tables.sqlumzubenennen und nach\db\bin\sql\oracle\10_tablesbzw.\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.