AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwischenzeitliche Änderungen an Datenbank erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwischenzeitliche Änderungen an Datenbank erkennen

Ein Thema von hhcm · begonnen am 2. Aug 2018 · letzter Beitrag vom 3. Aug 2018
Antwort Antwort
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#1

Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 2. Aug 2018, 12:09
Datenbank: MariaDB • Version: 10.x • Zugriff über: Unidac
Hallo zusammen,

kennt jemand eine Praktikable Lösung um in einer MySQL/MariaDB Umgebung Änderungen an Daten zu erkennen?
Kurz erklärt. Ich öffne eine Datenbankabfrage und gehe in die Pause. Nachdem ich zurück bin, editiere ich einen Datensatz. Wie kann ich erkennen ob an dem Datensatz in meiner Abwesenheit gearbeitet wurde?

Ich glaube bei MySQL gibt es keine "Client"-Events wie z.B bei Oracle. Ich dachte schon an einen Hash den ich dann vor dem Posten nochmal gegen die Datenbank prüfe. Vielleicht gibt es auch bei Unidac etwas (ohne das ich das ganze Handbuch durchsuchen muss)

Hat jemand eine Idee?
Chris
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 2. Aug 2018, 12:58
Hi, ich setze immer einen Timestamp bei jeder Änderung.
Philip
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 2. Aug 2018, 13:22
Ja, da war ich auch schon.
Es geht auch noch um andere Sachen wie (Existiert der Datensatz überhaupt noch, wurde er bereits abgeschlossen)
Das ganze ist auch noch mit anderen Tabellen verknüppelt (Master/Details) bei den Detail-Datasets würde ich gerade das gleiche wissen.
Chris
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 2. Aug 2018, 14:16
Im Extremfall kannst Du die (dem System bekannten) alten Werte in die Where Clause für Update/Insert/Delete aufnehmen. Damit erschlägst du eigentlich alles (außer BLOBs)
Nicht schön, aber so machen es auch Profis.
So kannst Du zumindest vermeiden, überall Hash oder Timestamp oder Zählerspalten zu ergänzen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 2. Aug 2018, 14:39
Ich weiß, es geht hier um MariaDB. Trotzdem möchte ich hier kurz auf die bei InterBase verfügbaren Change Views hinweisen, die genau auf diese Problematik zielen. Sollte jemand in Zukunft vielleicht die Wahl der Datenbank haben, kann man sich das Leben damit sehr vereinfachen. Insbesondere auch, da dieses Feature von FireDAC direkt unterstützt wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
591 Beiträge
 
Delphi XE6 Enterprise
 
#6

AW: Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 2. Aug 2018, 17:11
Ich weiß, es geht hier um MariaDB. Trotzdem möchte ich hier kurz auf die bei InterBase verfügbaren Change Views hinweisen, die genau auf diese Problematik zielen. Sollte jemand in Zukunft vielleicht die Wahl der Datenbank haben, kann man sich das Leben damit sehr vereinfachen. Insbesondere auch, da dieses Feature von FireDAC direkt unterstützt wird.
Klingt interessant. Vielleicht kommt das ja auch mal irgendwann bei Firebird.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
672 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Zwischenzeitliche Änderungen an Datenbank erkennen

  Alt 3. Aug 2018, 09:32
Das eine ist das was man deklarativ in einer Datenbank machen kann, in dem man ein paar Befehle
ausführt und wenn man Pech hat, die Größe der Datenbank explodieren lässt und das andere ist
das, was man mit den Mitteln der Datenbank schon lange kann.

Wir nutzen unsere Replikation in Firebird schon seit Jahren auch dafür, das wir eine unlimited
Redo/Undo Log haben und die Entstehungsgeschichte jedes Datensatz der letzten 5 Jahre bei einem
unserer wichtigsten Kunden bei Bedarf nachschauen zu können, und dann nicht nur wer wann was
gemacht hat, sondern auch welche Daten vorher in der Datenbank waren. Die üblichen Felder
create/update user/timestamp in jeder Tabelle kann man sich daher sparen, weil die eh nichtssagend
sind und beim delete eh verloren wären.

Neben der Tatsache, das wir auf dem Wege auch alle gelöschten Datensätze nachvollziehen können,
ist es auch möglich, damit ein Undo zu machen, wenn man weiss, das zu irgendeinem Zeitpunkt
eine Connection gegeben hat, ggf auch nur eine Transaction, deren Operationen rückgängig
gemacht werden sollen. Das Rückgängig machen ist dann der Aufruf einer Stored Proced
mit Parameter für Connection und Optional Transaction ID.

Alle Logs werden jahreweise in eigene Datenbanken gepackt und danach sind die Read Only und müssen
nicht mehr gesichert werden, weil sich nie wieder was ändern kann. Ganz nebenbei hat man
auf dem Wege ein sehr überzeugendes Audit System und falls durch Prüfungen irgendwelche Zweifel
an der Datenqualität aufkommen, findet man mit IP Adresse und Zeitpunkt und ggf Firebird
User sofort den schuldigen und wenn hilfreich, auch den Prozess, der dafür zuständig war.

Die Log DBs sind zusammen mittlerweile ca 700 GB, aber da ist auch der Speed ziemlich egal, weil
man nur selten da dran muss, aber den Vorteil hat, das die nicht auf dem selben Server
gelagert werden müssen, geschweige denn wie bei Changeviews sogar in der selben Datenbank.

Das ist alles wesentlich weniger kompliziert als man denkt und wir haben das auch schon für
mehrere Kunden in deren Firebird Datenbank eingebaut. Bei Interbase geht das nicht, weil
alleine so wichtige Operation wie "execute statement ... on external" nicht existieren
und vieles mehr da eben fehlt.

Wenn Ihr also mit Enterprise Datenmengen zu tun habt, dann vorsichtig sein. Jeder, der mal
eine 500GB Datenbank (egal ob interbase oder Firebird) auf einer lahmen VM auf für Datenbanken
ungeeignete Hardware durch einen Backup Restore schicken musste, weiss, das Nächte dafür
manchmal deutlich zu kurz sind. Da dann auf irgendwelche Brückentags/Feiertagskombinationen
warten zu müssen ist auch keine echte Strategie. Das 500GB auf einem für FB geeigneten Server
auch locker innerhalb von 1-2 Stunden duch einen Backup/Restore laufen können, ist mal nur ganz
am Rande erwähnt.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz