[NEWSboard IBMi Forum]
Page 1 of 3 1 2 ... Last
  1. #1
    Join Date
    Feb 2021
    Posts
    13

    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
    Join Date
    Apr 2019
    Posts
    40
    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
    Join Date
    Jun 2001
    Posts
    1.835
    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 wichtige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Join Date
    Feb 2001
    Posts
    19.645
    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: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Join Date
    Jul 2001
    Posts
    2.576
    Quote Originally Posted by sven70 View Post
    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.

  6. #6
    Join Date
    Feb 2001
    Posts
    19.645
    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: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Join Date
    Nov 2020
    Posts
    192
    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
    Join Date
    Feb 2001
    Posts
    19.645
    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: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Join Date
    Nov 2020
    Posts
    192
    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
    Join Date
    Jan 2001
    Posts
    818
    Quote Originally Posted by Andreas_Prouza View Post
    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
    Join Date
    Nov 2020
    Posts
    192
    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
    Join Date
    Jan 2001
    Posts
    818
    Quote Originally Posted by Andreas_Prouza View Post
    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
    Replies: 2
    Last Post: 01-09-21, 10:37
  2. Satzanzahl und gelöscht Sätze
    By Robi in forum IBM i Hauptforum
    Replies: 2
    Last Post: 06-08-20, 16:33
  3. Trigger sperrt Datensatz
    By Peet in forum NEWSboard Programmierung
    Replies: 5
    Last Post: 31-05-17, 10:41
  4. QCLSRC in allen Bibliotheken gelöscht !!!
    By brittner in forum IBM i Hauptforum
    Replies: 7
    Last Post: 20-02-15, 09:48
  5. 36er ID wird nicht gelöscht
    By Frank.Sobanek in forum IBM i Hauptforum
    Replies: 0
    Last Post: 16-04-02, 08:01

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •