Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

SQL 2008R2 Transaction Log File verkleinern

Frage Entwicklung Datenbanken

Mitglied: Andinistrator1

Andinistrator1 (Level 1) - Jetzt verbinden

02.02.2015, aktualisiert 06.02.2015, 1524 Aufrufe, 10 Kommentare

Hallo zusammen,
zahlreiche Artikel im Internet gibt es zu dem Thema, jedoch werde ich nicht so richtig fündig.

Problembeschreibung

Beim Recovery dauert die Sicherung sehr lange, da der TLF 15x größer ist wie die eigentliche Datenbank.

Fakten:
Ich habe eine DB-Spiegelung laufen, d.h. das Wiederherstellungsmodell muss auf "Vollständig" stehen.

Ich kann zwar per Rechtsklick auf die DB > Tasks > Verkleinern > Datei > Dateityp = Protokoll

99% des TLF freigeben, jedoch pumpt sich dieses beim nächsten Recovery immer wieder auf.

Wie muss ich es richtig machen? Bisher sind es nur drei Schritte:
1. DB Vollsicherung (automatisch in der Nacht)
2. Kopie ins Testsystem
3. Wiederherstellung

Ich bedanke mich für eure Tipps!
Mitglied: Ravers
02.02.2015 um 14:03 Uhr
Hi,

du kannst in den Eigenschaften der DB das Handling der Log-File beeinflussen.
Hier steht vermutlich (bei Dateien) etwas aller: um 10% vergrößern - unbegrenzt vergrösserbar.
Dies mal ändern, z.B. max Größe 2GB o.ä.
Oder halt DBCC Shrinkfile nach jeder Wiederherstellung machen. Aber ich vermute mal das du das Transactionlog eher selten nutzt, daher empfehle ich die Größenbeschränkung.

greetz
ravers
Bitte warten ..
Mitglied: Andinistrator1
02.02.2015 um 15:30 Uhr
Vielen Dank ravers,

unter DB Eigenschaften > Dateien ist schonmal die Anfangsgröße viel zu hoch eingestellt, und "Um 10 Prozent, Vergrößerung auf 2097152 MB beschränkt." Dies scheint wohl ein Default Wert zu sein, hier hatte ich nichts verändert.

DBCC SHRINKFILE hatte ich einmal ausgeführt, jedoch bevorzuge ich die grafische Variante, da diese ein besseres Ergebnis liefert.

Im Prinzip entwickeln wir in einem Testsystem, übernehmen diese ins Produktivsystem und packen diesen Stand zurück ins Testsystem. Jedes mal wächste dabei der TLF (logisch) um 15GB, d.h. um die Größe der DB.

Was ich getestet habe:

1. DB Recovery
2. Wiederherstellungsmodell "Einfach"
3. TLF verkleinert

Von über 200GB TLF bin ich damit auf weniger als 1MB gekommen. Spiele ich aber nun das Produktivsystem ins Testsystem zurück, habe ich wieder 200GB.

Ich muss aber die Wiederherstellungsmodell im Produktivsystem auf Vollständig lassen, weil dies Grundlage für die Spiegelung ist... .

Ich weiß meine DB ist 15GB, wenn ich den TLF auf max. 50 GB setze (ca. 3x Änderungen), wie ist es dann in der Praxis? Kommt dann die Meldung Datenbank voll oder überschreibt es die alten Änderungen?
Bitte warten ..
Mitglied: MadMax
02.02.2015 um 19:19 Uhr
Hallo Andinistrator1,

dein Problem ist, daß Du nur die Datenbank sicherst, aber nicht das Transaktionsprotokoll. Wenn das nicht gesichert wird, dann läuft das voll, bis die Platte dicht ist (oder wenn Du dem Rat von Ravers gefolgt bist, bis das eingestellte Maximum erreicht ist). Wenn das Protokoll dann voll ist gibt es einen Fehler, Du solltest also die Größe des Protokolls nicht begrenzen oder die Grenze recht großzügig bemessen.

Richte Dir einen Job ein der ähnlich Deiner Vollsicherung ist, aber nur das Transaktionslog sichert. Dann wird der gesicherte Teil freigegeben und landet nicht mehr in seiner vollen Größe in der Vollsicherung. Wenn Du die Protokollsicherung z.B. alle Stunde ausführst, dann wächst Dein Protokoll auch nicht mehr so gigantisch an.

Deine erste Protokollsicherung dürfte dann erstmal recht groß ausfallen, weil das Protokoll die ganze Zeit nicht gesichert wurde, die weiteren werden aber dann recht schmal werden.

Gruß, Mad Max
Bitte warten ..
Mitglied: Andinistrator1
03.02.2015, aktualisiert um 10:52 Uhr
Hallo Mad Max,

vielen Dank, dass erscheint mir mehr als einleuchtend. Nur um zu wissen ob ich es richtig verstanden habe:

Auf einer anderen DB habe ich den sog. "Transaktionsprotokollversand" eingerichtet, um einen Datenstand -15 Minuten im Notfall herstellen zu können (*.TRN Dateien) .

Würde eine Aktivierung dessen auf meiner hier problematischen Datenbank zum gleichen Ergebnis führen...
73b4558842890c90109e1b392e371e39 - Klicke auf das Bild, um es zu vergrößern

...oder müsste ich hier einen Job manuell einrichten? Mein Script einer Vollsicherung ist momentan einfach, aber übersichtlich:

"Sichere meine Datenbank in einen Ordner uns lösche alle *.bak Dateien welche älter 3 Tage sind."

---
DECLARE @backupPath varchar(100);
DECLARE @backupQuery varchar(500);
DECLARE @DeleteDate DATETIME = DATEADD(day,-3,GETDATE());

-- set variable
set @backupPath = 'D:\MSSQL\Backup\'
set @dbName = 'DATENBANKNAME'

-- Backup SQL statement
set @backupQuery = 'backup database ' + @dbName + ' to disk = ''' + @backupPath + @dbName + '_[' + REPLACE( convert(varchar, getdate(), 126), ':', '-') + '].bak'' WITH FORMAT, INIT, NAME = ''DB_Backup'', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 '

-- Execute backup script
EXEC (@backupQuery)

--Cleanup (remove any files older than @DeleteDate
EXEC master.sys.xp_delete_file 0,@backupPath,'bak',@DeleteDate,0;

GO
---

Den Job lasse ich 1x/Nacht laufen. Ich wüsste spontan nicht, wie ich sonst gezielt die *.LDF (TLF) Datei/Datenbank sichern könnte.
Bitte warten ..
Mitglied: MadMax
03.02.2015 um 12:39 Uhr
Hallo Andinistrator1,

Protokollversand ist keine Protokollsicherung, dadurch wird Dein Protokoll also nicht freigegeben (soweit ich weiß, bis jetzt hatte ich noch nichts mit Protokollversand zu tun).

Die Sicherung des Transaktionsprotokolls ist nicht so viel anders als die Sicherung der Datenbank. Statt "backup database ..." heißt der Befehl dann "backup log ...". Läßt sich auch sehr schön in der Hilfe vom SQL Server nachlesen.

Gruß, Mad Max
Bitte warten ..
Mitglied: Andinistrator1
04.02.2015, aktualisiert um 07:44 Uhr
Vielen Dank Mad Max,

es ist Fakt, der Transaktionsprotokollversand hat damit nichts zu tun, ebenso eine tägliche Vollsicherung. Der TLF wird dadruch nicht verkleinert.

Einen Artikel habe ich gefunden, welcher hilfreich war (http://blogs.technet.com/b/austria/archive/2011/03/08/sql-server-the-tr ...), hier wird mit SHRINK gearbeitet.

In meiner Kombination muss ich weiter suchen, da ich eine Datenbankspiegelung (= Wiederherstellungsmodell Vollständig) laufen habe. Hier ist bei Google viel geboten, jedoch auch viele Mutmaßungen. In einer Testumgebung macht es nichts, aber im Produktivsystem bin ich mir noch nicht sicher, ob ich hier einfach mal einen SHRINK Befehl ausführen kann. Funktionieren würde es so:

Wie ist der Name der *.LOG Datei:

SELECT name FROM sys.database_files
WHERE type_desc = 'LOG'

Verkleinern per SHRINKFILE:

DBCC SHRINKFILE ('DATENBANKNAME_log', 1000)

Ich werde deinem Vorschlag nach der Vollsicherung speziell vom TLF nachgehen, vielleicht kannst du mir ja mal ein Script für die TLF Sicherung vorschlagen. Den Zyklus regel ich über die Auftragsplanung.
Bitte warten ..
Mitglied: MadMax
04.02.2015, aktualisiert 06.02.2015
Hallo Andinistrator1,

grundsätzlich tut dbcc shrinkfile nicht weh, garantieren, daß das bei Euch auch fehlerfrei funktioniert, wird Dir das natürlich keiner.

Und was willst Du für einen Vorschlag für ein Skript? Tausch bei Deinem Backup-Skript für die Vollsicherung das "database" gegen ein "log" aus, dann noch irgendein Kennzeichen beim Dateinamen oder der Erweiterung, daß es sich um die Protokollsicherung handelt, dann hast Du Dein Skript. Oder Du nimmst das aus dem Artikel, den Du gefunden hast. Dadurch, daß Du für jede Sicherung einen eigenen Dateinamen hast und auch nicht auf ein Band sicherst, sind die meisten Schalter sowieso überflüssig.

Mach Deine Protokolldatei nicht zu klein, sonst muß sie nur wieder erweitert werden, was sich dann wieder ungünstig auswirkt (s.a. in dem gefundenen Artikel bei "Shrink File").

Gruß, Mad Max
Bitte warten ..
Mitglied: Ravers
04.02.2015, aktualisiert 06.02.2015
Hi,
führe folgende Befehle jeweils als eigene Abfrage aus:

DBCC SHRINKFILE (DATENBANKNAME_log,10)

BACKUP LOG DATENBANKNAME WITH TRUNCATE_ONLY

DBCC SHRINKFILE (DATENBANKNAME_log,10)

So wird`s wohl gehen!

greetz
ravers
Bitte warten ..
Mitglied: Andinistrator1
05.02.2015, aktualisiert um 17:07 Uhr
Vielen Dank ravers,
ein SHRINKFILE Befehl möchte ich nicht im Produktivsystem ausführen (Bauchgefühl nach einigen Berichten). Ich habe es nun doch geschafft den TLF mit Boerdmitteln zu verkleinern, was mich eigentlich verwundert. Nachdem was ich bisher gelesen hatte, hätte es nicht klappen dürfen.

- Datenbankspiegelung an (unverändert)
=> Wiederherstellungsmodell auf Vollständig (unverändert)
- Vollsicherung 1x/Nacht (siehe Script oben) (unverändert)

NEU
Gestern Transaktionsprotokollversand eingerichtet, seither ist in der Nacht eine Vollsicherung gelaufen.

Ich konnte jedoch heute den TLF genau wie im Testsystem verkleinern, ohne das Wiederherstellungsmodell auf einfach zu setzen. Ich weiß aber nicht warum das nun plötzlich funktioniert hat... :

1df9416ace59ff5b73fb1172e6ac2cc6 - Klicke auf das Bild, um es zu vergrößern

VORHER
f7aaaddffd1ebc84ab6badd8f983f2b0 - Klicke auf das Bild, um es zu vergrößern

NACHHER
78374767bb30f86abc52062a2646f46b - Klicke auf das Bild, um es zu vergrößern

Mir stellt sich jetzt die Frage ob die Freigabe vom Speicher inkl. Verkleinerung des TLF nicht doch mit dem Transaktionsprotokollversand zusammenhängt?!
Bitte warten ..
Mitglied: Andinistrator1
06.02.2015, aktualisiert um 08:17 Uhr
Guten Morgen zusammen,

nachdem ich heute morgen nochmal einen Restore gefahren habe kann ich bestätigen, dass der TFL von über 200GB sich im Rahmen (unter 100MB) hält.

Entgegen aller MS zertifizierten Ratgeber gab es bei mir folgenden Lösungsweg:

Datenbankspiegelung (= Wiederherstellungsmodell bleibt Vollständig!)
Vollsicherung 1x/Nacht
Transaktionsprotokollversand eingerichtet alle 15 Minuten

Per Rechtsklick auf den DB ließ sich die DB wie oben beschrieben verkleinern, ich habe die nächtliche Vollsicherung abgewartet.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Windows Server
gelöst MS SQL Server 2014 unter Windows Server 2008R2 (2)

Frage von bootnix zum Thema Windows Server ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...