Wenn zB der erfassungszeitpunkt von Daten für eine
DB vom Client und nicht von der
DB generiert wird.
Gruß
K-H
Aber dann wäre doch die sauberste Lösung, dass der Datenbank zu überlassen, oder?
Genau das wollte ich. Allerdings ist meine Datenbank auf 2 PCs, weil redundant. Dafür nutze ich gegenseitige Replikation von MariaDB. Aber es sollte nicht nur die
DB redundant sein, sondern auch unsere hauseigene Software, die die Verbindung zwischen der SPS und der
DB herstellt. Diese macht u.a. auch die Signal-Meldungserzeugung für die Anlagensteuerung. Also gab es 2 "Connectors" die in ihre jeweils lokale
DB Meldungen geschrieben haben. Selbst bei Nutzung des
DBMS-Seitigen NOW() entstanden hier haufenweise doppelte Einträge, die im schlimmsten Fall dann sogar eine falsche Reihenfolge einnahmen und die Meldungslisten effektiv unbrauchbar gemacht haben. (Bei Sätzen mit gleichen Schlüsseln hat die Replikation diese ignoriert. Ich wollte genau dies mit der Synchronisierung erreichen.)
Meine Lösung war am Ende, dass ich dann doch davon abgerückt bin beide Connectors gleichwertig zu behandeln, und es nun immer nur einen gibt, der in die
DB schreiben darf. War zwar ein wenig Gehampel es zu schaffen, dass die Instanzen verlässlich ihre gegenseitige Existenz bzw. Nichtexistenz erkennen (insbesondere auch ob sie überhaupt noch Verbindung zur SPS haben), aber das System läuft jetzt seit ein paar Monaten bereits stabil. Und den Krampf mit der Synchronisierung bin ich los. (Jetzt sind nur ggf. Meldungen für wenige Sekunden "verschränkt", wenn tatsächlich der aktuell schreibende PC ausfällt. Das ist eh der Ausnahmefall, und zu verschmerzen.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)