AchimderGroße: Gibt es ne Möglichkeit,Datenbankveränderungen zu protokollieren?

Welche Möglichkeiten gibt es, Datenbankveränderungen zu protokollieren?

Ich habe eine Website, bei der sich User registrieren können und weitere Features nutzen können. Bei vielen Aktionen (wie zum Beispiel Neuregistrierung) wird die Datenbank angesprochen.

Was mich interessiert:

  • welche einfachen Möglichkeiten gibt es, so was zu kontrollieren oder zu protokollieren, was da passiert ist?
  • Gut wäre es, wenn man auch sehen kann, was bei der Sucheeingabe der User abgefragt wurde.
  • Kann man das auch so gestalten, dass man in regelmäßigen Zeitabständen Emails kriegt mit einer Liste, was so alles verändert wurde?
  1. Was mich interessiert:

    • welche einfachen Möglichkeiten gibt es, so was zu kontrollieren oder zu protokollieren, was da passiert ist?

    Nutze ein Logfile[1].

    • Gut wäre es, wenn man auch sehen kann, was bei der Sucheeingabe der User abgefragt wurde.

    Das könntest du in ein Logfile schreiben[1].

    • Kann man das auch so gestalten, dass man in regelmäßigen Zeitabständen Emails kriegt mit einer Liste, was so alles verändert wurde?

    Du könntest das Logfile[1] per Cron-Job als e-Mail verschicken.

    [1] alternativ auch eine Tabelle mit Logeinträgen in der Datenbank oder vergleichbares.

    1. Wie schnell lässt sich das einrichten? Ist das eine Sache von unter 30 Minuten oder muss man da länger rumbasteln?

      1. Wie schnell lässt sich das einrichten? Ist das eine Sache von unter 30 Minuten oder muss man da länger rumbasteln?

        Ohne den E-Mail-Versand?

        Gewusst wo: etwa 5 Minuten.

        Logfile mit fopen und a+ öffen, gewünschten Text mit fwrite() schreiben und das file mit fclose() wieder schließen.

        3 Zeilen.

        Das ganze in eine Funktion verpackt mit 1TBS-Schreibweise macht 5 Zeilen Code.

        Jeder Aufruf der Logging-Funktion ist mit einer Zeile Code an der gewünschten Stelle erledigt.

        1. Moin Moin!

          Logfile mit fopen und a+ öffen, gewünschten Text mit fwrite() schreiben und das file mit fclose() wieder schließen.

          Reicht nicht, bei parallel laufenden Prozessen erzeugt das ohne Locking Datenschrott.

          3 Zeilen.

          Sofern Du ohne Locking arbeitest und Datenschrott riskieren willst.

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          1. Sofern Du ohne Locking arbeitest und Datenschrott riskieren willst.

            Dann mach ein Locking dazu, dann sinds halt 5 Zeilen.

            1. Hello,

              Sofern Du ohne Locking arbeitest und Datenschrott riskieren willst.

              Dann mach ein Locking dazu, dann sinds halt 5 Zeilen.

              Und welches Log gedenkst Du da auszuwerten, um die Datenveränderungen in der Datenbank feststellen zu können?

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Und welches Log gedenkst Du da auszuwerten, um die Datenveränderungen in der Datenbank feststellen zu können?

                Keines, die Logging-Funktion wird ja per Hand aufgerufen.

                Im log steht dann etaws in diese Art:

                DATUM - Tabelle, ID, wurde geändert/gelöscht/hinzugefügt von Benutzer xyz

  2. Hello,

    viele Systeme haben Anforderungen an Historisierung von Daten. Ich arbeite bspw. gerade an einem Stammdatensystem, das für jede "produktive" Tabelle zusätzlich eine Historientabelle führt. Hier wird die produktive Tabelle um einen neuen Primärschlüssel sowie ein technisches gültig-von und gültig-bis ergänzt. Die Pflege dieser Tabelle ist ausschließlich der Datenbank überlassen, die mittels Trigger auf Änderungen der Produktivtabelle reagiert.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Eine Diskussion mit Summers ist so, als würdest du von einem Panzer überfahren und findest das auch noch lehrreich  --  Strobe Talbott (United States Deputy Secretary of State) über Larry Summers (Director of the National Economic Council), siehe Stern 12/2009 S. 128
  3. Hello,

    Welche Möglichkeiten gibt es, Datenbankveränderungen zu protokollieren?

    Was für eine Datenbank?

    Gute Datenbanksysteme führen ein Transaktionslog, mit dessen Hilfe sich jeder Zustand seit der letzten Vollsicherung wiederherstellen lässt.

    Auch MySQL kennt ein Binary Log. Wenn Du das eisnchaltest, wird das DBMS aber langsamer und die Platte wird relativ schnell voll.

    http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

    Alternativ kannst Du den Direktzugriff auf Tabellen unterbinden und dafür Stored Programms erstellen. In diesen Programms/Procedures werden dann sowohl die von Dir vorbereiteten Zugriffe durchgeführt, als auch ein von Dir vorgesehenes Logging betrieben. Ob Du dann nur den Aufruf des Statements nebst einigen Verwaltungsinformationen abspeicherst, oder eine Datenhistorie führst, das ist dann Dir überlassen.

    Sowas lässt sich aber nicht in fünf Minuten einrichten, sondern muss im Datenbankdesign berücksichtigt werden. I.d.R. macht man sowas nicht nachträglich, sondern plant es weise voraus, bevor man anfängt zu Coden.

    Es gab hier neulich erst einen Thread zu diesem Thema.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de