SQL Transaktionsprotokoll minimieren

11. April 2007 13:22

Wenn ich eine Navision DB auf einem SQL Server anlege, erstelle ich mit dem Client eine Datenbank und lese dann eine Datensicherung ein.

Das Problem ist, dass ich am Ende ein Transaktionsprotokoll habe, dass so groß ist wie die Datenbank. Manchmal sogar größer.

Der SQL Server ist aber vom Speicherplatz schon sehr ausgereizt und ich habe eigentlich keinen Platz für sowas.

Gibt es eine Möglichkeit, zu verhindern, dass das Transaktionsprotokoll so stark wächst ?

Als Wiederherstellungsform hab ich schon "Simple" versucht, das hat nicht geholfen. Und da es nur ein Mandant ist, muss leider alles in einem Rutsch eingelesen werden.

11. April 2007 13:47

Das Anwachsen kannst du nur verhindern, wenn du in der Zeit, die das Einlesen braucht, in regelmässigen Abständen eine Transaktionsprotokollsicherung laufen läßt, aber selbst das ist nicht sicher, wenn in den Transaktionen keine Breakpoints gesetzt werden.

DU kannst aber auf jeden Fall nach dem Import mit dem Enterprise Manager die ldf-Datei verkleinern.
rechte Maus auf die Datenbank -> alle Tasks -> Datenbank verkleinern.
dort dann auf die Taste Dateien klicken, in der Dropdownbox die ldf-Datei auswählen, dann die Option "verkleinern auf" anwählen und in dem Feld daneben die gewünschte Zielgröße eingeben. empfehlenswert ist etwa ein Viertel bis die Hälfte der Datenbankdatei. Dann auf OK klicken und die Meldung, dass erfolgreich verkleinert wurde bestätigen. Nun bist du wieder im ersten Fenster der Verkleinerung. Hier aber keinesfalls OK klicken, sondern das Fenster mit Abbrechen schließen, sonst verkleinerst du deine Datenbankdatei auch noch.

12. April 2007 09:55

Während des Einlesens kann ich keine Sicherung machen. Ich kann noch nichtmal auf die Eigenschaften der DB zugreifen. Ist übrigends SQL 2005, falls die Version bei diesem Problem wichtig sein sollte.

"Datenbank verkleinern" funktioniert, wenn die DB steht. Noch bessere Ergebnisse habe ich mit

Backup 'Log Datenbank' with Truncate_only
dbcc shrinkfile (.. )

erreicht. Da wir die DB täglich voll sichern, ist das Transaktionsprotokoll eh egal.

Mein Problem ist wirklich, dass beim Einlesen der FBK das Protokoll zu groß wird. Momentan lese ich eine Sicherung ein, bei der nach 4 GB von 9 GB das Transaktionsprotokoll schon über 25 GB groß ist.

12. April 2007 10:18

ngoo hat geschrieben:Während des Einlesens kann ich keine Sicherung machen. Ich kann noch nichtmal auf die Eigenschaften der DB zugreifen. Ist übrigends SQL 2005, falls die Version bei diesem Problem wichtig sein sollte.

Das hat in sofern auswirkungen, als dass ich dir jetzt nicht aus dem Kopf sagen muss, wie du die Datenbankwartung konfigurieren muss, damit das System die Transaktionsprotokollsicherung automatisch macht.
ngoo hat geschrieben:"Datenbank verkleinern" funktioniert, wenn die DB steht. Noch bessere Ergebnisse habe ich mit

Backup 'Log Datenbank' with Truncate_only
dbcc shrinkfile (.. )

erreicht. Da wir die DB täglich voll sichern, ist das Transaktionsprotokoll eh egal.

damit machst du das Log aber komplett leer. Deshalb muss man danach sofort ein Full Backup machen, wenn man keinen Datenverlust riskieren will.
Im übrigen ist es gar nicht empfehlenswert die Protokolldatei soo klein zu machen, wenn mit der Datenbank produktiv gearbeitet wird.
Je öfter die Datei verkleinert und wieder vergrößert wird, desto größer wird die Fragmentierung, und das kostet tierisch Performance!
Da das Transaktionsprotokoll immer nur sequentiell beschrieben und gelesen wird, ist es am besten, wenn man diese als ein großes zusammenhängendes Stück auf der Platte hat.
Ausserdem ist eine Transaktionsprotokollsicherung durchaus sinnvoll, auch wenn täglich voll gesichert wird. Es kommt halt darauf an, wieviel Zeit benötigt wird, die Arbeit des Tages zu wiederholen, wenn kurz vor em nächtlichen Backup jemand die Datenbank frittiert!
Wenn in der Std. z.B. 100 Aufträge erfasst werden, macht es durchaus Sinn, das Transaktionsprotokoll alle 15 Minuten zu sichern, so dass im Falle eines Falles maximal 25 Aufträge erneut erfasst werden müssen.
ngoo hat geschrieben:Mein Problem ist wirklich, dass beim Einlesen der FBK das Protokoll zu groß wird. Momentan lese ich eine Sicherung ein, bei der nach 4 GB von 9 GB das Transaktionsprotokoll schon über 25 GB groß ist.


Wenn das automatische Sichern des Transaktionsprotokoll alle 2 Minuten dann nicht weiterhilft, bleibt Dir nichts anderes, als zum erstellen einer neuen Datenbank einen Server mit ausreichend großer Platte für die LDF Datei zu verwenden, und dann ein SQL Backup machen und auf dem Zielserver wieder einlesen.
Sinnvoll wäre es dann, als Mutter für neue Datenbanken gleich ein SQL-Backup zu verwenden.
Beim Einlesen des Backups als neue Datenbank hast du ja die Möglichkeit, die Dateinamen und den Pfad zu ändern, so dass es keine Konflikte gibt.