Guten Tag.
Für eine "handvoll" zu ändernder oder zu löschender Datensätze müssen auf dem Hauptserver UND nochmal auf dem Ersatzserver 30.000 Datensätze einzeln durchgehechelt werden.
Bei Neuauflage so eines Projekts würde ich gelöschte Datensätze mit einer Lösch-Kennung versehen, aber stehen lassen. Dann können sie gezielt übermittelt werden.
Was spricht dagegen, dieses nachträglich einzufügen? Es wäre die weitaus sauberste Lösung (abgesehen von der Komplettkopie).
Dein Problem sind die gelöschten Datensätze. Etwas, das nicht da ist, kann man auch nicht zu einem Vergleich heranziehen. Willst du nicht jeden Datensatz einzeln auf Existenz prüfen bzw. alternativ ohne Prüfung einfach die komplette (Mandanten-) Datenbank kopieren, wirst du um eine Markierung oder Aufzeichnung gelöschter Datensätze nicht herumkommen.
Als Abkürzung sehe ich nur, auf der Kopie nach Neuanlage und Änderung die Anzahl der nicht geänderten, alten Datensätze zu zählen. Ist diese Anzahl gleich jener auf dem Original, wurden keine weiteren Datensätze gelöscht und du kannst den aufwändigen Einzelvergleich aller IDs weglassen.
Davon abgesehen gehe ich mal davon aus, dass du bereits deine ID-Prüfungen so weit en bloc ausführst, wie es die Datenbank zulässt, d.h. nicht für jeden der 30.000 Datensätze ein einzelnes select, sondern eine Gruppe à la "select count(*) from bla where id in (1,2,3,4)". Kommt hier genau die Anzahl raus, die an IDs angegeben wurde, ist dieser Block unverändert. Machst du das zum Beispiel mit je Tausend IDs, hättest du im günstigsten Fall von nur einer Löschung nur noch 1029 select-Abfragen statt 30.000.