Einführung und Überblick

Mit dem Patch 2021.5310.1 wird der eindeutige Index für die Bedarfsdeckerdatei DZUNAP verkürzt: aus den eindeutigen Schlüsseln DZUNAL01 und DZUNAL06 wird das Feld ZUYBED entfernt.
Zugleich wurden die funktionslosen Felder ZUGPPO, ZUVZTT, ZURFRM, ZURANW, ZURAUN, ZURAUP, ZURKOP aus der Datenbanktabelle DZUNAP entfernt.

Es ist möglich, wenn auch sehr unwahrscheinlich, dass bestehende Datensätze vorliegen, die aus Sicht der verkürzten Schlüsselliste nicht mehr eindeutig sind.
Dies würde dazu führen, dass die neuen Indizes DZUNAL01 und DZUNAL06 auf der Datenbank nicht angelegt werden können (Fehlermeldung: doppelte eindeutige Schlüssel).


Um zu prüfen, ob Probleme mit bestehenden Datensätzen vorliegen, ist nach dem Patch zu überprüfen, ob die Indizes DZUNAL01 und DZUNAL06 korrekt auf der Datenbank angelegt sind.

@select name, is_unique from sys.indexes where name in ('DZUNAL01', 'DZUNAL06')


✅ Wenn diese Abfrage beide Indizes listet und für is_unique den Wert 1 angibt, sind die Indizes erfolgreich auf der Datenbank angelegt und es liegt kein Datenproblem vor.

❌ Wenn diese Abfrage jedoch einen oder beide Indizes nicht auflistet, liegen vermutlich Datensätze vor, die doppelte eindeutige Schlüssel verursachen.
Zur weiteren Bestätigen kann über den Datei-Explorer versucht werden, die Indizes DZUNAL01 und DZUNAL06 erneut manuell anzulegen. Im Fehlerfall wird eine Meldung ausgegeben.
Können die Indizes wegen doppelten eindeutigen Schlüsseln nicht angelegt werden, sind die Datensätze zu bereinigen, siehe nachfolgende Anleitung.

Behebung von problematischen Datenbeständen

Überprüfen, welche Datensätze doppelte eindeutige Schlüssel verursachen

Zur Überprüfung, welche Datensätze doppelte eindeutige Schlüssel verursachen, wird nachfolgender SQL ausgeführt:

with MyOxaion (firm, baan, bnam, bpan, koan, bfdv, badv, bndv, bpdv, kodv, idnr, lagr, count, maxZuybed) as 
(
select ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR, count(*), max(ZUYBED) from DZUNAP 
group by ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR 
having count(*) > 1
)
-- Die erste Spalte enthält das Fixiertkennzeichen, die zweite die Anzahl der doppelten Schlüssel, anschließend folgt der Schlüssel
select ZUFIXR, count, ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR, ZUYBED, A.* from DZUNAP as A
join MyOxaion
on ZUFIRM = firm and ZUBAAN = baan and ZUBNAN = bnam and ZUBPAN = bpan and ZUKOAN = koan and ZUBFDV = bfdv and ZUBADV = badv and ZUBNDV = bndv and ZUBPDV = bpdv and ZUKODV = kodv and ZUIDNR = idnr and ZULAGR = lagr
order by A.ZUFIRM, A.ZUBAAN, A.ZUBNAN, A.ZUBPAN, A.ZUKOAN, A.ZUBFDV, A.ZUBADV, A.ZUBNDV, A.ZUBPDV, A.ZUKODV, A.ZUIDNR, A.ZULAGR 

Problematische Datensätze bereinigen

Wenn es Datensätze gibt, die mit der Indexverkürzung zu doppelten Schlüsseln führen, werden zunächst alle Sätze ohne Fixierung gelöscht.

Achtung: Diesen SQL ausschließlich im SQL-Managementstudio ausführen, nicht in der oxaion-SQL-Zentrale!

-- Achtung: SQL nur im SQL-Managementstudio ausführen, nicht in der oxaion-SQL-Zentrale!
with MyOxaion (firm, baan, bnam, bpan, koan, bfdv, badv, bndv, bpdv, kodv, idnr, lagr, count, maxZuybed) as 
(
select ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR, count(*), max(ZUYBED) from DZUNAP 
group by ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR 
having count(*) > 1
)

delete from DZUNAP 
       from DZUNAP -- Die doppelte ‘from DZUNAP’ Klausel ist korrekt!
join MyOxaion 
on ZUFIRM = firm and ZUBAAN = baan and ZUBNAN = bnam and ZUBPAN = bpan and ZUKOAN = koan and ZUBFDV = bfdv and ZUBADV = badv and ZUBNDV = bndv and ZUBPDV = bpdv and ZUKODV = kodv and ZUIDNR = idnr and ZULAGR = lagr
where ZUFIXR <> 'J' 


Anschließend wird erneut die Überprüfung auf Datensätze mit doppeltem eindeutigen Schlüssel ausgeführt, um festzustellen, ob noch fixierte Sätze in der Bedarfsdeckerdatei mit doppelten Schlüsseln vorkommen.
Wenn das der Fall ist und die Ergebnismenge des SQL zur Überprüfung nicht leer ist, dann wird der folgende SQL ausgeführt, um bei Mehrfachvorkommen pro Schlüssel diese Mehrfachkommen bis auf einen Satz zu löschen.

Achtung: Diesen SQL ausschließlich im SQL-Managementstudio ausführen, nicht in der oxaion-SQL-Zentrale!

-- Achtung: SQL nur im SQL-Managementstudio ausführen, nicht in der oxaion-SQL-Zentrale!
with MyOxaion (firm, baan, bnam, bpan, koan, bfdv, badv, bndv, bpdv, kodv, idnr, lagr, count, maxZuybed) as 
(
select ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR, count(*), max(ZUYBED) from DZUNAP where ZUFIXR = 'J'
group by ZUFIRM, ZUBAAN, ZUBNAN,  ZUBPAN, ZUKOAN, ZUBFDV, ZUBADV, ZUBNDV, ZUBPDV, ZUKODV, ZUIDNR, ZULAGR 
having count(*) > 1
)

delete from DZUNAP 
       from DZUNAP -- Die doppelte ‘from DZUNAP’ Klausel ist korrekt und notwendig!
join MyOxaion 
on ZUFIRM = firm and ZUBAAN = baan and ZUBNAN = bnam and ZUBPAN = bpan and ZUKOAN = koan and ZUBFDV = bfdv and ZUBADV = badv and ZUBNDV = bndv and ZUBPDV = bpdv and ZUKODV = kodv and ZUIDNR = idnr and ZULAGR = lagr and ZUYBED < maxZuybed 

Neuerstellung der Indizes für die Datei DZUNAP

Nach der Bereinigung der problematischen Datensätze sind die Indizes DZUNAL01 und DZUNAL06 für die Datei DZUNAP manuell anzulegen.
Dazu wird der Dateiexplorer GE14290 verwendet und die Aktion "Datenbankobjekt erstellen" für beide Indizes ausgeführt.

  • Keine Stichwörter