none
SQL-2008 Sicherung und Verkleinerung des Transaktionsprotokolls RRS feed

  • Frage

  • Hallo,

    ich habe des Problem, das in meiner Datenbank die LDF-Datei sehr groß geworden ist. Das deutet ja darauf hin, das die Datensicherung in irgend einer Art und Weise nicht korrekt ist. Wie gehe ich vor, um die Datenbank "ordentlich" zu verkleinern.

    Gruß

    Michael Pleick

    Mittwoch, 22. August 2012 07:42

Antworten

  • Moin moin,

    ich bediene mich mal schnell der Diagnostic Queries von Glenn Berry.

    Zuerst: wie voll ist das T-Log derzeit, wieviel Luft haben wir noch?

    -- Recovery model, log reuse wait description, log file size, log usage size  (Query 16) 
    -- and compatibility level for all databases on instance
    SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model], 
    db.log_reuse_wait_desc AS [Log Reuse Wait Description], 
    ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)],
    CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS [Log Used %], 
    db.[compatibility_level] AS [DB Compatibility Level], 
    db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on, db.is_auto_update_stats_on,
    db.is_auto_update_stats_async_on, db.is_parameterization_forced, 
    db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on,
    db.is_auto_close_on, db.is_auto_shrink_on
    FROM sys.databases AS db WITH (NOLOCK)
    INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK)
    ON db.name = lu.instance_name
    INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK) 
    ON db.name = ls.instance_name
    WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' 
    AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
    AND ls.cntr_value > 0 OPTION (RECOMPILE);

    Haben wir noch offene Transaktionen?

    -- Listing 4.26: Interrogating the active_snapshot_database_transactions DMV.
    SELECT DTASDT.transaction_id ,
    DTASDT.session_id ,
    DTASDT.transaction_sequence_num ,
    DTASDT.first_snapshot_sequence_num ,
    DTASDT.commit_sequence_num ,
    DTASDT.is_snapshot ,
    DTASDT.elapsed_time_seconds ,
    DEST.text AS [command text]
    FROM sys.dm_tran_active_snapshot_database_transactions DTASDT
    INNER JOIN sys.dm_exec_connections DEC
    ON DTASDT.session_id = DEC.most_recent_session_id
    INNER JOIN sys.dm_tran_database_transactions DTDT
    ON DTASDT.transaction_id = DTDT.transaction_id
    CROSS APPLY sys.dm_exec_sql_text(DEC.most_recent_sql_handle) AS DEST
    WHERE DTDT.database_id = DB_ID() 

    So bekommt man einen ungefähren Eindruck, was noch an aktiven Parts im T-Log sein kann.

    Ansonsten wie Olaf schon gesagt hat, das LogBackup mal auf ein anderes Zielverzeichnis schreiben lassen. Geht zur Not auch auf einen UNC Pfad.

    Hast Du SQL 2k8R2 aufwärts? Dann mit dem Schalter WITH COMPRESSION das Backup ausführen. Hat zwar einen leicht höheren CPU Bedarf, aber dafür müssen weniger Daten auf Platte geschrieben werden und das Backup geht insgesamt schneller.

    Ein Shrink vor dem LogBackup hilft an der Stelle ja auch nicht wirklich, da die Menge an Daten, die via Backup weggeschrieben werden, sich ja nicht minimieren.  Es wird ja kein Abbild der LogDatei bei der Sicherung erzeugt.

    Gruß

    Dirk


    May you never suffer the sentiment of spending a day without any purpose

    Donnerstag, 23. August 2012 09:50
  •  und wird auf einem komprimiertem Laufwerk gesichert. Freier Platz darauf: 45 GB. Die Größe könnte ein Problem sein.

    Hallo Michael,

    das Sichern auf komprimierte Ordner mache ich auch, habe aber auch feststellen, das es ab Größen von ~20GB es nicht mehr geht und die Sicherung mit Fehler abbricht.

    Wenn es an der Größe liegt, könntet ein Splitted Backup die Lösung bring, sprich das Backup über mehrere TRN Datei verteilen. Bei der Log Größe sollten es schon mindestens 10 Dateien sein.  Geht per SQL so (Beispiel mit 4 Files), Du listest einfach mehrere DISK Anweisung auf:

    BACKUP LOG [abcd] 
    TO  DISK = N'C:\temp\abcd001.trn'
       ,DISK = N'C:\temp\abcd002.trn'
       ,DISK = N'C:\temp\abcd003.trn'
       ,DISK = N'C:\temp\abcd004.trn'
    WITH NOFORMAT, INIT,  NAME = N'Transaktionsprotokoll  Sichern', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    GO
    
    Falls Du es mal automatisieren willst, hier ein PowerShell Skript dazu: Striped Backup of Sql Server Databases

    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 13:45

Alle Antworten

  • Hallo,

    dazu muss eine Transaktionsprotokollsicherung erfolgen, eine Vollständige Sicherung reicht nicht aus.

    Siehe dazu auch die msdn Artikel: http://msdn.microsoft.com/de-de/library/ms189275.aspx

    und

    http://msdn.microsoft.com/de-de/library/ms365418

    Grüße

    Oliver

    Mittwoch, 22. August 2012 08:35
  • Hallo,

    ich habe das in einer Testumgebung ausgeführt.

     

    BACKUP

    LOG Database TO DISK='C:\daten\Database.bak'

    DBCC 

    das hat funktioniert. Wahrscheinlich reicht auch eine der Shrink-Anweisungen. Die LDF ist deutlich kleiner. Kann diese Maßnahme auch im laufendem Betrieb erfolgen oder sollte ich eher eine Ruhephase abwarten?

    Gruß

    Michael

    SHRINKDATABASE (Database ) dbcc shrinkfile (Database _log,1)
    Mittwoch, 22. August 2012 10:57
  • Hallo Michael,

    wenn Du regelmäßig eine Log Sicherung ausführst (z.B. stündlich), dann wird in Zukunft die Log Files auch nicht mehr so groß und Du kannst Dir das Verkleinern sparen (sollte man eh vermeiden), denn nach jeder Log Sicherung wird der Speicherplatz wieder frei gegeben.


    Olaf Helper
    Blog Xing

    Mittwoch, 22. August 2012 11:05
  • Hallo Michael,

    ein paar Antworten hast Du ja schon alle erhalten, aber ich wollte auch noch schnell "meinen Senf" dazugeben.

    Zuerst ein Blog Post http://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/

    bzgl dem Verkleinern von Datenbank-Dateien. Hier finden sich auch noch weiterführende Artikel. Wenn man mal die Zeit hat, einfach mal kurz lesen.

    Olaf hat es ja schon erwähnt, wenn Log Sicherungen regelmäßig ausgeführt werden, dann bleibt das LogFile relativ klein. Generell aber die Frage: in welchem RecoveryModel muss Deine Datenbank betrieben werden? Wenn Deine SLAs es nicht fordern, dass sogenannte "Point in Time Recoveries" möglich sein müssen, dann ist ggf auch der Wechsel in den Simple Recovery Mode möglich.  So oder so ist es empfohlen, die Log-Datei bzgl. der Größe voreinzustellen, beispielsweise fix 4GB oder 8GB. Kommt halt ganz darauf an was für Transaktionen in welchem Umfang über die DB gefahren werden.

    Was man nicht machen sollte ist mit dem LogFile Ziehharmonika spielen, also die Datei auf auf 8 MB runterbringen, durch die AutoGrow Funktion wieder vergrößern lassen um dann beim nächsten Mal die Datei wieder zu verkleinern. Fragmentierung als Stichwort.

    Um es noch mal zu verdeutlichen (aber dennoch hoffentlich einfach gesprochen): Wenn ich eine DB im Full Recovery Mode habe, dann verbleibt jede Transaktion so lange in der Protokolldatei, bis eine LogSicherung erfolgt. Wenn eine Logsicherung getätigt wurde, dann wird die "interne Befüllung" der LogDatei verringert, der Platz innerhalb also wieder frei gegeben. Was nicht passiert ist, das die Log Datei mal 4GB, dann wieder 2 GB und dann wieder 3 GB groß ist. Eine pre-allokierte Log Datei von 4 oder 8 GB bleibt physikalisch so groß.

    Und ein kleiner Tipp noch von mir, da ich gerade Dein Codebeispiel gesehen hab:  .BAK Endungen immer für Full bzw Differential Backups nehmen  und .TRN für LogSicherungen. Das ist die gängige Benennung.

    Was noch zu empfehlen ist im Technet: Understanding Logging and Recovery in SQL Server  von Paul Randal. Und falls doch noch etwas unklar sein sollte, einfach wieder fragen.

    Gruß und schönen Abend

    Dirk


    May you never suffer the sentiment of spending a day without any purpose


    • Bearbeitet Dirk Hondong Mittwoch, 22. August 2012 19:27 Tippfehler
    Mittwoch, 22. August 2012 19:27
  • Hallo Leute,

    erst einmal vielen Dank für die vielen Anregungen, die ich alle verstanden habe. Mein Problem ist aber nicht nur, den Datensicherungsmechanismuss zu optimieren, sondern zuerst die LDF-Datei zu verkleinern. Dazu habe ich "Log Database" ausgeführt. Leider schlägt diese Sicherung immer wieder fehl. Meldungen dazu sind 3202 und 3013 die auf Dateisystembeshränkungen hinweisen. Aus diesem Grund hatte ich gestern die Frage gestellt, ob diese Sicherung im laufenden Betrieb vorgenommen werden kann. Es könnte ja sein, das Behinderungen durch die Nutzung eintreten.

    Im Dateisystem kann ich keinen Fehler erkennen, da das FullBackup funktioniert. Das Problem wird für mich / uns immer dringender, da die Datenpartition für das Transactionsprotokoll vollläuft.

    Gruß

    Michael

    Donnerstag, 23. August 2012 07:02
  • Hallo Michael,

    Du meinst diese Fehlermeldungen:

    SELECT *
    FROM sys.messages
    WHERE message_id IN (3202, 3013)
          AND language_id = 1031

    %1! wird fehlerbedingt beendet.
    Fehler beim Schreiben auf "%1!": %2!

    Die sind wirklich nicht sehr aufschlußreich. Gibt es noch weitere Detail-Infos im SQL Server Error Log dazu, die weiter helfen könnten?

    Log Sicherungen kannst Du wie auch Vollsicherungen (normalerweise) problemlos im laufenden Betrieb durchführen; wir machen z.B. alle 30 min eine Log-Sicherung.

    Versuch mal, die Log Sicherung auf einen anderen Laufwerk erstellen zu lassen.
    Wenn es eng wird, könntest Du das Recovery Model von "Full" auf "Simple" umstellen, dann wird das Log geleert und Du könntest es verkleinert. Damit verlierst Du aber die Point-In-Time Restore Möglichkeit, also besser wirklich nur als letztes Mittel ausführen.

    Prüfe auch mal, ob evtl. es einen Problem mit dem LogReuse gibt:

    SELECT name, log_reuse_wait_desc
    FROM sys.databases
    ORDER BY name


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 07:12
  • Hallo Olaf,

    wir verwenden bereits ein anderes Laufwerk. Platz habe ich geschaffen, da das meine erste Annahme war. Ich habe das Ereignissprotokoll geprüft und außer der Meldung einer Dateisystemeinschränkung nichts gefunden.

    ich habe die Abfrage nach  log_reuse ausgeführt mit folgendem Ergebnis:

    Name log_reuse_wait_desc
    Database LOG_BACKUP
    master NOTHING
    model NOTHING
    msdb NOTHING
    tempdb NOTHING

    was bedeutet das? (parrallel schaue ich schon mal im Netz)

    Gruß Michael


    • Bearbeitet Michael Pleick Donnerstag, 23. August 2012 07:43 Tippfehler
    Donnerstag, 23. August 2012 07:37
  • Hallo Michael,

    Database LOG_BACKUP bedeutet, das aktuell ein Log Backup läuft und da kannst Du kein weiteres Log Backup ausführen, bis nicht das erste beendet ist.

    Da solltest Du mal prüfen, ob nicht evtl ein Job, der das Log Backup ausführt, hängt und deswegen diese Probleme verursacht werden.


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 07:44
  • Hallo Olaf,

    ich habe den Job unter "Wartungspläne" gesucht, finde dort aber keine Möglichkeit ihn zu stoppen. Im Agent gibt es den Ordner Aufträge. Wenn ich die Jobs dort stoppe erhalte ich einen Fehler, da keiner dieser Jobs läuft. Bin ich an der falschen stelle oder wie kann ich diesen oder einen laufenden Job finden?

    Gruß

    Michael

    Donnerstag, 23. August 2012 08:05
  • Hallo Michael,

    sorry, da habe ich mich vertan, der Status LOG_BACKUP bedeutet nicht, das éin Log Backup läuft, sondern das auf ein Lob Backup gewartet wird (= reuse wait; eigentlich selbsterklärend), bevor der Speicherplatz wieder freigegeben werden kann. Unter http://msdn.microsoft.com/en-us/library/ms178534.aspx => log_reuse_wait kann man in der Note lesen, das manchmal mehrer Backups nötig sind, damit der Platz frei gegeben wird.


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 08:24
  • wie gross ist eigentlich das Logfile und wieviel freien Platz hast Du auf dem Backupdrive?

    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Donnerstag, 23. August 2012 09:14
  • Hallo Olaf,

    Jetzt habe ich die Situation ein LOG_Backup zu benötigen und kann es nicht ausführen (ausführen schon, aber es schlägt fehl). Könnte es helfen eine Verkleinerung über die GUI oder über shrinkdatabase anzustoßen um ein Verkleinerung zu erreichen? Mir ist bewußt, das nicht alles Freigegeben wird (das Thema VLF habe ich verstanden) aber ich könnte Zeit gewinnen die ich u.U. benötige um den Fehler zu finden.

    oder, gibt es vielleicht eine andere Vorgehensweise.

    Gruß

    Michael

    Donnerstag, 23. August 2012 09:23
  • Moin moin,

    ich bediene mich mal schnell der Diagnostic Queries von Glenn Berry.

    Zuerst: wie voll ist das T-Log derzeit, wieviel Luft haben wir noch?

    -- Recovery model, log reuse wait description, log file size, log usage size  (Query 16) 
    -- and compatibility level for all databases on instance
    SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model], 
    db.log_reuse_wait_desc AS [Log Reuse Wait Description], 
    ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)],
    CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS [Log Used %], 
    db.[compatibility_level] AS [DB Compatibility Level], 
    db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on, db.is_auto_update_stats_on,
    db.is_auto_update_stats_async_on, db.is_parameterization_forced, 
    db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on,
    db.is_auto_close_on, db.is_auto_shrink_on
    FROM sys.databases AS db WITH (NOLOCK)
    INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK)
    ON db.name = lu.instance_name
    INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK) 
    ON db.name = ls.instance_name
    WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' 
    AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
    AND ls.cntr_value > 0 OPTION (RECOMPILE);

    Haben wir noch offene Transaktionen?

    -- Listing 4.26: Interrogating the active_snapshot_database_transactions DMV.
    SELECT DTASDT.transaction_id ,
    DTASDT.session_id ,
    DTASDT.transaction_sequence_num ,
    DTASDT.first_snapshot_sequence_num ,
    DTASDT.commit_sequence_num ,
    DTASDT.is_snapshot ,
    DTASDT.elapsed_time_seconds ,
    DEST.text AS [command text]
    FROM sys.dm_tran_active_snapshot_database_transactions DTASDT
    INNER JOIN sys.dm_exec_connections DEC
    ON DTASDT.session_id = DEC.most_recent_session_id
    INNER JOIN sys.dm_tran_database_transactions DTDT
    ON DTASDT.transaction_id = DTDT.transaction_id
    CROSS APPLY sys.dm_exec_sql_text(DEC.most_recent_sql_handle) AS DEST
    WHERE DTDT.database_id = DB_ID() 

    So bekommt man einen ungefähren Eindruck, was noch an aktiven Parts im T-Log sein kann.

    Ansonsten wie Olaf schon gesagt hat, das LogBackup mal auf ein anderes Zielverzeichnis schreiben lassen. Geht zur Not auch auf einen UNC Pfad.

    Hast Du SQL 2k8R2 aufwärts? Dann mit dem Schalter WITH COMPRESSION das Backup ausführen. Hat zwar einen leicht höheren CPU Bedarf, aber dafür müssen weniger Daten auf Platte geschrieben werden und das Backup geht insgesamt schneller.

    Ein Shrink vor dem LogBackup hilft an der Stelle ja auch nicht wirklich, da die Menge an Daten, die via Backup weggeschrieben werden, sich ja nicht minimieren.  Es wird ja kein Abbild der LogDatei bei der Sicherung erzeugt.

    Gruß

    Dirk


    May you never suffer the sentiment of spending a day without any purpose

    Donnerstag, 23. August 2012 09:50
  • Hallo Michael,

    dann wäre zunächst auch erst mal wichtig, herauszufinden, warum das BACKUP LOG bei der Datenbank fehl schlägt.

    Leg mal eine neue leere Datenbank mit Recovery Model = Full an, mach eine Vollsicherung und anschließend eine Log Sicherung, um zu sehen, ob es denn generell geht und evtl. das Problem nur mit der einen DB auftritt.


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 09:56
  • Hallo,

    ich versuche beides, UNC-Pfad und neue Datenbank. Die Sicherung dauert eine Weile, auch wenn sie nicht erfolgreich ist.

    Dirk@ Deine Abfragen habe ich in meiner Testumgebung schon mal probiert, life versuche ich sie nach der DASI, die läuft gerade.

    Danke Michael

    Donnerstag, 23. August 2012 10:21
  • wie gross ist eigentlich das Logfile und wieviel freien Platz hast Du auf dem Backupdrive?


    @Michael Pleick

    wie sieht es jetzt damit aus ?

    und welche SQL Server Version benutzt Du dabei?


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.


    Donnerstag, 23. August 2012 10:37
  • Hallo,

    folgende Ergebnisse:

    1. neue Datenbank wird ohne Probleme gesichert auf die bestehende Festplatte gesichert.

    2. Sicherung auf UNC schlägt fehl. Wahrscheinlich Fehlbedienung, da ich das Sicheungsmedium nicht  richtig anlegen kann. Er zeigt in der GUI ja nur lokale Laufwerke und ich habe dann einfach UNC eingegeben. Auf anderen lokalen Laufwerken ist nicht genug Platz.

    3. wie voll ist das Transact. 100%, keien offenen Transactionen

    Database FULL LOG_BACKUP 111411192 111338173 100.00 100 TORN_PAGE_DETECTION 1 0 0 0 OFF 0 0 0
    master SIMPLE NOTHING 1272 560 44.00 100 CHECKSUM 1 1 0 0 ON 0 0 0
    model FULL LOG_BACKUP 2296 668 29.00 100 CHECKSUM 1 1 0 0 OFF 0 0 0
    msdb SIMPLE NOTHING 5688 920 16.00 100 CHECKSUM 1 1 0 0 ON 0 0 0
    tempdb SIMPLE NOTHING 409592 13821 3.00 100 CHECKSUM 1 1 0 0 OFF 0 0 0

    Gruß

    Michael

    Donnerstag, 23. August 2012 10:57
  • Hallo Michael,

    Backup auf UNC geht über die GUI nicht, nur per T-SQL, Beispiel:

    BACKUP LOG [abcd] 
    TO  DISK = N'\\server\ordner\abcd.trn' 
    WITH NOFORMAT, INIT,  NAME = N'Transaktionsprotokoll  Sichern', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

    Das setzt aber voraus, das der Service Account, unter dem der SQL Server läuft, Schreibrechte auf dem Verzeichnis hat. Läuft er unter dem Standard "LocalSystem" Account, ist dies in der Regel nicht der Fall, da müssten die Rechte erst angepasst werden.

    Besteht evtl die Möglichkeit, eine USB Platte (oder Stick) anzuschließen, nur um die Sicherung (temporär) darauf machen zu können?


    Olaf Helper
    Blog Xing


    Donnerstag, 23. August 2012 11:13
  • Hallo,

    hier ein paar antworten:

    Größe das Logfile ist ca 110 GB groß und wird auf einem komprimiertem Laufwerk gesichert. Freier Platz darauf: 45 GB. Die Größe könnte ein Problem sein. Das Full-Backup benötigt ca. 20 GB auf dem Sicherungslaufwerk. Die Logsicherung bricht bei ca. 33 GB ab.

    Wir benutzen SQL-2008-Standard, also keine Komprimierung. Deshalb das Komprimierte Verzeichnis. Das hat auch 6 Monate funktioniert. Ein weiterer SQL mit der gleichen Datenbank für den 2 Standort funktioniert auch so, allerdings haben wir dort das Logfile verkleinern können.

    USB-Platte geht nicht, da anderer, ausländischer Standort (ich komme nicht dran). Die Sicherung auf UNC hatte ich auch so benutzt bzw. probiert. Grund für die Probleme sind dann sicher die Zugriffsrechte.

    das Full-Backup funktioniert nach wie vor aus dem Wartungsplan heraus. Deshalb, und weil die neu erstellte Datenbank sich auch sichern läßt, glaube ich nicht an einen Festplattenproblem. Ursache könnte danach die Größe des Logfiles oder ein Problem mit der DB sein, oder?

    Gruß

    Michael Pleick


    Donnerstag, 23. August 2012 12:17
  •  und wird auf einem komprimiertem Laufwerk gesichert. Freier Platz darauf: 45 GB. Die Größe könnte ein Problem sein.

    Hallo Michael,

    das Sichern auf komprimierte Ordner mache ich auch, habe aber auch feststellen, das es ab Größen von ~20GB es nicht mehr geht und die Sicherung mit Fehler abbricht.

    Wenn es an der Größe liegt, könntet ein Splitted Backup die Lösung bring, sprich das Backup über mehrere TRN Datei verteilen. Bei der Log Größe sollten es schon mindestens 10 Dateien sein.  Geht per SQL so (Beispiel mit 4 Files), Du listest einfach mehrere DISK Anweisung auf:

    BACKUP LOG [abcd] 
    TO  DISK = N'C:\temp\abcd001.trn'
       ,DISK = N'C:\temp\abcd002.trn'
       ,DISK = N'C:\temp\abcd003.trn'
       ,DISK = N'C:\temp\abcd004.trn'
    WITH NOFORMAT, INIT,  NAME = N'Transaktionsprotokoll  Sichern', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    GO
    
    Falls Du es mal automatisieren willst, hier ein PowerShell Skript dazu: Striped Backup of Sql Server Databases

    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 13:45
  • Hallo,

    hier ein paar antworten:

    Größe das Logfile ist ca 110 GB groß und wird auf einem komprimiertem Laufwerk gesichert. Freier Platz darauf: 45 GB. Die Größe könnte ein Problem sein. Das Full-Backup benötigt ca. 20 GB auf dem Sicherungslaufwerk. Die Logsicherung bricht bei ca. 33 GB ab.

    das ist die Antwort.

    Backup auf komprimierte Volumes / Directory ist nicht recommand - letzthin wurde dazu ein KB Artikel veroeffentlicht - und kann zu Problemen fuehren.

    Musst Du zwingend dieses Log noch speichern, oder wuerde es reichen, das Logfile korrekt zu redimensionieren und mittels Fullbackup eine neue Log Chain zu erstellen?

    Schau Dir dazu auch diesen Thread http://social.msdn.microsoft.com/Forums/nl/sqldisasterrecovery/thread/4283def4-f8fa-4620-b60e-a9c88ac0d30e an und der folgenden KB Artikel zu SQL Server auf Compressed Volumes:

    http://support.microsoft.com/kb/231347


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.


    Donnerstag, 23. August 2012 15:07
  • Hallo,

    ich habe schon viel über SQL-Server dazugelernt. Im Moment läuft gerade das Backup mit verteilten Dateien, wie von Olaf vorgeschlagen. Die gesicherte Datenmenge und die Zeit ist bereits deutlich größer bei den letzten Versuchen. Deshalb bin ich bin guter Dinge. Sollte auch das nicht klappen, dann muss ich auf das Log verichten, wie auch immer. Ich halte Euch auf dem Laufenden.

    Michael


    • Bearbeitet Michael Pleick Donnerstag, 23. August 2012 15:19 Tippfehler
    Donnerstag, 23. August 2012 15:17
  • Daniel, in dem KB Artikel geht es um die Datenbankdateien und das ist klar, dass das nicht unterstützt wird. Man kann den SQL Server erst gar nicht auf einem komprimierten Laufwerk installieren, das lässt der Installer nicht zu.

    Das Backups auf komprimierten Laufwerk nicht unterstützt wird, habe ich bisher nicht gelesen. Allerdings weiß ich, dass es eben solche Probleme ab bestimmter Dateigrößen gibt und es sehr, sehr langsam ist; für den Produktivbetrieb nicht geeignet und ich mache es auch nur für Testdatenbanken und deren Neuabzug.


    Olaf Helper
    Blog Xing


    Donnerstag, 23. August 2012 15:23
  • Hallo,

    die Sicherung ist erfolgreich durchgelaufen. Danke an alle und an Olaf.

    Dann sollte nach dem nächsten normalen Backup die LDF-Datei ja kleiner werden. Das ist dann morgen früh sichtbar.

    bis dann

    Michael

    Donnerstag, 23. August 2012 15:38
  • Hallo Michael,

    das sind ja gute Nachrichten zum Feierabend hin; freut mich, wenn ich habe helfen können.


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 15:40
  • Daniel, in dem KB Artikel geht es um die Datenbankdateien und das ist klar, dass das nicht unterstützt wird. Man kann den SQL Server erst gar nicht auf einem komprimierten Laufwerk installieren, das lässt der Installer nicht zu.

    Das Backups auf komprimierten Laufwerk nicht unterstützt wird, habe ich bisher nicht gelesen. Allerdings weiß ich, dass es eben solche Probleme ab bestimmter Dateigrößen gibt und es sehr, sehr langsam ist; für den Produktivbetrieb nicht geeignet und ich mache es auch nur für Testdatenbanken und deren Neuabzug.

    @Olaf

    ich habe bewusst nicht die Formulierung nicht unterstuetzt sondern nicht empfohlen gewaehlt und mir ist klar, dass der erwaehnte KB Artikel sich mehrheitlich auf database files auf compressed volumes bezieht.

    Aber es ist hinlaenglich bekannt, dass compressed volumes Probleme bereien tkoennen, sobald der Platz knapp wird und daher sind compressed volumes im neuen FS von Windows Server 2012 auch nicht mehr unterstuetzt. (obwohl es bei vielen kleineren Daten dieses Features praktisch ist)


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Donnerstag, 23. August 2012 15:46
  • die Sicherung ist erfolgreich durchgelaufen. Danke an alle und an Olaf.

    Dann sollte nach dem nächsten normalen Backup die LDF-Datei ja kleiner werden. Das ist dann morgen früh sichtbar.

    Michael

    die LDF Dateien werden durch ein Transaktion Log backup nicht verkleinert sondern nur der belegte Teil.

    Wenn Du sicher bist, dass das Logfile nicht mehr 110GB gross werden kann, so solltest Du Dir evt. ueberlegen, das Logfile zu shrinken und danach sofort wieder auf die normale Groesse zu erweitern (in 8GB Schritten) um die interne Fragmentierung des LDF zu reduzieren und damit das Logfile performanter zu machen.


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.


    Donnerstag, 23. August 2012 15:49
  • Hallo Michael,

    Wie Daniel schon schrieb, verkleinert sich das Log File nicht von alleine, die musst Du von Hand verkleinern. Nur eine 110 GB große Datei auf einmal komplett verkleinern könnte ganz schön lange dauern und würde ganz schön das IO System belasten und somit den Produktivbetrieb stören.

    Also entweder ausserhalb der Produktion verkleinern (Nachts / Wochenende) oder immer nur schrittweise verkleinern. In der SSMS GUI zum Verkleinern kannst Du die Zielgröße angeben, ebenso beim ShrinkFile Befehl. Mit dem folgenden Skript kannst Du das Log immer um einen definierten Wert verkleinern, in dem Fall immer um 50 MB (ist allerdings darauf ausgelegt, das es nur 1 Log File je DB gibt):

    DECLARE @LogName VARCHAR(255);  
    DECLARE @TarSize INT;
    
    SET @Logname = (SELECT name FROM sysfiles WHERE groupid = 0);
    -- Größe um 50 MB verringern
    SET @TarSize = ROUND(8 * (SELECT size FROM sys.sysfiles WHERE groupid = 0) / 1024, 0) - 50;
    
    SELECT @logname,  @TarSize;
    EXEC ('DBCC SHRINKFILE (' + @LogName + ', ' + @TarSize + ')');
    
    -- Größenstatistik aktualisieren und Werte ausgeben
    DBCC UPDATEUSAGE(0);
    EXEC sp_spaceused;

    Und danach, ebenfalls wie Daniel schon schrieb, solltest Du die Log Datei Autogrowth passend konfigurieren und darauf achten, das regelmäßig das Log gesichert wird. Passen beides zusammen, sollte im Normalfall das Log nicht mehr oder nur selten anwachsen; kontrollieren kannst Du das mit einem Script aus dem TechNet ScriptCenter: Log Growth Rate


    Olaf Helper
    Blog Xing


    • Bearbeitet Olaf HelperMVP Freitag, 24. August 2012 06:43 0 statt 1 für Log Files
    Freitag, 24. August 2012 06:16
  • Hallo Olaf,
    die Verkleinerung eines LDF geht im Vergleich zu einem MDF sehr schnell, da hier keine Datenseiten hin und her geschoben werden. Es wird einfach das freie Ende gekappt.

    Damit solltest Du bei wenigen Sekunden ankommen und kannst dies auch im Produktionsbetrieb machen.

    Wenn nach dem ersten Verkleinern das LDF immer noch zu groß ist, liegt dies daran, dass der aktive Teil (nun) am Ende ist. Dann einfach etwas warten, bis weitere Transaktionen gelaufen sind und ein weiteres Backup des Logs erfolgt ist. Danach ist der aktive Teil am Anfang des LDF und man kann erneut shrinken.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Freitag, 24. August 2012 06:51
    Beantworter
  • Hallo,

    ist die Thematik jetzt abgeklärt?

    Wenn ja, bitte auch die Antworten markieren, die Dir geholfen haben.

    So können auch andere davon profitieren.

    Gruss,
    Raul


    Raul Talmaciu, MICROSOFT 
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 27. August 2012 12:39
  • Hallo,

    sorry, aber ich habe noch etwas Zeit gebraucht, da sich meine Tätigleit hier auf bestimmte Tage beschränkt.

    Ich habe heute ermeut eine Logsicherung erstellt und schließend die Datenbank verkleinert. Jetzt steht wieder ordentlich Speicherplatz zur Verfügung. Abschließend werden ich noch den Wartungplan nach den gewonnenen Erkenntnissen optimieren und dann sollte das Problem behoben sein.

    @Raul: Die hilfreichen Antworten habe ich markiert.

    Danke für die Beiträge und Hilfe.

    Gruß

    Michael Pleick

    Dienstag, 28. August 2012 09:14