ich befasse mich ja gerade mit dem Thema Update von Datenbanken und im Rahmen dessen mache ich auch Versuche, mit dem Table Data Comparer von IBexpert Daten zwischen Datenbanken auszutauschen. Dabei bin ich auf einen Punkt gestoßen, den ich nicht sortiert kriege ...
Ich habe eine leere 2012er Datenbank und eine 2011er mit ca. 300-400.000 Datensätzen an Nutzdaten. Dabei sind ca. 60T Datensätze wie PLZ und ähnliches in der 2012er ja auch schon drin. Auf die 2011 lasse ich einen Strukturabgleich los und fülle die neuen NOT NULL Felder mit sinnvollen Inhalten, damit es keine Konsistenz-Fehler mehr gibt. Das zur Ausgangssituation. Beiden Datenbanken sind so eingestellt, daß kein Platz für Datensatzversionen reserviert wird, also gfix -use full ...
In diesem Zusand hat die 1012er Datenbank 34335 Seiten.
Nun mache ich die Tabelle BPLZ leer und mache ein Backup/Restore Zyklus (B/R-Zyklus). Danach sind wir bei dann bei 33261 Seiten
Zur Vorbereitung des Datenabgleichs mit TableDataCompare schalte ich nun die Trigger aus (per Befehl im IBexpert DB-Explorer) und deaktiviere per Update-Befehl auf RDB$... die Foreign Keys. Obwohl ich eigentlich nichts wirklich an den Daten inklusive Metadaten ändere sind wir dann plötzlich bei 33439 Seiten. Kleinkram ...
Nun importiere ich die Daten anhand des vom TableDataCompare erzeugten SQL-Script. Die Datenbank wächst dadurch auf 36644 Seiten an. Angesichts einer Seitengröße von 16384 Bytes sind das ca. 50Mbyte an Zuwachs, was ich für okay halte wenn ich zum Beispiel die 2011er mit einer leeren 2011 vergleiche.
Neuer B/R-Zyklus und die Datenbank landet bei 35947 Seiten. Nach dem Aufräumen sind also netto ca. 40Mb mehr an Volumen da, angesichts der Tatsache, daß viele Tabellen nur ganz wenige Datensätze haben und deswegen die dafür notwendigen Seiten quasi "verschwendet" sind, komme ich bis hierhin gedanklich noch mit.
Aber jetzt kommts: Ich schalte jetzt wieder die Foreign-Keys ein und der Testrechner nimmt sich erst mal ne Auszeit von einigen Minuten. Da kein wirklicher Dampfhammer noch erklärbar. ABER: die Datenbank hat hinterher 40414 Seiten und ist auf der Festplatte 630Mb groß, das ist ein Zuwachs von 70Mb und damit ja fast doppelt soviel wie die wirklichen Nutzdaten ...
Ein neuer B/R-Zyklus ändert daran auch nix mehr, ebenso wie das Einschalten der Trigger die Seitenzahl unverändert läßt ...
Kann mir das mal jemand erklären?
Übrigens: der Gegenversuch in der 2011er Datenbank aus der die Daten stammen verläuft so, wie man es sich vorstellen würde. Das Aus- und wieder Einschalten der Foreing-Keys (genauer: der Indizes dazu) ändert aber mal rein gar nichts an der Zahl der belegten Seiten.
HÜLFE, HÜLFE ...

Gruß
Michael