Frage

Ich habe mehrere Datenbanken, in denen das Transaktionsprotokoll (LDF) ein Vielfaches größer als die Datenbankdatei (.mdf) ist.

Was kann ich tun, um diese automatisch zu schrumpfen oder sie davon abhalten, immer so groß?

War es hilfreich?

Lösung

Das sollte den Job

use master
go
dump transaction <YourDBName> with no_log
go
use <YourDBName>
go
DBCC SHRINKFILE (<YourDBNameLogFileName>, 100) -- where 100 is the size you may want to shrink it to in MB, change it to your needs
go
-- then you can call to check that all went fine
dbcc checkdb(<YourDBName>)

Ein Wort der Warnung

Sie würde es nur wirklich verwenden, um auf einer Test / Entwicklungsdatenbank, wo man nicht eine richtige Backup-Strategie braucht, wie das Protokoll Dumping zu verlieren Transaktionen Geschichte führen wird. In Live-Systemen sollten Sie Lösung von Cade Roux

Andere Tipps

Backup Transaktionsprotokoll und schrumpfen sie.

Wenn die DB regelmäßig gesichert wird und am Checkpoint abgeschnitten, sollte es nicht außer Kontrolle geraten, aber wenn Sie eine große Anzahl (Größe) der Transaktionen zwischen diesen Abständen zu tun, wird es bis zum nächsten Kontrollpunkt wachsen .

Rechtsklick auf die Datenbank in Enterprise Manager> Alle Tasks> Shrink-Datenbank.

Niemand hier sagte, es, so werde ich: NIEMALS das Transaktionsprotokoll schrumpfen. Es ist eine schlechte Idee, von der SQL Server-Sicht.

Halten Sie das Transaktionsprotokoll klein täglich db Backups tun und stündlich (oder weniger) Transaktionsprotokollsicherungen. Das Transaktionsprotokoll Sicherungsintervall hängt davon ab, wie ausgelastet db ist.

Eine andere Sache, die Sie versuchen können, ist die Wiederherstellungsmodus einfach zu setzen für die Datenbank (falls sie es nicht schon sind), die die Protokolldateien wachsen so schnell halten. Wir hatten dieses Problem vor kurzem, wo unser Transaktionsprotokoll gefüllt und wir waren nicht mehr Transaktionen erlaubt.

Eine Kombination der Schrumpf-Datei, die in mehreren Antworten und einfachen Wiederherstellungsmodus sorgten dafür, dass unsere Protokolldatei eine angemessene Größe geblieben ist.

Mit Query Analyzer:

USE yourdabatase
SELECT * FROM sysfiles

Sie sollten etwas Ähnliches finden:

FileID    …  
1             1             24264    -1            1280      1048578               0             yourdabatase_Data    D:\MSSQL_Services\Data\yourdabatase_Data.MDF
2             0             128         -1            1280      66           0                             yourdabatase_Log      D:\MSSQL_Services\Data\yourdabatase_Log.LDF

Überprüfen Sie die Datei-ID der Protokolldatei (seine 2 die meiste Zeit). Führen Sie 2 oder 3 mal den Befehl checkpoint jede Seite auf die Festplatte zu schreiben.

Checkpoint
GO
Checkpoint
GO

Führen Sie den folgenden Befehl Transaktions die Protokolldatei 1 MB mit dem Stamm

DUMP TRAN yourdabatase WITH no_log 
DBCC SHRINKFILE(2,1)  /*(FileID , the new size = 1 Mb)*/

Hier ist, was ich habe mit

BACKUP LOG <CatalogName> with TRUNCATE_ONLY
DBCC SHRINKDATABASE (<CatalogName>, 1)
use <CatalogName>
go
DBCC SHRINKFILE(<CatalogName_logName>,1)

versuchen sp_force_shrink_log, die Sie hier finden können http://www.rectanglered.com/sqlserver.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top