Update Datenbank-Tabellen
Für das Update der Datenbanken enthält der "DEXPRO"-Ordner den Unterordner "DbTableConfig". Dieser enthält wiederum einen "Log-Ordner" und die Ordner "MSSQL" und "MYSQL" sowie eine JSON-Datei "DEX-DATABASE" mit der Versionsnummer und einem Zeitstempel im Namen. Mit jedem Update wird eine neue JSON-Datei ausgeliefert. Die alten Dateien müssen aus dem Ordner entfernt werden! Die Datei enthält die komplette Datenbank-Struktur im Soll-Zustand.
Die Ordner "MSSQL" und "MYSQL" enthalten wiederum Unterordner für die beiden Datenbanken "DEX_MasterData" und "DEX_Workflow", in welchen pro Tabelle einzelne SQL-Dateien mit den CREATE-Befehlen der Tabellen enthalten sind.
Zugriff auf die Datenbank herstellen und Sicherung erstellen
In jedem Fall muss ein Zugriff mit entsprechenden Rechten auf die beiden Datenbanken gegeben sein! Bei MS SQL zum Beispiel über ein Management Studio.
Die beiden Datenbanken sollten vor dem Update komplett inklusive Daten gesichert werden!
Abgleich-Skript
Das Portal-Skript "DEXPRO_Action_Admin_DbTableData_CompareDbConfig" liest die aktuell beim Kunden vorhandene Datenbank-Struktur aus und vergleicht diese mit der gegebenen JSON-Struktur. Es werden alle Tabellen und Tabellen-Spalten inklusive Datentyp, Default-Werten und der Einstellung ob NULL-Werte zulässig sind überprüft. Zudem werden Trigger und Primary- sowie Unique-Keys überprüft.
Fehlende Datenbank-Trigger unter MS SQL können über das Skript "DEXPRO_Action_Admin_CreateDbTableTrigger_All" hinzugefügt werden.
Das Skript versucht zum Teil Abweichungen direkt zu beheben. Falls eine Tabelle noch nicht existiert, dann wird die zugehörige SQL-Datei mit dem "CREATE"-Befehl ausgelesen und ausgeführt. Fehlende Spalten werden durch die Angaben in der JSON-Datei hinzugefügt und das Skript versucht Abweichungen bei einzelnen Spalten automatisch anzupassen. Bei MS SQL werden fehlende Datenbank-Trigger für die Spalten "UpdateTS" automatisch erstellt.
Anpassungen an einer Tabellen-Spalte schlagen jedoch fehl, wenn die Spalte in einem Unique-Key verwendet werden. Unique-Keys werden aktuell nicht automatisch erstellt oder angepasst. Somit kann es sein, dass manuell nachgearbeitet werden muss.
Das Skript erzeugt ein Log im "DbTableConfig\Log\"-Verzeichnis. Nach der Ausführung muss die Log-Datei nach "[ERROR]"-Einträgen durchsucht werden. Die ungelösten Abweichungen müssen manuell hergestellt werden. Das Skript kann nach den Anpassungen erneut ausgeführt werden. Der Vorgang kann wiederholt werden, bis die Log-Datei keine Abweichungen mehr entdeckt.
Hilfestellungen zu den Fehlern werden weiter unten gegeben.
DEX_MasterData
Bei dem Update müssen die beiden Datenbanken "DEX_MasterData" und "DEX_Workflow" unterschieden werden. Bei den Stammdaten werden bestehende Tabellen in der Entwicklung nur selten verändert, denn Anpassungen könnten größere Auswirkungen auf bestehende Systeme haben. Bei einem Update ist es jedoch nicht ausgeschlossen, dass bestehende Tabellen erweitert werden.
Vor dem Update sollten die Tabellen dahingehend überprüft werden, ob sich ggf. Auswirkungen auf vorhandene Stammdaten-Importe ergeben. Das ist selten der Fall - aber nicht ausgeschlossen. Aus diesem Grund sollte das Update zunächst im Testsystem durchgeführt werden.
Die Tabellen werden häufig über tägliche Jobs geleert und neu mit Stammdaten befüllt. Wenn dies vollständig zutrifft bietet es sich an die komplette Datenbank zu sichern und zu entfernen und neu anzulegen. Durch den nächsten Stammdaten-Job werden die Daten wieder vollständig importiert.
DEX_Workflow
Die Datenbank "DEX-Workflow" enthält Tabellen mit den gespeicherten Workflow-Konfigurationen. An diesen Tabellen werden in der Entwicklung immer wieder Anpassungen vorgenommen. Es kommen ggf. Spalten hinzu; Default-Werte von einzelnen Spalten werden optimiert; NULL-Angaben sollen erlaubt werden oder nicht mehr erlaubt werden oder Unique-Keys kommen hinzu oder ändern sich.
Manuelle Anpassungen an den Datenbanken
Auch wenn viele Anpassungen automatisch über das folgende Skript ausgeführt werden kann es sein, dass manuelle Anpassungen an bestehenden Tabellen vorgenommen werden müssen. Bei MS SQL ist dies in der Voreinstellung häufig deaktiviert. Die Einstellung "Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern" muss hierfür aktiviert werden. Die Einstellung befindet sich unter "Extras" -> "Optionen" im Abschnitt "Designer" -> "Tabellen- und Datenbank-Designer". Die Checkbox muss wie im Screenshot deaktiviert sein.
Die nicht automatisch lösbaren Abweichungen zum aktuellen Standard werden im Skript-Log ausgegeben und müssen manuell behoben werden. Die Fehler werden mit "[ERROR]" markiert ausgegeben und sind somit leicht zu identifizieren.
Datentyp-Abweichung korrigieren
Ein abweichender Datentyp wird im Log als Fehler angezeigt - muss aber nicht zwingend ein Fehler sein. Besonders in den Tabellen "Invoice_Posting_Head" und "Invoice_Posting_Pos" kann es sein, dass projektspezifisch bewusst Anpassungen auf sehr spezifische Typen vorgenommen wurden.
Im folgenden Beispiel wurde aus einer "int"-Spalte eine "bigint"-Spalte. Ohne die oben beschriebene Designer-Konfiguration würde beim Speichern ein Fehler erscheinen, da die Tabelle beim Speichern neu erstellt werden muss.
Key-Abweichung korrigieren
Wie bereits erwähnt werden Abweichungen bei Unique-Schlüsseln nicht automatisch korrigiert. Bei einer MySQL Installation über eine MariaDB können die Unique-Keys genau so wie die Primärschlüssel direkt über die Tabellen-Konfiguration konfiguriert werden.
Im Microsoft SQL Server Management Studio muss die Tabelle zunächst im Entwurfs-Modus geöffnet werden. In der Tabellen-Ansicht kann aber nur der Primärschlüssel für die Tabelle festgelegt werden. Durch das Öffnen der Tabelle erscheinend in der oberen Leiste der Reiter "Tabellen-Designer". Hier befindet sich der Eintrag "Indizes/Schlüssel...".
In dem Pop-Up werden die Primärschlüssel und die eindeutigen Schlüssel definiert.
Im folgenden Screenshot ist eine Fehlerausgabe im Log zu sehen, bei der in der Tabelle "fields_pos_definition" ein bestehender Unique-Schlüssel um die Spalte "TemplateFile" erweitert wurde. Der technische Name der Unique-Keys ist nicht relevant, denn das Skript sucht nach einem schlüssel mit denselben Spalten unabhängig vom Namen.
Wenn der Unique-Key noch nicht existieren sollte, dann muss zunächst ein neuer Schlüssel über den Button "Hinzufügen" erzeugt werden. Der Schlüssel muss vom Typen "Eindeutiger Schlüssel" sein. Wenn ein Schlüssel existiert aber nicht gefunden werden konnte, dann wurde evtl. ein falscher Schlüssel zugeordnet.
Unter "Identität" sollte ein sprechender Name für den Schlüssel angegeben werden. Bei Neuanlage beginnt der vordefinierte Name mit "IX", da als Typ "Index" voreingestellt ist. Aber auch wenn man den Typen auf "Eindeutiger Schlüssel" ändert, wird das Präfix nicht angepasst. In unserer Auslieferung beginnen die Unique-Keys bei MS SQL mit "Unique", damit man den Typen des Schlüssels direkt über den Namen ableiten kann.
Unter "Spalten" können die Tabellen-Spalten zugeordnet werden. In diesem Beispiel muss die Spalte "TemplateFile" hinzugefügt werden. Das Pop-Up muss geschlossen werden. Das Speichern erfolgt im Anschluss durch das Speichern der Tabelle über das Disketten-Symbol.
Null-Werte (nicht) zulassen
In einigen Fällen kann es sein, dass Spalten bislang NULL-Werte zugelassen haben und es jetzt nicht mehr sollen oder umgekehrt. Wenn die Spalte in einem Schlüssel verwendet wird, kann die Anpassung nicht automatisch über das Skript erfolgen. Die Fehlerausgabe im Log sieht zum Beispiel wie folgt aus.
Die Spalte muss manuell über die Tabellen-Konfiguration geändert werden. Wenn NULL-Werte nicht mehr zugelassen werden, dann darf es in der Tabelle keinen Eintrag mit NULL geben. Das sollte in solchen Fällen immer gegeben sein, denn sonst würde die Spalte nicht entsprechend umgestellt werden. Sollte es dennoch Einträge mit NULL geben, muss ggf. manuell angepasst werden.
Spalten hinzufügen
In wenigen Fällen können Spalten nicht automatisch hinzugefügt werden. Im folgenden Beispiel war ein Schreibfehler bei einem Spaltennamen enthalten, wodurch gleichzeitig eine Abweichung beim Unique-Key entdeckt wird. Durch die Korrektur des Spaltennamens werden automatisch 2 Fehler behoben.
Nachdem alle Anpassungen vorgenommen wurden sollte das Skript erneut ausgeführt werden und das Log sollte erneut kontrolliert werden. Erst wenn keine relevanten Abweichungen mehr entdeckt werden, sind die Anpassungen abgeschlossen.









