Autor |
Beitrag |
pwsolaris
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Mi 21.01.09 09:58
Hi,
ich habe eine Software geschrieben, die Daten in eine Firebird Datenbank schreibt. Bevor neue Daten in die DB geschrieben werden, werden die Tabellen geleert. Das Problem ist nun nur, das die DB dennoch immer größer wird, weil die alten Daten zwar nicht mehr in den Tabellen stehen, jedoch immer noch vorhanden zu sein scheinen da der Platz der alten Daten nicht freigegeben wurde.
Wie kann ich nun die Datenbank komplett leeren, dass die Tabellen leer sind, und die DB im leeren Zustand auch wirklich leer ist?
Mal zum Verständnis: Leere Datenbank (neu aufgesetzt): knapp 1 MB, Mit Daten: knapp 70 MB. Nach löschen von Daten undm it leeren Tabellen: immernoch 70 MB. Beim nächsten einfügen von Daten in die DB: 140 MB usw.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 21.01.09 10:14
normalerweise werden die "gelöschten" Datensätze erst von den neuen überschrieben, und erst danach wächst die DB weiter..
Sicher, dass du das Löschen auch mit einem COMMIT abschließt?
Aber du kannst die Datenbank auch händisch wieder komprimieren. Dazu gibt es den Backup / Restore Zyklus. Du machst also ein Backup der DB, und spielst dieses sofort wieder zurück.
Wie das genau funktioniert, dürfte davon abhängen, welche Komponenten du verwendest, um auf die DB zuzugreifen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Mi 21.01.09 10:20
normalerweise versucht Firebird die neuen Daten in die Speicherplätze der alten gelöschten Daten einzuschreiben. Das geht aber nicht immer, z.b. nicht, wenn du Daten hast, die sich stark voneinander unterscheiden.
Ansonsten hilft da nur wie gesagt: Backup & Restore.
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
pwsolaris 
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Mi 21.01.09 10:56
Erstmal Danke für die schnellen Antworten.
Die Daten die in die DB geschrieben werden, ähneln sich sehr stark. Leider ist es dennoch so, das die "alten" und / oder "gelöschten" Datensätze nicht von den neuen überschrieben werden.
Ich verwende auch nach dem Delete-Befehl ein COMMIT.
Wie kann ich denn über mein Programm ein BackUp der DB erstellen und dieses anschließend wieder einzuspielen?
Ich habe nun auch nochmal den Tipp bekommen, die Tabelle mit dem TRUNCATE BEfehl zu leeren. Leider musste ich feststellen, dass dieser Befehl für Firebird nicht existiert.
Zuletzt bearbeitet von pwsolaris am Mi 21.01.09 11:20, insgesamt 1-mal bearbeitet
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 21.01.09 11:17
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
pwsolaris 
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Mi 21.01.09 11:38
Also ich benutze die Standard Interbase Komponente die bei Delphi RAD 2007 dabei war.
Wie schon oben erwähnt, werde ich mich auch mal nach einer Art TRUNCATE Befehl schlau machen.
|
|
pwsolaris 
      
Beiträge: 71
Erhaltene Danke: 1
MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
|
Verfasst: Mi 21.01.09 12:55
Ich habe jetzt mit dem Tool GBAK von Firebird eine Funktionierende, aber leider etwas umständliche Lösung gefunden.
Jetzt muss ich nur noch rausbekommen, wie ich das Tool mit den Parametern über ShellExecute aufrufe und mein Tag ist gerettet.
Danke für eure Hilfe
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 21.01.09 13:02
Als Alternative käme evtl. noch FBLib in Frage, damit bin ich bislang recht zufrieden. Die angesprochenen Services sind darin auch enthalten.
|
|
|