FAQ zur SQL-Replikation
Wie verhält sich die Replikation nach einem Stopp?
Wurde der Automatisierungs-Dienst unerwartet beendet oder die Automatisierungsaufgabe gestoppt, etc., macht die Replikation an der Stelle weiter, an der sie aufgehört hat. Dabei ist sichergestellt, dass das System auch dagegen abgesichert ist, wenn ein Replikationsablauf plötzlich abgebrochen wird. Das System reagiert transaktionskonsistent und verfügt somit praktisch über einen Snapshot und weiß somit was in die Zwischentabellen in PostgreSQL geschrieben wurde und was bereits in die Tabellen der Replikation geschrieben ist.
Welchen Anwendungszwecken dient die Replikation?
Es geht darum Bewegungsdaten zu exportieren, um eigene Auswertungen machen zu können. Hierzu werden aus der Software heraus Daten mittels SQL-Replikation in eine von Ihnen eingerichtete Open Source-Datenbank namens PostgreSQL gespeichert. Die Replikation richten Sie in microtech büro+ über eine Automatisierungsaufgabe ein.
Welche Daten können exportiert werden?
- Es ist möglich alle in microtech büro+ verfügbaren Tabellen zu replizieren.
- Verschachtelte Tabellen (z. B. Umsätze) werden als "flache" Tabellen repliziert.
- Auch besondere Felder wie die VK-Preise sind in der Replikation enthalten.
- Berechnete Felder werden nicht exportiert aufgrund der Abhängigkeiten in anderen Tabellen.
Kann eingegrenzt werden, welche Datenbanken exportiert werden?
Ja, über die Berechtigungen in der Software lässt sich ein Profil für die Replikation anlegen und im Replikations-Dienst hinterlegen.
Welche Voraussetzungen müssen in microtech büro+ erfüllt sein?
- Sie haben eine Gen. 24 Enterprise im Einsatz.
- Sie haben einen Automatisierungsdienst angelegt, welchen Sie für eine Automatisierungsaufgabe der Art: "SQL Replikation" nutzen.
- In dieser Automatisierungsaufgabe sind alle notwendigen Angaben für den von Ihnen installierten SQL-Server eingetragen.
Wie sind die Tabellen in PostgreSQL aufgebaut?
- PostgreSQL kann bis zu 1600 Spalten in einer Tabelle halten.
- Sollten Sie ein Szenario haben, in dem mehr Spalten benötigt werden, sprechen Sie uns bitte direkt an bzw. Stellen Sie Ihr Szenario in die Ideenfabrik ein.
Wie läuft die Replikation über microtech büro+ ab?
- Zunächst wird ein Snapshot der Datenbanken in microtech büro+ erstellt. Über die Berechtigungsstruktur wird gesteuert, welche Datenbanken hiervon ausgeschlossen sind.
- Die Daten aus den Datenbanken in microtech büro+ werden kopiert und in Tabellen für PostgreSQL überführt.
- Die replizierten Tabellen werden in PostgreSQL abgelegt. Je nach Ausführungsintervall der Aufgabe sind die Daten zur Zeit des "Snapshots" aktuell, praktisch fast in Echtzeit.
- Die Daten werden immer transaktionssicher in der SQL-Datenbank gespeichert (es kommt also nicht zu "Zwischenzuständen").
- Werden Daten in einer Tabelle geändert, so muss in der Replikation nicht immer die gesamte Tabelle übertragen werden, sondern nur die geänderten Zeilen. So ist die Replikation schnell und die Datenlast gering.
Was passiert wenn Datenstrukturen nicht mehr identisch in Software und Replikation sind?
Wenn eine Tabelle in Ihrer Struktur nicht mehr identisch mit der Replikation ist, so wird die Tabelle komplett neu repliziert.
Was passiert wenn ich im DB-Manager ein Selektionsfeld hinzufüge?
Fügen Sie im DB-Manager ein neues Selektionsfeld ein, so wird die Datenstruktur der Tabelle in microtech büro+ reorganisiert. In der Folge muss auch in der Replikation zunächst die komplette Tabelle neu erstellt. Die Replikation legt zunächst die neu replizierte Tabelle über einen speziellen Übergangs-Namen an. Nach der erfolgreichen Übertragung wird die bisherige Tabelle durch die neue ersetzt. Dies geschieht automatisch.
Kann neben dem Standard-Port auch ein anderer Port mit der Replikation genutzt werden?
Bei der Erfassung des "Servername" im "Aktionen-Datensatz" der Automatisierungsaufgabe lässt sich ein "Custom Port" ganz einfach mit Doppelpunkt hinter der URL bzw. dem Eintrag "localhost" eintragen (servername:port).
Was bedeutet die Fehlermeldung: "EUniError Shared Memory aufgebraucht"?
Erhalten Sie nachfolgende Fehlermeldung, muss die Einstellung: "max_locks_per_transaction" überprüft werden.
Fehlermeldung:
exception class : EUniError
exception message : Shared Memory aufgebraucht.
So gehen Sie vor, um den Fehler zu beheben:
- Verbindung mit PostgreSQL Aufbauen
- <\db-name>#= SHOW max_locks_per_transaction;
- <\db-name>#= ALTER SYSTEM SET max_locks_per_transaction = 1024;
- Neustart der "postgres instance"
- Überprüfen Sie nun die "max_locks_per_transaction"
Weitere Infos: https://gist.github.com/akaDPR/275ebe30c3852598cc944d77a2b16f09 (Externer Link)
Ist es möglich Felder in den Tabellen anzulegen, die theoretisch nur in der PostgreSQL Datenbank von Nöten sind?
Es ist zwar technisch möglich, in den von microtech replizierten Tabellen eigene Felder anzulegen, jedoch würden diese, sobald sich an der Tabellenstruktur in microtech büro+ etwas ändert, im SQL Server gelöscht werden. Wir raten auch von der Verwendung von PK & FK-Einträgen (primär and foreign key) ab, da bei einer Änderung der Tabellenstruktur in microtech büro+ auch diese Einträge ggf. ungültig werden.
Lösungsvorschlag:
Es wird empfohlen eine komplett eigene Tabelle parallel aufzubauen (z. B. „Artikel_MeineFelder“), um zusätzlich zu den microtech-Datensätzen auf SQL-Seite neue Felder anzulegen. In einer solchen komplett eigenen Tabelle können beliebige Felder angelegt und genutzt werden. Über die passenden Indexfelder wie "ID" oder in dem Beispiel "ArtNr" können dann die Datensätze zugeordnet werden. Alle Tabellen, die nicht von microtech verwaltet werden, werden von der SQL-Replikation nicht berührt. Das heißt, die microtech SQL-Replikation wird diese weder anfassen noch verändern.