[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Feb 2021
    Beiträge
    21

    Datensatz aus PF gelöscht - Wie Protokollieren?

    Moin moin,
    mal eine Frage in die Runde.
    Aus unserem Kundenstamm ist ein Kundensatz gelöscht worden. Dies ist aus dem ERP System aber nicht möglich.
    Das einzige was uns noch einfällt ist das die per SQL gelöscht worden ist.

    Wie kann ich das überwachen das bei einem SQL Delete das protokolliert wird? Am wichtigsten ist dabei USername und wann das gemacht worden ist.

    Dachte schon an einen Trigger aber da komme ich mit dem Befehl nicht zurecht. Ich habe da keine Ahnung was ich das eintragen soll.
    Also mit Phy. DAtei , Auslöserzeit und Ereignis das schon. Aber der Rest da bin ich überfragt(Programm, Auslöser ersetzen etc.)

    Vielleicht könnte mir jemand da einen Tipp geben.

    Vielen Dank.

  2. #2
    Registriert seit
    Apr 2019
    Beiträge
    43
    Entweder Trigger, dafür benötigst du ein Programm das dann vom Trigger aufgerufen wird und die Daten ordentlich abspeichert. Würde ich bei fehlendem know how aber nicht empfehlen. Ein fehlerhaftes/langsames Programm kann hier mehr kaputt machen als richtig.

    Einfacher wäre es ein Journal aufzusetzen und die Datei zu journalisieren. (STRJRNPF)
    Auf das Journal kann man dann mit SQL zugreifen und kann dann sehen welcher User im Kundenstamm wann was in welchem Programm geändert hat. Dafür gibt's auch einige Beispiele im Internet.

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    ggf, wenn mutwillig, wurde auch mit DFU gelöscht (UPDDTA)

    Dann findest du ggf einen Spool QPDZDTALOG

    Die Systeme die ich kenne erlauben dem User kein SQL und kein dltsplf, da würde das klappen.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Die sicherste Möglichkeit ist tatsächlich ein Trigger, den du auch per "Create or replace Trigger ..:" in SQL machen kannst.
    Du kannst dann einfach eine neue Tabelle (Create Table ... as select ...) erstellen und den zu löschenden Satz per Insert aus dem Trigger sichern.
    Dabei kannst du dann die zusätzlich erforderlichen Informationen mit ausgeben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.644
    Zitat Zitat von sven70 Beitrag anzeigen
    Wie kann ich das überwachen das bei einem SQL Delete das protokolliert wird? Am wichtigsten ist dabei USername und wann das gemacht worden ist.
    Audit- bzw. Datenbankjournal. Hilft nicht nur in solchen Fällen, wird aber in der Regel erst eingeschaltet, wenn es zu spät ist.

    Trigger geht natürlich auch, ist aber einiges an Mehraufwand. Dann könnte man natürlich auch noch Constraints einführen, daß eine Kundennummer nicht gelöscht werden kann, so lange dafür Daten in anderen Dateien (Auftrag etc) bestehen.
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Journale helfen nur dann, wenn Verluste noch vor dem Reorg der Journale festgestellt werden können.
    Durch SQL lässt sich nur leider nicht feststellen, welches Anwednungsprogramm denn der Verursache ist.
    Bei einem Trigger, auch wenn er komplizierter ist, kann ich auch das tatsächliche Programm feststellen, dass den Trigger auslöst.
    Ins besonders, wenn man Services nutzt, möchte man u.U. auch wissen, wer denn den Service aufgerufen hat.
    Und das kann dann doch schon noch komplizierter werden, ist aber lösbar.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Nov 2020
    Beiträge
    315
    Seit 7.3 gibt's auch das geniale Feature: Temporal Table.
    Ist im Prinzip ähnlich wie mit der Trigger Lösung, nur dass es genau für diesen Zweck eine eigene Technik in der DB2 gibt.
    Das schöne ist, man kann damit auch die bestehenden Verwaltungsbildschirm-Programme verwenden um den Stand zu einem bestimmten Zeitpunkt sehen zu können.
    Beispiel:
    Gibt es ein Bildschirmprogramm um Rechnungsinformationen anzeigen zu lassen, braucht man nur vor dem Aufruf von diesem Programm, mit einer SQL Prozedur das gewünschte Datum angeben und dann werden voll automatisch mir am Bildschirm die Rechnungsinformationen vom angegebenen Zeitpunkt angezeigt.
    Funktioniert auch mit Native-IO Programme (hab's selbst getestet).
    Es müssen die Tabellen nur via ALTER TABLE um ein paar Spalten erweitert werden.
    Wenn man diese als Hidden definiert, muss man bei den Programmen nichts weiter machen als sie einfach nur neu kompilieren und fertig.

    Die Suche nach dem Ursacher geht dann sehr schnell und einfach. Und für die Anzeige kann man sogar die bestehenden Programme verwenden, was super ist, wenn es sich um Tabellen handeln die in Abhängigkeit stehen und es nicht nur eine einzige ist.
    Da kann ich auch soweit zurück in die Vergangenheit wie ich möchte.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Schön, dass die IBM das auch mal implementiert.
    Per Definition ist das schon mit ANSI SQL 2011 festgelegt worden.

    Aber du glaubst nicht, wie schnell, je nach Tabelle, du da deine Platten vollschreibst.
    Es gibt nämlich Anwendungen, die Satzsperren logisch über Feldinhalte durchführen und so am Tag zig1000de Updates durchführen.
    Das hatten wir bei Infor ca. 2001 schnell festgestellt, als mal zum Versuch die Journalisierung eingeschaltet wurde;-).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Nov 2020
    Beiträge
    315
    Naja, wenn du im Wiki die ANSI SQL 2011 Beschreibung liest, dann wirst du lesen, dass die IBM DB2 sogar die erste DB war die das implementiert hat.
    Oracle erst mit 12c.

    Das gleiche Problem mit vollschreiben hast du bei Triggern auch ;-)
    Reorg ist in beiden Lösungen das Stichwort.
    Dies sollte jedoch bei Bewegungsdaten nur sehr gezielt eingesetzt werden.
    Für Stammdaten (so wie hier gefragt) ist es perfekt.

  10. #10
    Registriert seit
    Jan 2001
    Beiträge
    832
    Zitat Zitat von Andreas_Prouza Beitrag anzeigen
    Naja, wenn du im Wiki die ANSI SQL 2011 Beschreibung liest, dann wirst du lesen, dass die IBM DB2 sogar die erste DB war die das implementiert hat.
    Oracle erst mit 12c.

    Das gleiche Problem mit vollschreiben hast du bei Triggern auch ;-)
    Reorg ist in beiden Lösungen das Stichwort.
    Dies sollte jedoch bei Bewegungsdaten nur sehr gezielt eingesetzt werden.
    Für Stammdaten (so wie hier gefragt) ist es perfekt.
    Hallo zusammen,

    zum Thema Temporal Table

    Haben wir auf der IBM i eine Möglichkeit die Anzahl der updates und Inserts einer Tabelle auszuwerten ?
    Für Stammdatentabellen wäre es hilfreich vorher zu wissen wieviel Daten sich in einem Zeitraum
    ansammeln könnten .
    Gruß
    Michael

  11. #11
    Registriert seit
    Nov 2020
    Beiträge
    315
    Hallo Michael,

    ja das ist einer der Vorteile dabei.
    In der History-Table gibt es ein paar zusätzliche Spalten (Aktion, Start- u. Endedatum, Änderungsuser usw.)
    Damit kannst du dir eine Liste auswerten lassen, in welchem Zeitraum welche Aktionen (Insert, Delete, Update) von welchen Usern durchgeführt wurden.

    lg Andreas

  12. #12
    Registriert seit
    Jan 2001
    Beiträge
    832
    Zitat Zitat von Andreas_Prouza Beitrag anzeigen
    Hallo Michael,

    ja das ist einer der Vorteile dabei.
    In der History-Table gibt es ein paar zusätzliche Spalten (Aktion, Start- u. Endedatum, Änderungsuser usw.)
    Damit kannst du dir eine Liste auswerten lassen, in welchem Zeitraum welche Aktionen (Insert, Delete, Update) von welchen Usern durchgeführt wurden.

    lg Andreas
    Hi Andreas,

    sorry da habe ich mich etwas falsch ausgedrückt.

    Ich möchte wissen bevor ich eine Tabelle umstelle wie viele Änderungen an einer Table stattfinden

    Gruß Michael

Similar Threads

  1. Journalreceiver werden gelöscht
    By Hubert in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-09-21, 11:37
  2. Satzanzahl und gelöscht Sätze
    By Robi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 06-08-20, 17:33
  3. Trigger sperrt Datensatz
    By Peet in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 31-05-17, 11:41
  4. QCLSRC in allen Bibliotheken gelöscht !!!
    By brittner in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 20-02-15, 10:48
  5. 36er ID wird nicht gelöscht
    By Frank.Sobanek in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 16-04-02, 09:01

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •