Update Datenbank-Tabellen
Abgleich-Skript
Auf der "Administrations"-Outbar befindet sich auf der Sub-Outbar "Allgemein" der Ordner "Logdateien" mit dem Unterordner "DEXPRO DB Update". Hierüber wird das Skript "DEXPRO_Action_Admin_DbTableData_CompareDbConfig" ausgeführt. Alternativ kann das Skript auch über den Manager ausgeführt werden. Die zugehörige Log-Datei wird nach einer Aktualisierung der Ansicht direkt im Ordner angezeigt. Das Skript benötigt etwas Zeit und ggf. muss die Ansicht erneut aktualisiert werden. Über das Augen-Symbol kann die Logdatei direkt angesehen werden. Abweichungen werden als Fehler rot markiert.
Das Portal-Skript liest die aktuell beim Kunden vorhandene Datenbank aus und sucht nach fehlenden Tabellen und Tabellen-Spalten und legt diese an. Zudem werden alle Tabellen-Spalten auf Datentyp, Default-Werten und der Einstellung ob NULL-Werte zulässig sind überprüft. Zusätzlich 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 kann viele Abweichungen wie fehlende Spalten oder Tabellen direkt beheben. Einige Abweichungen wie Veränderungen bei einem Unique-Key müssen manuell behoben werden. Hinweise hierzu folgen weiter unten auf dieser Seite.
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.
Wenn das Skript auch nach mehrfacher Ausführung Abweichungen nicht automatisch auflösen kann, müssen die Anpassungen manuell hergestellt werden. Das Skript kann nach jeder Anpassung erneut ausgeführt werden. Der Vorgang kann wiederholt werden, bis die Log-Datei keine weiteren Abweichungen entdeckt. Hilfestellungen zu den Fehlern werden weiter unten gegeben.
Technischer Hintergrund
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 sollten aus dem Ordner entfernt werden, damit garantiert die neueste Version verwendet wird! 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.
Datenbank-Berechtigungen
Der ausführende Benutzer muss Datenbank-Tabellen hinzufügen können und er muss bestehende Tabellen ändern können!
In jedem Fall muss ein Zugriff mit entsprechenden Rechten auf die beiden Datenbanken gegeben sein! Bei MS SQL zum Beispiel über ein Management Studio.
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.
No Comments