Jump to content

temporäres Speichern von Datensätzen zum Vergleichen


Recommended Posts

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
 










 

Link to post

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.

Link to post

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. :-) 

 

Link to post

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. 

 

 

Abfrage.PNG.f7af558c8d6857f58d2e96815ca0e6bc.PNG

 

 

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
 

Link to post

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?

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...