Doppelte Eintraege finden
-
Hallo zusammen,
wie ist es moeglich doppelte Eintraege zu finden in der CMDB?
Ohne das man in die Kategorien durchsucht, vielleicht mit einem eingebauten Systemtool?
Ansonsten faellt mir nur der Report Manager ein….i-doit 1.5.5 PRO
Gruesse
-
Hallo The.Man2,
um welche Art Eintraege geht es Dir?
Multi-Value-Eintraege?
Single-Value-Eintraege?
Gleiche Objekte?
Doppelte Kategoriezuweisungen?Fuer die Single-Value-Eintraege gibt es in der Verwaltung einen Button:
Verwaltung > Systemtools > Cache/Datenbank > Datenbank > Doppelte Single-Value Eintraege loeschenFuer die doppelten Kategoriezuweisungen gibt es in der Verwaltung ebenfalls etwas:
Verwaltung > Systemtools > Cache/Datenbank > Datenbank > Doppelt zugewiesene Kategorien entfernenAnsonsten (fuer Multi-Value Eintraege und Objekte) faellt mir nur der Report Manager ein.
Gruss,
jkondek -
Hi jkondek,
speziell geht es mir um Objekte wie Server, Clients. Durch verschiedene Imports kann es passieren das doppelte Eintraege in der Datenbank sind (da ein Objekt z.B. nur den Objektnamen, aber keine SN,MAC,IP usw hat). Das dies durch den Import passieren kann und wie man dies verhindern kann ist mir klar. Trotzdem wuerde ich gern die Moeglichkeit haben dies zu kontrollieren.Danke fuer die schnelle Antwort
-
Hallo The.Man2,
ich habe mir genau fuer solche Faelle bereits einen Report erstellt:
SELECT
a.Objekttitel,
a.Anzahl,
a.ID,
a.Typ,
a.StatusFROM
(SELECT
j1.isys_obj__title AS 'Objekttitel',
COUNT(j1.isys_obj__title) AS 'Anzahl',
GROUP_CONCAT(j1.isys_obj__id ORDER BY j1.isys_obj__id SEPARATOR ', ') AS 'ID',
– GROUP_CONCAT(isys_obj_type__title ORDER BY j1.isys_obj__isys_obj_type__id SEPARATOR ', ') 'Typ',
GROUP_CONCAT(j1.isys_obj__isys_obj_type__id ORDER BY j1.isys_obj__isys_obj_type__id SEPARATOR ', ') 'Typ',
-- GROUP_CONCAT(isys_cmdb_status__title ORDER BY j1.isys_obj__isys_cmdb_status__id SEPARATOR ', ') AS 'Status'
GROUP_CONCAT(j1.isys_obj__isys_cmdb_status__id ORDER BY j1.isys_obj__isys_cmdb_status__id SEPARATOR ', ') AS 'Status'FROM isys_obj AS j1
LEFT JOIN isys_obj_type
ON isys_obj_type__id = j1.isys_obj__isys_obj_type__idLEFT JOIN isys_cmdb_status
ON isys_cmdb_status__id = j1.isys_obj__isys_cmdb_status__idWHERE TRUE
-- AND (j1.isys_obj__isys_obj_type__id = 5
-- OR j1.isys_obj__isys_obj_type__id = 59)GROUP BY j1.isys_obj__title ) a
WHERE a.Anzahl > 1
Ich lasse mir beim Objekttyp und beim Status allerdings lediglich die IDs ausgeben, da bei der Ausgabe des Titels die Uebersichtlichkeit verloren geht (z.B. Objekttitel Server: LC__CMDB__OBJTYPE__SERVER, Status In Betrieb: LC__CMDB_STATUS__IN_OPERATION). Vorausgesetzt, Du hast die Titel nicht eigenstaendig angepasst.
(Den Titel kannst Du Dir ausgeben lassen, wenn Du die auskommentierten Zeilen im SELECT-Statement nutzt, dafuer allerdings die beiden anderen Zeilen auskommentieren.)Was beim Status prinzipiell noch moeglich waere (falls Du den ueberhaupt braucht): die Titel einfach in einer CASE Abfrage nach Belieben setzen.
Falls Du Deine Objekttypen einschraenken moechtest, kannst Du die WHERE-Abfrage einkommentieren und gegen die entsprechenden Objekttypen-IDs ersetzen/ergaenzen.Gruss,
jkondek -
Wir haben nach einer längeren Import-Zeit durch Excel richtig aufgeräumt! Dazu haben wir einen Report mit allen Items und den entsprechenden Kategorien erstellt und dann in Excel die doppelten Einträge farblich markiert.
Nach der Bereinigung habe ich dann in den Validierungseinstellung einige Attribute auf "Eindeutig" gestellt, weshalb sie global nur einmal vorkommen können.
-
Danke,
hat super funktioniert. -
Hallo. Finde die Idee auch gut.
Wie müsste man den Report erweitern, dass er nur doppelte Objekte anzeigt, die nicht den Status z.B. "Gelöscht" haben?
Bin nicht so fit in SQL.
Danke! -
Hallo andyle,
meinst Du den Zustand oder den Status? Das sind zwei unterschiedliche Abfragen.
Der Zustand kann unfertig (1), normal (2), archiviert (3) und geloescht (4) sein.
Die passende Abfrage um nur die Objekte im Status normal zu erhalten:[…]
WHERE TRUE
– AND (j1.isys_obj__isys_obj_type__id = 5
-- OR j1.isys_obj__isys_obj_type__id = 59)
AND j1.isys_obj__status = 2
[…]Der Status kann alles sein, was in Deiner Tabelle isys_cmdb_status enthalten ist.
Von dort wuerde ich auch die ID fuer die Abfrage holen:[…]
WHERE TRUE
– AND (j1.isys_obj__isys_obj_type__id = 5
-- OR j1.isys_obj__isys_obj_type__id = 59)
AND j1.isys_obj__isys_cmdb_status__id = 6 (z.B. fuer "in Betrieb")
[…]Gruss,
jkondek -
meinst Du den Zustand oder den Status? Das sind zwei unterschiedliche Abfragen.
Zustand natürlich, danke!