KitKat 10 Geschrieben 26. Juli 2021 Melden Teilen Geschrieben 26. Juli 2021 Hallo Zusammen, ich habe eine DB (MSSQL) von einem Hersteller. In einer Tabelle befinden sich sehr viele Informationen unterschiedlicher Herkunft. Die Tabelle speichert allgemein Alarme zu Geräten. Diese zu filtern nicht mein Problem. Ich benötige die gefilterten Daten in einer anderen Datenbank. Auch das ist kein Problem. Eines meiner Probleme ist, dass es passieren kann, dass sehr viele Alarme zu einem Gerät kurz hintereinander erfolgen. Diese haben dann vom Zeitstempel und ID abgesehen "fast" den gleichen Inhalt. (Gerätename, Ursache des Alarms, Dateipfad etc.) Ich brauche nur einen dieser Alarme also z.B. den Ersten (von mir aus auch den Letzten es ist wirklich egal). Ziel des Ganzen Auf der oben schon angesprochenen Datenbank, in die die Daten kopiert werden sollen, liegt auf der Zieltabelle ein Insert Trigger. Der Trigger löst einen Job aus, sobald ein Datensatz eingeht. Der Job darf unter keinen Umständen 100 Mal gestartet werden, weil innerhalb von 1 Minute 100 Alarme mit fast identischem Inhalt zu einem Gerät eingegangen sind. Ich müsste also irgendwie diese Alarme in der Originaltabelle zählen oder prüfen bevor ich sie in eine andere Datenbank kopiere. Im Grunde müsste in der Abfrage ja irgendwie bewerkstelligt werden, dass der erste neue Alarm eines z.B. neuen Gerätenamens zwischengespeichert wird, damit dieser mit weiteren eingehenden Datensätzen innerhalb eines bestimmten Zeitraums (sagen wir 5 Minuten) abgeglichen werden kann. Angenommen Gerätename: XYZ Alarmpfad: C:\Downloads\anwendung.exe Alarm: unerlaubtes Ausführen von Anwendung.exe Zeitstempel: jjjj-mm-tt ID: 12345678 Die ID und der Zeitstempel dürfen und müssen sich verändern, wenn aber hintereinander der Gerätename, der Alarmpfad und der Alarm innerhalb von 5 Minuten identisch sind, soll mit diesen Kriterien nur ein einziger Datensatz kopiert werden. Alertnativ könnte man auch alle Datensätze kopieren und dann den Trigger entsprechend anpassen, aber es wäre ja ein ähnliches Problem. Der erste eingehende Datensatz müsste irgendwo zum Vergleichen quasi gespeichert werden damit die Datensätze der folgenden Alarme mit diesem verglichen werden können, und zwar so lange bis eine Änderung in den Spalten Gerätename, Alarmpfad, Alarm auftritt. Hat jemand von euch eine Ahnung wie man sowas bewerkstelligt? Ich bin da offen für Ideen. Ich hab das ein oder andere schon ausprobiert aber bin kläglich gescheitert. :-( Deshalb hoffe ich, ihr könnt meinen Horizont erweitern. Viele Grüße KitKat Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 26. Juli 2021 Melden Teilen Geschrieben 26. Juli 2021 Hallo Was muss schlussendlich in deiner Zieltabelle drinnen stehen? Brauchst du da eine lückenlose Historie? Eine Idee wäre es vielleicht eine zusätzliche Spalte mit einem Triggerflag anzulegen und das nur dann zu setzen wenn es deinen Wünschen (Parametern) entspricht. Dann kannst du aufgrund dessen deinen Trigger auslösen uns sonst eben nicht. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 26. Juli 2021 Melden Teilen Geschrieben 26. Juli 2021 Moin, Anpassen des Triggers oder der Routine zum Kopieren. Wir kennen beide nicht, daher können wir dazu jetzt nicht sinnvoll mehr sagen. Gruß, Nils Zitieren Link zu diesem Kommentar
KitKat 10 Geschrieben 26. Juli 2021 Autor Melden Teilen Geschrieben 26. Juli 2021 Hi MDD, nö die lückenlose Historie hab ich ja in der Herstellerdatenbank. Ich benötige halt Inhalte aus Spalten, die Inhalte werden mit Hilfe eines Jobs an einen Connector übergeben, womit ein Ticket erstellt wird. Das Ganze ist klingt vielleicht wie ein Workaround ist aber die einzige Möglichkeit. Die Hersteller DB lässt sich nicht triggern. Ich hab etwas Ähnliches bereits implementiert und der Hersteller DB eine Prozedur hinzugefügt. Aber hier gibt es eben das Problem nicht, dass sehr viele Alarme des "fast" selben Inhaltes in kurzer Zeit auftreten. Und wir wollen ja nicht 100 Tickets in 5 Minuten erstellen. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 26. Juli 2021 Melden Teilen Geschrieben 26. Juli 2021 Moin, Gut, aber dann hat du ja einen Job, den du anpassen kannst. Was hat du denn da bislang versucht? Gruß, Nils Zitieren Link zu diesem Kommentar
KitKat 10 Geschrieben 29. Juli 2021 Autor Melden Teilen Geschrieben 29. Juli 2021 Der Job startet bisher ausschließlich den Prozess, der für die Ticketerstellung notwendig ist. Vielleicht hänge ich gedanklich zu sehr an der Lösung für die anderen Alerts. Bisher habe ich versucht die Prozedur so anzupassen, dass eben nicht alle Datensätze in die Ziel-DB eingehen. Die ersten 3-4 kopierten Datensätze sind auch unterschiedlich und alles scheint zu funktionieren. Aber dann wird immer und immer wieder der gleiche Datensatz kopiert. Ich habe eine stark vereinfachte Version angehängt. Ich hab das ein oder andere Versucht aber da das wenig Erfolgreich war auch nicht behalten oder abgespeichert. Leider hab ich nicht immer so viel Zeit und auch wenn meine Arbeiten und Ideen zur Automatisierung verschiedener Prozesse auf der Arbeit gerne gesehen werden, bleibt gerade dafür nie genug. Deshalb antworte ich vermutlich sehr unregelmäßig hier im Form. Als Nächstes werde ich erstmal den Ansatz von MDD verfolgen und versuchen den Trigger in der Zieltabelle anzupassen. Das erscheint mir durchaus eine gute Idee zu sein. Ich bin für Anregungen sehr dankbar erwarte aber keine fertige Abfrage/Prozedur, davon lerne ich ja nichts. Vielen lieben Dank für eure Anregungen und den Versuch mir zu Helfen. LG KitKat Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 Für mich fehlt bei deiner Abfrage das Zeitkriterium. Wenn du nicht willst das zu oft Alarm ausgelöst wird müsstest du die Zeit des letzten Eintrags in der Zieltabelle für diesen Alarm mit dem für den neuen Eintrag vergleichen und nur dann schreiben wenn die Zeitdifferenz x Minuten übertrifft. btw: Im not exists Zweig kannst auf die ganzen Spalten in der Abfrage verzichten. Macht die Sache nur unübersichtlicher. SG MDD Ausserdem würde ich daran denken dass es vorkommen wird / kann, dass die Übertragung aus irgendeinem Grund unterbrochen wird. Wie stellst du sicher, dass dann nicht 100erte Alarm ausgelöst werden? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.