• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Datenbanken shrinken

Krolock

Geocacher
Ab GSAK 7.7 kann man bekanntlich über Database -> Totals -> compact die sqlite Datenbank um unnötig reservierten Platz reduzieren, sodass die .db3 Datei nur noch so viel Platz belegt wie benötigt.

Leider hab ich noch keinen direkten Macro-Befehl gesehen, um dies automatisiert zu erledigen. (Ähnlich wie PURGELOGS um die Anzahl der Logs zu reduzieren)

Z.Zt lasse ich dies durch einen direkten sqlite Call erledigen
Code:
$status = sqlite("Open","$PATH_TO_DBS\Default\sqlite.db3")
$status = sqlite("sql","vacuum")

Hier besteht jedoch seit ein paar Updates (ein paar Versionen vor 8.0.1.34) das Problem, dass die aktiv selektierte Datenbank gesperrt wird und nur noch lesend geöffnet werden kann.
Man muss folglich im Makro erst die aktive Datenbank auf eine Alternative umlenken.

Code:
DATABASE Name="foundDB" Action=select
$status = sqlite("Open","$PATH_TO_DBS\Default\sqlite.db3")
$status = sqlite("sql","vacuum")

Kennt jemand eine Alternative zur sqlite Lösung
 

Angrentil

Geomaster
Kannst du mir erklären, warum du eine Alternative zu sqlite brauchst? :???:

Afaik ist das doch die beste und schnellste Variante um Datenbanken zu manipulieren. Wenn dich nur das Umstellen der aktiven Datenbank stört, könntest du Clyde fragen, ob er das was drehen kann, oder ob das ein Bug ist in GSAK.

Oder du ergänzt dein Macro, dass nach der Komprimierung die aktive Datenbank wieder auf default gestellt wird.

Anyway, ich meine mal irgendwo im GSAK Forum gelesen zu haben, dass die Datenbank eigentlich so klein ist, dass sich das komprimieren nicht wirklich lohnt.
Ach ja, das war hier: http://gsak.net/board/index.php?showtopic=20569&view=findpost&p=148636.
 
OP
Krolock

Krolock

Geocacher
Angrentil schrieb:
Anyway, ich meine mal irgendwo im GSAK Forum gelesen zu haben, dass die Datenbank eigentlich so klein ist, dass sich das komprimieren nicht wirklich lohnt.
Das ist nicht ganz wahr, sqlite gibt von selbst keinen Platz mehr frei, d.h wenn du viel Bewegung (ich lese die Cacheupdates aus 60 KM Radius ein) in deiner Datenbank hast, wachsen die db3 Datein schon auf 3stellige Megabytegrößen an.

Das ist für Festplatten zwar kein Problem, wenn man aber seine GSAK Installation über mehrere Rechner via Dropbox synchronieren möchte und auf DSL 3000 beschränkt ist, ist es schon entscheident, ob man 40 MB oder 250 MB synchronisiert.
 
OP
Krolock

Krolock

Geocacher
Na ja,
erst eine andere Datenbank auswählen, dann den absoluten Pfad der DB angeben, dann ein sql Hack und anschließend wieder die gewünschte DB auswählen....
Das funktioniert zwar, hat aber nen Workaround Charakter. Wie schnell das schiefgehen kann, hab ich heute morgen gesehen, als mein Macro nicht mehr lief. (Da hatte ich den Readonly-Check noch nicht gesehen.)
Wenn ich das mit der fertigen Funktion zum Reduzieren der Logs vergleiche ist das schon mehr Fehlerpotential drin
Code:
PURGELOGS Settings="Logs0"

Aber jetzt läuft es ja wieder. Ich werd mir die Transaktionsgeschichte mal anschauen. Vllt bekomme ich ja wenigstens das Readonly Problem damit umgangen.
 

sonnyy

Geocacher
Hallo, schau mal hier
http://gsak.net/board/index.php?showtopic=20554

Vielleicht hat das was mit dem automatischem Einfügen von TRANSACTION zu tun, das Clyde erklärt, und es dadurch Probleme mit vacuum innerhalb gibt.
Das vaccum im Macro von Kai Team funktioniert problemlos
 

Angrentil

Geomaster
Also ich würde mir entweder ein kleines Macro schreiben (so wie du schon hast) und eben darin auch wieder zur Datenbank zurückwechseln... dann "merkst" du das quasi gar nicht.

Oder aber nochmal im GSAK Forum nachfragen. Die können dir bestimmt besser weiterhelfen... ich hab mich noch nicht so richtig mit sqlite auseinandergesetzt. :/
 
OP
Krolock

Krolock

Geocacher
Ich danke dir für den tollen Tipp, aber wenn du den Eingangspost liest, wirst du sehen, dass ich a) diesen Weg aufzeigte und b) nach einer automatisierten Lsg fürn Macro suchte.
 

Angrentil

Geomaster
Bin heute noch über das hier gestolpert:

http://gsak.net/board/index.php?showtopic=20802&view=findpost&p=150317

Vielleicht hilft dir das ja weiter.
 
OP
Krolock

Krolock

Geocacher
Angrentil schrieb:
Bin heute noch über das hier gestolpert:

http://gsak.net/board/index.php?showtopic=20802&view=findpost&p=150317

Vielleicht hilft dir das ja weiter.

Das hat sehr geholfen.
Ich hab das Shrinken mit Detaching/ReAttiching mit folgendem Code realisiert. Mal schauen ob Clyde noch ne Optimierung hat, aber ansonsten kann ich mit der Lsg gut leben.

Code:
# this is the situation where the problem occurs
DATABASE Name="Default" Action=select

# Detach static.db3
$_sql = "DETACH gsak_static"
$status = Sqlite("sql",$_sql)

# open default database
$database = "$_AppData\data\Default\sqlite.db3"
$status = Sqlite("open", $database)

# shrink the database
$_sql = "vacuum"
$status = Sqlite("sql",$_sql)

# ! Never forget closing the database !!!
$status = Sqlite("close")

# (re)attach the static.db3
$_sql = "ATTACH '$_ExePath\static.db3' AS gsak_static"
$status = Sqlite("sql",$_sql)

PAUSE msg="macro ends"
 
Oben