Problem mit Transaktionslog

15/12/2008 - 11:25 von Thomas Kehl | Report spam
Hallo zusammen.

Ich habe folgendes Problem:
Ich habe eine Applikation erstellt, die eine bestehende SQL-Server-Datenbank
"kopiert". D.h. es wird eine neue DB angelegt und Daten kopiert (mit einer
komplexen Logik was kopiert werden soll und was nicht). Zum Daten kopieren
wird SqlBulkCopy verwendet (.NET 2.0). Zum Teil wird auch kopiert und dann
wieder gelöscht. Dies funktioniert im Allgemeinen auch.
Nun habe ich aber das Problem, dass mir das Transaktionslog überlàuft, wenn
es sich bei der Original-Datenbank um eine sehr grosse DB handelt. Kann mir
jemand einen Tipp geben, wie ich das verhindern kann?
Wichtig ist: es müsste alles programmtechnisch gemacht werden können. D.h.
wenn das Programm jetzt gestartet wird, so wird die DB angelegt und kopiert
ohne dass der Benutzer eingreifen muss (ausser, dass er den DB-Server
angeben muss).

Besten Dank für eure Hilfe.

Grüsse, Thomas
 

Lesen sie die antworten

#1 Elmar Boye
15/12/2008 - 12:15 | Warnen spam
Hallo Thomas,

"Thomas Kehl" <t.kehl (at) heeb.com> schrieb ...
Ich habe eine Applikation erstellt, die eine bestehende SQL-Server-Datenbank "kopiert". D.h. es wird eine neue DB angelegt und
Daten kopiert (mit einer komplexen Logik was kopiert werden soll und was nicht). Zum Daten kopieren wird SqlBulkCopy verwendet
(.NET 2.0). Zum Teil wird auch kopiert und dann wieder gelöscht. Dies funktioniert im Allgemeinen auch.
Nun habe ich aber das Problem, dass mir das Transaktionslog überlàuft, wenn es sich bei der Original-Datenbank um eine sehr grosse
DB handelt. Kann mir jemand einen Tipp geben, wie ich das verhindern kann?



Das Transaktionsprotokoll làßt sich nie ganz abschalten.
Helfen kann, die Datenbank wàhrend des Kopieren in den
Wiederherstellungsmodus "Einfach" zu versetzen.
Bei einer neu angelegten Datenbank, die noch nicht gesichert
wurde, befindet sich das Protokoll immer im Abschneidemodus,
so dass der Wiederherstellungsmodus keine Rolle spiel.

Dann wird das Protokoll regelmàßig abgeschnitten. Wobei das nur
funktioniert wenn nicht alles in einer einzelnen Transaktion ablàuft.
Auch sollte die Größe bei SqlBulkCopy eingestellt werden:
http://msdn.microsoft.com/de-de/lib...hsize.aspx


Wichtig ist: es müsste alles programmtechnisch gemacht werden können. D.h. wenn das Programm jetzt gestartet wird, so wird die DB
angelegt und kopiert ohne dass der Benutzer eingreifen muss (ausser, dass er den DB-Server angeben muss).



Geht alles via T-SQL oder auch SMO:
Der Wiederherstellungsmodus kann über ALTER DATABASE geàndert werden.

Gruß Elmar

Ähnliche fragen