Muss ich wirklich .LDF-Dateien behalten?

9

Jeden Monat erstellen wir eine Momentaufnahme unserer Produktionsdatenbank zum Monatsende. Diese Schnappschüsse zum Monatsende dienen ausschließlich Berichtszwecken. Es werden keine Einfügungen, Aktualisierungen oder Löschungen vorgenommen. Jeder dieser Schnappschüsse enthält eine .MDFund .LDF-Datei.

Ich möchte die .LDFDateien löschen und Speicherplatz auf dem Server freigeben . Gibt es Gründe, warum ich die .LDFDateien aufbewahren muss?

Klärung:

Unsere Produktionsdatenbank wird jede Nacht aus Dateiextrakten eines anderen Systems neu erstellt. Wir melden nur aus der Produktionsdatenbank ... es werden nie Updates durchgeführt.

Nächtlicher Prozess: Soweit
ich
das beurteilen kann ... Jede Nacht werden die Datenbanktabellen abgeschnitten.
Die Tabellen werden durch eine Reihe von Bulk-Insert-Anweisungen
gefüllt. Indizes werden neu erstellt

Michael Riley - AKA Gunny
quelle

Antworten:

16

Sie sollten die Protokolldatei nicht löschen. Wenn Sie versuchen, eine Datendatei ohne das Protokoll erneut anzuhängen, kann SQL Server sie technisch neu erstellen. Es gibt jedoch einige potenzielle Probleme, z. B. wenn beim Trennen der Datenbank offene Transaktionen aufgetreten sind. In diesem Fall hätten Sie einen vollständigen Datenverlust.

Verbrauchen Sie den Speicherplatz und löschen Sie Ihre Protokolldateien nicht . Sie bitten um Ärger damit.

Weitere Informationen finden Sie in diesem Artikel zu Transaktionsprotokollen , insbesondere im Abschnitt "Protokollmissmanagement".

Thomas Stringer
quelle
9

Wie in einer anderen Antwort erwähnt , können Sie die Protokolldatei nicht löschen. Sie können die Datenbank auf einstellen READ_ONLY. Wenn die Datenbank READ_ONLYaktiviert ist, sind keine Änderungen zulässig und die Protokolldatei wächst nicht. Sie können die Größe der Protokolldatei auf eine minimale Größe reduzieren und Ihr Ziel einer minimalen Stellfläche erreichen. READ_ONLYFühren Sie den folgenden Befehl aus, um die Datenbank einzurichten :

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

Sie können die Datenbank wieder auf ändern READ_WRITE, die erforderlichen Änderungen vornehmen und sie dann READ_ONLYjederzeit einstellen .

Die Protokolldatei wird weiterhin benötigt, um die ACID-Eigenschaften der Datenbank beizubehalten.

jgardner04
quelle
2

Tatsache ist, dass Sie eine Datenbank nur mit der MDF-Datei erstellen können. Dies ist der Befehl sp_attach_single_file_db (Transact-SQL). Beachten Sie, dass es in einer zukünftigen Version von Microsoft SQL Server entfernt wird. Es ist jedoch nicht klug, Ihre LDF-Dateien zu löschen. Shark hat recht. "Sie bitten um Ärger damit." Eine andere Sichtweise - sind Ihre ldf-Dateien riesig? Wenn ja, können Sie etwas dagegen tun.

  1. Stellen Sie Ihre Datenbank auf Simple Recovery Model ein . Sie können dies nur tun, wenn Sie die Transaktionen nicht zurücksetzen möchten
  2. Erstellen Sie anstelle von MDF- und LDF-Dateien eine vollständige Datenbank-Backup-Datei (.BAK). Es wird kleiner sein als MDF + LDF
Carol Baker West
quelle
-3

Hier ist die Lösung, die ich gefunden habe, um die LDF-Dateien zu verkleinern.

  1. Datenbank trennen
  2. Benennen Sie die LDF-Datei in * _old.ldf um
  3. Datenbank anhängen
  4. Entfernen Sie die Referenz zum fehlenden LDF

Dadurch wird eine LDF-Datei mit einer Größe von 504 KB neu erstellt.

  1. Löschen Sie * _old.ldf
  2. Papierkorb leeren

Dadurch wurde eine erhebliche Menge an Speicherplatz auf dem Server zurückgewonnen. Dies funktioniert bei uns, da alle diese Datenbanken NUR statische Berichtsdatenbanken sind. Für diese Datenbanken werden niemals Einfügungen, Aktualisierungen oder Löschungen durchgeführt.

UPDATE 24.09.2019: Ja, ich stimme zu, dass dies eine wirklich schlechte Idee ist. Ich hörte fast sofort damit auf. Ich habe alle Indizes mit einem Füllfaktor von 100 neu erstellt. Nur die .ldf-Dateien wurden verkleinert. Und alle Datenbanken so geändert, dass sie NUR LESEN.

Michael Riley - AKA Gunny
quelle
6
Wow, das ist eine wirklich schlechte Idee. Was ist, wenn die Datenbank nicht erfolgreich getrennt wird oder irgendwo zwischen 1 und 3 verloren geht oder beschädigt wird? Du bist geschraubt. Sie haben NULL Kopien Ihrer Datenbank.
Aaron Bertrand
3
Der richtige Weg, dies zu tun, wäre: 1. Erstellen Sie eine COPY_ONLY-Sicherung der Datenbank. 2. Stellen Sie es auf dem Berichtsserver wieder her. 3. Setzen Sie die Wiederherstellung auf einfach und markieren Sie die wiederhergestellte Kopie als schreibgeschützt. 4. Verkleinern Sie die Protokolldatei manuell. Ja, Sie brauchen den Platz in der Zwischenzeit, aber Sie können Ihren Job behalten!
Aaron Bertrand