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, kann unter Customizer → Stammdaten → Globale Einstellungen in dem Datenfeld Template-Code für die globale Einstellung
export_path_databaseschemeals Defaultwert hinterlegt werden.
Vorgehensweise
-
Wählen Sie Customizer → Datenbanken → Datenbankschema-Export, um einen Schema-Export anzustoßen.
-
Es muss ein für den worker Container schreibbarer Pfad eingetragen werden, zB
/var/planta -
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.
-
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.
Export über docker compose
Der Schema- bzw. Datenexport kann auch über das Migrationsverfahren mit Hilfe der docker compose aufgerufen werden. Siehe auch Migrationsverfahren
Beispiel Aufbau:
-
docker compose
services:
manager:
image: registry.planta.services/project/manager:stable
environment:
- "SKIP_INIT=1"
- "planta__server__hibernate__connection__url=<DB_CONNECTION_URL>"
- "planta__server__hibernate__connection__username=<DB_USERNAME>"
- "planta__server__hibernate__connection__password=<DB_PASSWORD>"
command: ["migration", "-c /planta/parameter.par"]
depends_on:
customizing:
condition: service_completed_successfully
restart: true
networks:
- internal
volumes:
- transfer:/mnt/transfer:ro
- ./data_export.par:/planta/data_export.par:ro
- ./:/var/planta/export:rw
worker:
image: registry.planta.services/project/worker:stable
environment:
- "SESSION_LINK=manager:54242"
depends_on:
manager:
condition: service_healthy
restart: true
customizing:
condition: service_completed_successfully
restart: true
networks:
- internal
volumes:
- transfer:/mnt/transfer:ro
- ./export.par:/planta/parameter.par:ro
customizing:
image: registry.planta.services/project/customizing:stable
environment:
- LOG_LEVEL=INFO
volumes:
- transfer:/mnt/transfer:rw
networks:
internal:
volumes:
transfer:
-
export.par
--export-data
/planta/data_export.par
--export-schema
/var/planta/export/schema
-
data_export.par
--exclude-licenses
ZZZ
--output-file
export/data
--exclude-tables
MIGRATIONRULE
MIGRATIONHISTORY
DT153
DT348
DT396
DT547
DT953
DT820
DT004
DT936