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, 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/plantaEin 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